This repository is a startup kit that allows you to create a blog using notion
and next.js
.
Please understand that the code and explanation are mainly written in Korean. π₯²
μλ μ¬μ§λ€μ μ΄μμ€μΈ μ λΈλ‘κ·Έμμ κ°μ Έμ¨ 리μμ€μ λλ€. 2skydev blog
λ Έμ μμ κΈμ μμ±νλ©΄ next.jsμ ISR λ°©μμΌλ‘ μ μ νμ΄μ§κ° μλμΌλ‘ μμ±λ©λλ€.
transitive-bullshit/nextjs-notion-starter-kit
λ₯Ό κΈ°λ°μΌλ‘ 컀μ€ν
ν΄μ μνλλ°λ‘ κΎΈλ―Έκ³ μΆκ°νμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ μ§μνλ κΈ°λ₯μ΄ λ§μμ§λ§ μμ¬μ΄ λΆλΆμ΄ λ§μ μ§μ 컀μ€ν
μ μ§ννμ΅λλ€.
GitHub - transitive-bullshit/nextjs-notion-starter-kit
λ
Έμ
μ λ΄μ©μ κΈ°λ°μΌλ‘ λΈλ‘κ·Έκ° μμ±λλ λ°©μμ΄λ μ€μ λ‘λ λ
Έμ
μ΄ μ΄λ»κ² ꡬμ±λμ΄μλμ§ κΆκΈνμ κ°μ?
μλ λ§ν¬λ₯Ό ν΅ν΄ μ΄ λΈλ‘κ·Έμ λ
Έμ
ꡬμ±μ νμΈνμ€ μ μμ΅λλ€!
νμ¬ μ΄μμ€μΈ λΈλ‘κ·Έ λ Έμ νμ΄μ§ (ν νλ¦Ώ 볡μ νμ© X)
κΈ°λ³Έμ μΈ λμμ next.jsμ ISR
λ°©μμΌλ‘ νμ΄μ§κ° μμ±λ©λλ€.
λ°°ν¬(λΉλ)νμλ λ Έμ μμ νμ΄μ§λ₯Ό μμ± λλ μμ ν΄λ μλμΌλ‘ λ°μλ©λλ€.
λ Έμ μ μ 보λ₯Ό κ°μ Έμ€λ APIλ 곡μ APIκ° μλ μ€μ λ Έμ νμ΄μ§μμ μμ²νλ APIλ₯Ό κ°μ Έμμ μ¬μ©νμ΅λλ€.
μ λ¬Όλ‘ λκΈ κΈ°λ₯μ Notion 곡μ APIλ₯Ό μ¬μ©νκ² λ§μ΅λλ€ :)
- μλ‘ λ§λ νμ΄μ§ μ μμ μ μ νμ΄μ§κ° μμ±λ κ²μ΄ μμΌλ―λ‘
router.isFallback
μ΄ νμ±ν λλ©° λ‘λ© ν¨κ³Όκ° νμ getStaticProps
ν¨μμμ λ Έμ λ£¨νΈ νμ΄μ§ idλ₯Ό κΈ°μ€μΌλ‘ λͺ¨λ νμ΄μ§λ₯Ό κ°μ Έμ΄- 2λ² μλμΌλ‘ λ Έμ μ¬μ΄νΈλ§΅ κ°μ±κ° μμ±λκ³ μ μν μ£Όμκ° μ¬μ΄νΈλ§΅μ μλμ§ νμΈ (μμΌλ©΄ 404 μ²λ¦¬)
- μ¬μ΄νΈλ§΅μ μλ€λ©΄ ν΄λΉ μ£Όμμ μΌμΉνλ λ Έμ νμ΄μ§ idλ₯Ό κΈ°μ€μΌλ‘ νμ΄μ§ μ 보λ₯Ό λΆλ¬μ΄
- νμ΄μ§ μ λ³΄κ° λΆλ¬μμ‘λ€λ©΄
router.isFallback
μ΄ falseκ° λλ©° λ‘λ© ν¨κ³Ό μ¬λΌμ§ λ° μλ‘μ΄ μ μ νμ΄μ§ νμ
- μμ λ νμ΄μ§ μ μμ
getStaticProps
ν¨μ λ°νκ°μΈrevalidate: 10
μ μν΄ λ§μ§λ§μΌλ‘ μ μν μ μ κΈ°μ€μΌλ‘ 10μ΄κ° μ§λ¬λ€λ©΄getStaticProps
ν¨μ λ°±κ·ΈλΌμ΄λλ‘ μ€ν (μ μν μ μ λ μ΄μ λ²μ μ νμ΄μ§λ₯Ό 보κ²λ¨) getStaticProps
ν¨μμμ λ Έμ λ£¨νΈ νμ΄μ§ idλ₯Ό κΈ°μ€μΌλ‘ λͺ¨λ νμ΄μ§λ₯Ό κ°μ Έμ΄- 2λ² μλμΌλ‘ λ Έμ μ¬μ΄νΈλ§΅ κ°μ±κ° μμ±λκ³ μ μν μ£Όμκ° μ¬μ΄νΈλ§΅μ μλμ§ νμΈ (μμΌλ©΄ 404 μ²λ¦¬)
- μ¬μ΄νΈλ§΅μ μλ€λ©΄ ν΄λΉ μ£Όμμ μΌμΉνλ λ Έμ νμ΄μ§ idλ₯Ό κΈ°μ€μΌλ‘ νμ΄μ§ μ 보λ₯Ό λΆλ¬μ΄ (μ΅μ λ²μ μ 보)
- νμ΄μ§ μ λ³΄κ° λΆλ¬μμ‘λ€λ©΄ μ μ νμ΄μ§κ° μμ±λλ©° μ΄λ―Έ μ μν μ μ λ μ΄μ λ²μ μ νμ΄μ§κ° 보μ¬μ§μ§λ§ μ΄ν μ μν μ μ (μ΄λ―Έ μ μν μ μ μ μλ‘κ³ μΉ¨ μ‘μ λ ν¬ν¨)λ μμ±λ μ΅μ λ²μ μ μ μ νμ΄μ§κ° νμλ¨
λ ν¬ ν΄λ‘ ν Notion API ν€ λ°κΈ
κ³Ό site.config.ts
λ§ μμ νμλ©΄ λ°λ‘ μ΄μ©νμ€ μ μμ΅λλ€.
μλ λ¨κ³λ€μ λ°λΌμμ£ΌμΈμ :)
Fork
λλ Use this template
λ₯Ό μ¬μ©νμ¬ λ ν¬λ₯Ό λ°μΌμ ν μλ λͺ¨λ λ¨κ³λ₯Ό μ§ννμλ©΄ λ¬Έμ μμ΄ μ¬μ©νμ€ μ μμ΅λλ€.
컀μ€ν ν λΈλ‘κ·Έ ν νλ¦Ώμ μλμ μ€νμμ€ κΈ°λ°μ΄λ―λ‘ ν΄λΉ κΉνλΈ README.mdμμ μ¬μ©λ°©λ²μ νμΈν΄μ£ΌμΈμ.
GitHub - transitive-bullshit/nextjs-notion-starter-kit - setup
κΈ λͺ©λ‘μ΄ λμμΈμ λ§κ² λμ€λ €λ©΄ λ°μ΄ν°λ² μ΄μ€μ 보기 ννκ° μ μ κ°μ νν λ° μμ± μμκ° λ§μμΌν©λλ€.
λλλ‘ μλ λ§ν¬μμ 보μ΄λκ²κ³Ό κ°μ΄ ννμ μμ±μ μμκ° μΌμΉνκ² λ§λ€μ΄μ£ΌμΈμ.
βοΈ λ Έμ μ
볡μ
κΈ°λ₯μ μ¬μ©μ μ΄μνκ² λΆλ¬μμ§λ νμμ΄ μμ΅λλ€.
λΈλ‘κ·Έλ‘ μ¬μ©νλ λ Έμ νμ΄μ§λ볡μ
λ νμ΄μ§κ° μλ μ§μ νμ΄μ§λ₯Ό λ§λ€μ΄μΌν©λλ€.
λ€μ΄λ°μΌμ μ½λλ μ΄λ―Έ μ κ° μ¬μ©μ€μΈ λΈλ‘κ·Έ μμ€μ΄λ―λ‘ νμμλ νμΌ λ° κ΅μ²΄ν΄μΌ λλ μ΄λ―Έμ§ νμΌλ€μ΄ μμ΅λλ€. νλͺ©μ μλμ κ°μ΅λλ€.
- naver-site-verification νμΌ μ κ±°:
/public/naverXXXXXXXXXXX.html
- νλ‘ν μ¬μ§ λ³κ²½:
public/favicon-128x128.png
,public/favicon-192x192.png
,public/favicon.ico
,public/favicon.png
- λ‘λ© ν¨κ³Ό λ³κ²½:
public/loading.gif
,components/PageLoading.tsx
- site.config.ts λ³κ²½:
rootNotionPageId
,name
,domain
,author
,description
,defaultPageIcon
,navigationLinks
,enableComment
OG Image (social-image)μ λκΈ κΈ°λ₯μ Notion APIλ₯Ό μ¬μ©ν©λλ€. μλ λ¬Έμ λ§ν¬λ‘ μ΄λν΄ ν€ λ°κΈμ μ§νν΄μ£ΌμΈμ.
2skydev wiki - Notion API ν€ λ°κΈ & νκ²½ λ³μ μ€μ
λ μμΈν λ¬Έμλ μλ λ§ν¬λ₯Ό νμΈν΄μ£ΌμΈμ.
π‘ μ λ§ν¬μ λ¬Έμλ μμνκΈ° μ μ£Όμμ , Draft & Published κΈ°λ₯ λ± μ¬λ¬κ°μ§λ₯Ό μ€λͺ ν©λλ€.
μ¬μ©νκΈ° μ κΌ νλ² μ½μ΄μ£ΌμΈμ.
yarn workspace
κΈ°λ₯μ μ¬μ©ν΄μ μΈμΈν λΆλΆκΉμ§ λͺ¨λ 컀μ€ν
μ΄ κ°λ₯νλλ‘ κ΅¬μ±νμ΅λλ€.
- λͺ¨λ μμ μ μν΄
yarn workspace
κ΅¬μ± - λ μ§ ν¬λ§·
- λ°μ΄ν°λ² μ΄μ€ μμ± (μ€νμΌ, μλ μνλ μμ± λ±)
- λ°μ΄ν°λ² μ΄μ€ νν°κ° μ μ©μ΄ μλλ λΆλΆ μμ
- μ°μΈ‘μ νμλλ λͺ©μ°¨ μ€νμΌ
- κΈ°κΈ°μ λ€ν¬λͺ¨λ λ³κ²½μ μλ λ°μ (λ²κ·Έκ° μμ΄μ μ§μ ꡬμ±νμ΅λλ€)
- μ£Όμμ νκ΅μ΄κ° λ€μ΄κ°μ§ μλ λΆλΆ μμ (SlugλΌκ³ νμ£ )
- λ€ν¬λͺ¨λ λΆλΆμ μΌλ‘ μ€νμΌ μ€λ₯κ° μλ λΆλΆ μμ
- λ Έμ μ λΈλλ€ μ€νμΌ μμ
- μ½μμ νΉμ μμ΄μ½μΌλ λ°°κ²½ μμ λ³κ²½ μ²λ¦¬ (
β οΈ , π§, π΄, π, π‘) - λκΈ κΈ°λ₯ μΆκ°
- GA κ΅¬μ± μΆκ°
- λ°μν μ²λ¦¬κ° λ―Έν‘ν λΆλΆ μμ
- a λ§ν¬ λ°©μ -> Next.js Link μ»΄ν¬λνΈ μ¬μ©
- λ‘λ© ν¨κ³Ό μΆκ°
- νμ΄μ§ μ΄λκ° μ λλ©μ΄μ
- μ΄μ κΈ°λ₯μΆκ° (draft, published)
- OG Image (social-image) μλλ°©μ 컀μ€ν
- μ¬λ¬ μ€λ₯λ€ μμ (μλ‘ μμ±λ νμ΄μ§ 404, μλ²μ ν΄λΌμ΄μΈνΈμ timezone μ°¨μ΄λ‘ hydration μλ¬, λ±λ±)
μλ νλͺ© λ§κ³ λ μΆκ°λ‘ 컀μ€ν μ΄ νμνλ€λ©΄ μνμλ νμΌμ μμ νκ±°λ μΆκ°ν΄μ μ§ννμλ©΄ λ©λλ€.
- νμ΄μ§ ν¬κΈ° λ° μμ λ³μλ€:
styles/custom/vars.scss
- λ
Έμ
κΈ°λ³Έ λΈλλ€:
styles/custom/notion-blocks.scss
site.config.ts
νμΌμ μΆκ° μ€μ μ΄ κ°λ₯νλλ‘ κ΅¬μ±ν΄ λμμ΅λλ€.
μΆκ° κ΅¬μ± μ 보λ μλ ν
μ΄λΈμ νμΈν΄μ£ΌμΈμ.
ν€ | κΈ°λ³Έκ° | μ€λͺ |
---|---|---|
dateformat | yyyy.MM.dd | λ μ§ ν¬λ§·μ μ€μ ν©λλ€. μ ν¨ν κ°μ date-fns ν¬λ§· λ¬Έμμ΄μ λλ€. |
defaultTheme | system | κΈ°λ³Έ ν
λ§λ₯Ό μ€μ ν©λλ€. μ ν¨ν κ°μ light , dark , system μ
λλ€ |
hiddenPostProperties | [] | κΈ μμΈ νμ΄μ§μμ μ¨κΉ μ²λ¦¬ν μμ± μ΄λ¦λ€μ λλ€. |
enableComment | false | κΈ μμΈ νμ΄μ§μμ λκΈ κΈ°λ₯μ νμ±ν μ¬λΆμ
λλ€. λ
Έμ
λκΈ κΈ°λ₯μ μ¬μ©νλ©° ν΄λΉ κΈ°λ₯μ μ¬μ© μ NOTION_API_KEY νκ²½ λ³μ μ€μ μ΄ νμ μ
λλ€. |
contentPositionTextAlign | left | κΈ μμΈ νμ΄μ§μμ μ°μΈ‘μ νμλλ λͺ©μ°¨μ κΈμ μ λ ¬μ μ€μ ν©λλ€. μ ν¨ν κ°μ left , right μ
λλ€ |