🌿 jadelog
🔎 Practice

Notion API 변경 대응: morethan-log 오류 해결 로그

status
Public
date
Feb 9, 2026
slug
fix-morethan-log-notion-api-error
summary
최근 Notion API 데이터 구조 변경(중첩된 value 속성)으로 인해 morethan-log 블로그 게시물이 로딩되지 않는 오류를 해결합니다. getPosts.ts 및 주요 파일의 코드 수정 방법을 정리했습니다.
type
Post
category
🔎 Practice
tags
NotionAPI
Troubleshooting
thumbnail
Gemini_Generated_Image_x08vbvx08vbvx08v.png
series
최근 Notion API의 데이터 구조 변경으로 인해, 나처럼 morethan-log를 사용하는 블로그에서 게시물이 로딩되지 않거나 오류가 발생하는 현상이 생겼다.
morethan-log
morethanminUpdated Mar 15, 2026
 
원본 레포지토리도 계속 관리가 되고 있는 것 같긴 한데, 나는 이미 포크를 끊고 커스텀해서 사용 중이라 수동으로 해결해야 했다.
이번 글에서는 해당 문제의 원인을 파악하고, 정상적인 작동을 위해 수정해야 할 코드 내용을 파일별로 정리해봤다.

문제 원인: 중첩된 value 속성

Notion API 업데이트로 인해 블록(Block) 데이터의 구조가 변경되었다. 기존에는 block[id].value에서 바로 데이터에 접근할 수 있었으나, 업데이트 이후 실제 데이터가 한 단계 더 깊은 value 내부에 담기게 되었다.
구조를 뜯어보니 value 껍데기가 하나 더 생긴 형태다.
{ value: { // <--- 이게이 새로 생김 id: '2c1 .... bc27', ... value: { // <--- 기존 데이터는 여기로 밀려남 schema: { 'NX\\Q': [Object], WxpT: [Object], ... }, } } }
즉, 접근 경로가 아래와 같이 바뀌었다.
  • 변경 전: block[id].value
  • 변경 후: block[id].value.value
따라서 기존 코드에서 API 응답을 파싱하는 경로를 수정해줘야만 정상적으로 데이터를 불러올 수 있다.

해결 방법: 코드 수정

수정이 필요한 주요 파일은 총 3개다.
각 파일에서 데이터 접근 경로를 변경된 구조에 맞게 수정해야 한다. 또한 타입스크립트 에러 방지를 위해 as any를 사용하여 일시적으로 타입을 우회했다.

1. src/apis/notion-client/getPosts.ts

블로그 게시물 목록을 가져오는 파일이다. 컬렉션 스키마와 메타데이터를 가져오는 부분을 수정해야 한다.
Before:
const collection = Object.values(response.collection)[0]?.value const block = response.block const schema = collection?.schema const rawMetadata = block[id].value // ... (중략) properties.createdTime = new Date(block[id].value?.created_time).toString() properties.fullWidth = (block[id].value?.format as any)?.page_full_width ?? false
After:
const collection: any = Object.values(response.collection)[0]?.value const block = response.block const schema = collection?.value?.schema // <--- 수정됨 const rawMetadata = (block[id].value as any)?.value // <--- 수정됨 // ... (중략) properties.createdTime = new Date((block[id].value as any)?.value?.created_time).toString() // <--- 수정됨 properties.fullWidth = ((block[id].value as any)?.value?.format as any)?.page_full_width ?? false // <--- 수정됨

2. src/libs/utils/notion/getPageProperties.ts

페이지의 속성(Properties)을 추출하는 유틸리티 파일이다.
Before:
const rawProperties = Object.entries(block?.[id]?.value?.properties || []) // ... const Block = block?.[id].value
After:
const rawProperties = Object.entries((block?.[id]?.value as any)?.value?.properties || []) // <--- 수정됨 // ... const Block = (block?.[id].value as any)?.value // <--- 수정됨

3. src/routes/Detail/components/TableOfContents.tsx

나는 기존 기능에 커스텀하여 TOC를 생성하는 컴포넌트도 활용하는데, 이 부분도 깨진 것 같아 다음과 같이 수정했다.
Before:
const TableOfContents: React.FC<Props> = ({ recordMap, pageId }) => { const [activeId, setActiveId] = useState<string | null>(null) const block = recordMap.block[pageId]?.value
After:
const TableOfContents: React.FC<Props> = ({ recordMap, pageId }) => { const [activeId, setActiveId] = useState<string | null>(null) const block = (recordMap.block[pageId]?.value as any)?.value // <--- 수정됨

마무리

위의 코드 변경 사항을 모두 적용한 후, 로컬 환경에서 프로젝트를 다시 실행하여 블로그가 정상적으로 로드되는 것을 확인할 수 있었다.
물론 Notion API를 공짜로 사용하고 있었지만... 이런 식으로 예고 없이 API 변경점이 발생한 것을 놓쳐서, 어제는 해결 못 하는 줄 알고 멘붕에 빠졌었다. ㅠ 그래도 단순 디버깅으로 빠르게 원인을 찾아 해결 완료!
Related Posts
🔎 Practice
Google Antigravity 시작하기 및 실제 프로젝트 구현해보기

Google Antigravity 시작하기 및 실제 프로젝트 구현해보기

Feb 28, 2026

구글 안티그래비티를 실제 프로젝트에 적용하며 얻은 기술적 통찰을 정리한다. 단순한 코드 추천을 넘어 스스로 계획을 수립하고 실행하는 '에이전트'로서의 특징과, 실제 배포 과정에서의 생산성 및 쿼터 관리 효율성을 분석한다. 개발자의 역할이 단순 코더에서 전체 프로세스를 관리하는 디렉터로 변화하는 지점을 가식 없이 기술한다. This post provides a technical review of Google Antigravity based on real-world project application. It explores its capabilities as an autonomous "Agent" that goes beyond code suggestions to planning and execution. The review analyzes productivity gains and the realities of quota management, highlighting the industry's shift where developers evolve from manual coders into strategic directors of AI agents.

AI & Tools
🔎 Practice
[Review] AWS Certified Solutions Architect - Associate 합격 후기
Series: 자격증

[Review] AWS Certified Solutions Architect - Associate 합격 후기

Feb 2, 2026

2년 넘게 AWS 실무를 경험한 후, 시스템 아키텍트로 나아가기 위해 도전한 AWS Solutions Architect - Associate (SAA-C03) 단기 합격 후기입니다. 퇴근 후 2시간씩 투자한 밀도 있는 학습 루틴, 덤프(기출) 활용법, 오역 대처법, 그리고 시험장 메모장 활용 팁까지 실전에 꼭 필요한 전략을 확인해 보세요. How I passed the AWS SAA-C03 in just 2 weeks! Read my real-world study strategy, including focused dump analysis, active note-taking on Notion, and practical exam room tips (like checking English originals for translation errors) to boost your score.

AWS
Certificate
Cloud
Solution Architect
🔎 Practice
노션(Notion)을 서비스 DB로 활용한 토이 프로젝트 후기

노션(Notion)을 서비스 DB로 활용한 토이 프로젝트 후기

Jan 3, 2026

토이 프로젝트에서 Notion API를 활용하며 느낀 장단점과, 초당 3회 Rate Limit을 극복하기 위한 Next.js ISR 및 캐싱 전략을 공유합니다.

NotionAPI
Nextjs
🔎 Practice

Ollama를 통한 LLM 모델 벤치마킹 후기

Dec 6, 2025

가벼워서 (프로급) 로컬에서 충분히 잘 동작하고, 결과물 품질도 허용할 수 있을 만큼 좋은 LLM 모델을 찾기 위해 Ollama에 있는 여러 모델을 벤치마킹해봤다. 여기서는 그 과정과 결과를 공유하고, 직접 따라 해볼 수 있는 방법도 정리했다.

Model Benchmarking
Ollama