이 블로그는 어떤걸로 만들었을까요?

몇몇 분들은 눈치 채셨겠지만 노션을 활용해서 만들어진 블로그입니다. 노션에서 글을 작성하면 next.js의 ISR 방식으로 정적 페이지가 자동으로 생성됩니다.

사용한 오픈소스

transitive-bullshit/nextjs-notion-starter-kit를 기반으로 커스텀해서 원하는데로 꾸미고 추가했습니다. 기본적으로 지원하는 기능이 많았지만 아쉬운 부분이 많아 직접 커스텀을 진행했습니다.

GitHub - transitive-bullshit/nextjs-notion-starter-kit: Deploy your own Notion-powered website in minutes with Next.js and Vercel.

전지적 노션 시점

노션의 내용을 기반으로 블로그가 생성되는 방식이니 실제로는 노션이 어떻게 구성되어있는지 궁금하신가요? 아래 링크를 통해 이 블로그의 노션 구성을 확인하실 수 있습니다!

현재 운영중인 블로그 노션 페이지 (템플릿 복제 허용 X)

https://2skydev.notion.site/2skydev-blog-d1e89e9e42eb4ebf9486ae0374039efc

자세한 동작 방식을 알고 싶어요

기본적인 동작은 next.js의 ISR 방식으로 페이지가 생성됩니다. 배포(빌드)후에도 노션에서 페이지를 생성 또는 수정해도 자동으로 반영됩니다.

Notion API?

노션의 정보를 가져오는 API는 공식 API가 아닌 실제 노션 페이지에서 요청하는 API를 가져와서 사용했습니다. 아 물론 댓글 기능은 Notion 공식 API를 사용한게 맞습니다 :)

배포(빌드) 후 노션에서 새로 페이지를 만들면 어떻게 되나요?

  1. 새로 만든 페이지 접속시 정적 페이지가 생성된 것이 없으므로 router.isFallback이 활성화 되며 로딩 효과가 표시
  2. getStaticProps 함수에서 노션 루트 페이지 id를 기준으로 모든 페이지를 가져옴
  3. 2번 작동으로 노션 사이트맵 객채가 생성되고 접속한 주소가 사이트맵에 있는지 확인 (없으면 404 처리)
  4. 사이트맵에 있다면 해당 주소와 일치하는 노션 페이지 id를 기준으로 페이지 정보를 불러옴
  5. 페이지 정보가 불러와졌다면 router.isFallback 이 false가 되며 로딩 효과 사라짐 및 새로운 정적 페이지 표시