728x90
자주 업데이트되는 정보 페이지(공지, FAQ, 문서)를 개발자가 매번 코드로 고치는 것은 비효율적입니다. 노션(Notion)에서 글을 작성하면 웹사이트에 실시간으로 반영되게 하면, 비개발자도 노션만 수정해 콘텐츠를 관리할 수 있습니다. React에서 react-notion으로 이를 구현하는 방법을 정리합니다.
1. 노션 페이지 웹 공유 + API 확인
- 노션 페이지 우측 상단 공유 → 웹에서 공유를 켭니다.
- 생성된 URL의 마지막 부분(페이지 ID)을 복사합니다.
- 아래 주소에 그 ID를 붙여 JSON이 잘 나오는지 확인합니다.
https://notion-api.splitbee.io/v1/page/{공유주소의_마지막_페이지ID}
splitbee가 제공하는 이 공개 API가 노션의 비공식 데이터를 JSON으로 변환해 줍니다.
2. react-notion 설치
yarn add react-notion
# 또는
npm install react-notion
GitHub - splitbee/react-notion: A fast React renderer for Notion pages
A fast React renderer for Notion pages . Contribute to splitbee/react-notion development by creating an account on GitHub.
github.com
3. 코드 — 노션 페이지 렌더링
페이지 ID로 API를 호출해 받은 blockMap을 NotionRenderer에 넘기면, 노션 페이지가 그대로 렌더링됩니다.
import "react-notion/src/styles.css";
import "prismjs/themes/prism-tomorrow.css"; // 코드블록 하이라이트
import { NotionRenderer } from "react-notion";
import React, { useState, useEffect } from "react";
function App() {
const [response, setResponse] = useState({});
useEffect(() => {
const NOTION_PAGE_ID = "연동할 notion 페이지 ID";
fetch(`https://notion-api.splitbee.io/v1/page/${NOTION_PAGE_ID}`)
.then(res => res.json())
.then(resJson => setResponse(resJson));
}, []);
return (
);
}
export default App;
이제 노션에서 글을 수정하면 페이지 새로고침 시 바로 반영됩니다. 노션이 사실상 헤드리스 CMS가 되는 셈입니다.
유의점
- 비공식 API 의존 — splitbee API는 노션의 비공식 엔드포인트를 사용합니다. 노션이 내부 구조를 바꾸면 동작이 깨질 수 있으니, 미션 크리티컬한 서비스에는 공식 Notion API + 자체 캐싱을 권장합니다.
- 실시간성의 한계 — "실시간"이라 해도 fetch 시점에 가져오는 것이라, 캐싱을 두면 지연이 생깁니다. 반대로 매 요청마다 호출하면 느리므로 ISR(Next.js) 등으로 균형을 잡는 것이 좋습니다.
- 스타일 —
react-notion/src/styles.css를 꼭 임포트해야 노션과 유사한 모양이 나옵니다. 최신 대안으로는react-notion-x가 더 많은 블록 타입을 지원합니다.
react-notion으로 노션 페이지를 서비스에 임베드하기
회사 서비스 내에 단순 정보 제공용 문서 페이지이며 앞으로도 내용 업데이트가 자주 있을 것 같은 페이지가 급하게 필요한 상황이었다. 이런 페이지를 개발자가 직접 하나하나 코드로 구현하
velog.io
728x90
'푸닥거리' 카테고리의 다른 글
| 윈도우 11 작업 표시줄 아이콘 깨짐 증상 (0) | 2022.05.22 |
|---|---|
| axios promise async-await useEffect useReducer Hook react (0) | 2022.05.21 |
| 훈련교강사 보수교육 2022년도 2차 보수교육 (0) | 2022.05.11 |
| react project create error in aws (0) | 2022.05.10 |
| curl 로 graphql 호출하기 (0) | 2022.05.03 |
댓글