Giter VIP home page Giter VIP logo

2skydev / notion-next.js-blog-starter-kit Goto Github PK

View Code? Open in Web Editor NEW
88.0 2.0 52.0 3.92 MB

Notion + Next.js Blog Starter Kit - Next.js + Notion ISR static page blog starter kit

Home Page: https://blog.2skydev.com

Shell 0.05% TypeScript 81.12% CSS 13.74% JavaScript 0.17% SCSS 4.90% HTML 0.01%
darkmode lqip nextjs notion typescript blog comments isr starter-kit static-page vercel og-image boilerplate template

notion-next.js-blog-starter-kit's Introduction

github-repo-card-2skydev-blog

Notion + Next.js blog starter kit

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

라이트λͺ¨λ“œ

image

image

닀크λͺ¨λ“œ

image

image


πŸ€” Next.js + Notion μ–΄λ–»κ²Œ λ§Œλ“€μ—ˆμ„κΉŒμš”?

λ…Έμ…˜μ—μ„œ 글을 μž‘μ„±ν•˜λ©΄ next.js의 ISR λ°©μ‹μœΌλ‘œ 정적 νŽ˜μ΄μ§€κ°€ μžλ™μœΌλ‘œ μƒμ„±λ©λ‹ˆλ‹€.

μ‚¬μš©ν•œ μ˜€ν”ˆμ†ŒμŠ€

transitive-bullshit/nextjs-notion-starter-kitλ₯Ό 기반으둜 μ»€μŠ€ν…€ν•΄μ„œ μ›ν•˜λŠ”λ°λ‘œ κΎΈλ―Έκ³  μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
기본적으둜 μ§€μ›ν•˜λŠ” κΈ°λŠ₯이 λ§Žμ•˜μ§€λ§Œ μ•„μ‰¬μš΄ 뢀뢄이 λ§Žμ•„ 직접 μ»€μŠ€ν…€μ„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

GitHub - transitive-bullshit/nextjs-notion-starter-kit

전지적 λ…Έμ…˜ μ‹œμ 

λ…Έμ…˜μ˜ λ‚΄μš©μ„ 기반으둜 λΈ”λ‘œκ·Έκ°€ μƒμ„±λ˜λŠ” λ°©μ‹μ΄λ‹ˆ μ‹€μ œλ‘œλŠ” λ…Έμ…˜μ΄ μ–΄λ–»κ²Œ κ΅¬μ„±λ˜μ–΄μžˆλŠ”μ§€ κΆκΈˆν•˜μ‹ κ°€μš”?
μ•„λž˜ 링크λ₯Ό 톡해 이 λΈ”λ‘œκ·Έμ˜ λ…Έμ…˜ ꡬ성을 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€!

ν˜„μž¬ μš΄μ˜μ€‘μΈ λΈ”λ‘œκ·Έ λ…Έμ…˜ νŽ˜μ΄μ§€ (ν…œν”Œλ¦Ώ 볡제 ν—ˆμš© X)

2skydev blog λ…Έμ…˜ 링크


πŸ”Ž μžμ„Έν•œ λ™μž‘ 방식을 μ•Œκ³  μ‹Άμ–΄μš”

기본적인 λ™μž‘μ€ 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κ°€ 되며 λ‘œλ”© 효과 사라짐 및 μƒˆλ‘œμš΄ 정적 νŽ˜μ΄μ§€ ν‘œμ‹œ

배포(λΉŒλ“œ) ν›„ λ…Έμ…˜μ—μ„œ νŽ˜μ΄μ§€λ₯Ό μˆ˜μ •ν•˜λ©΄ μ–΄λ–»κ²Œ λ˜λ‚˜μš”?

  1. μˆ˜μ •λœ νŽ˜μ΄μ§€ μ ‘μ†μ‹œ getStaticProps ν•¨μˆ˜ λ°˜ν™˜κ°’μΈ revalidate: 10 에 μ˜ν•΄ λ§ˆμ§€λ§‰μœΌλ‘œ μ ‘μ†ν•œ μœ μ € κΈ°μ€€μœΌλ‘œ 10μ΄ˆκ°€ 지났닀면 getStaticProps ν•¨μˆ˜ λ°±κ·ΈλΌμš΄λ“œλ‘œ μ‹€ν–‰ (μ ‘μ†ν•œ μœ μ €λŠ” 이전 λ²„μ „μ˜ νŽ˜μ΄μ§€λ₯Ό 보게됨)
  2. getStaticProps ν•¨μˆ˜μ—μ„œ λ…Έμ…˜ 루트 νŽ˜μ΄μ§€ idλ₯Ό κΈ°μ€€μœΌλ‘œ λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό κ°€μ Έμ˜΄
  3. 2번 μž‘λ™μœΌλ‘œ λ…Έμ…˜ μ‚¬μ΄νŠΈλ§΅ 객채가 μƒμ„±λ˜κ³  μ ‘μ†ν•œ μ£Όμ†Œκ°€ μ‚¬μ΄νŠΈλ§΅μ— μžˆλŠ”μ§€ 확인 (μ—†μœΌλ©΄ 404 처리)
  4. μ‚¬μ΄νŠΈλ§΅μ— μžˆλ‹€λ©΄ ν•΄λ‹Ή μ£Όμ†Œμ™€ μΌμΉ˜ν•˜λŠ” λ…Έμ…˜ νŽ˜μ΄μ§€ idλ₯Ό κΈ°μ€€μœΌλ‘œ νŽ˜μ΄μ§€ 정보λ₯Ό 뢈러옴 (μ΅œμ‹  버전 정보)
  5. νŽ˜μ΄μ§€ 정보가 λΆˆλŸ¬μ™€μ‘Œλ‹€λ©΄ 정적 νŽ˜μ΄μ§€κ°€ μƒμ„±λ˜λ©° 이미 μ ‘μ†ν•œ μœ μ €λŠ” 이전 λ²„μ „μ˜ νŽ˜μ΄μ§€κ°€ λ³΄μ—¬μ§€μ§€λ§Œ 이후 μ ‘μ†ν•œ μœ μ €(이미 μ ‘μ†ν•œ μœ μ €μ˜ μƒˆλ‘œκ³ μΉ¨ μ•‘μ…˜λ„ 포함)λŠ” μƒμ„±λœ μ΅œμ‹  λ²„μ „μ˜ 정적 νŽ˜μ΄μ§€κ°€ ν‘œμ‹œλ¨

πŸš€ 저도 이 ꡬ성을 μ‚¬μš©ν• λž˜μš”

레포 클둠 ν›„ Notion API ν‚€ λ°œκΈ‰κ³Ό site.config.ts 만 μˆ˜μ •ν•˜μ‹œλ©΄ λ°”λ‘œ μ΄μš©ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.
μ•„λž˜ 단계듀을 λ”°λΌμ™€μ£Όμ„Έμš” :)

1. μ»€μŠ€ν…€ν•œ λΈ”λ‘œκ·Έ ν…œν”Œλ¦Ώ λ°›κΈ°

Fork λ˜λŠ” Use this templateλ₯Ό μ‚¬μš©ν•˜μ—¬ 레포λ₯Ό λ°›μœΌμ‹  ν›„ μ•„λž˜ λͺ¨λ“  단계λ₯Ό μ§„ν–‰ν•˜μ‹œλ©΄ 문제 없이 μ‚¬μš©ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

GitHub - 2skydev/blog

2. 기본적인 μ‚¬μš©λ°©λ²•

μ»€μŠ€ν…€ν•œ λΈ”λ‘œκ·Έ ν…œν”Œλ¦Ώμ€ μ•„λž˜μ˜ μ˜€ν”ˆμ†ŒμŠ€ κΈ°λ°˜μ΄λ―€λ‘œ ν•΄λ‹Ή κΉƒν—ˆλΈŒ README.mdμ—μ„œ μ‚¬μš©λ°©λ²•μ„ ν™•μΈν•΄μ£Όμ„Έμš”.

GitHub - transitive-bullshit/nextjs-notion-starter-kit - setup

3. λ…Έμ…˜ λ°μ΄ν„°λ² μ΄μŠ€ 보기 ν˜•νƒœ μΌμΉ˜μ‹œν‚€κΈ°

κΈ€ λͺ©λ‘μ΄ λ””μžμΈμ— 맞게 λ‚˜μ˜€λ €λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 보기 ν˜•νƒœκ°€ 저와 같은 ν˜•νƒœ 및 속성 μˆœμ„œκ°€ λ§žμ•„μ•Όν•©λ‹ˆλ‹€.
λ˜λ„λ‘ μ•„λž˜ λ§ν¬μ—μ„œ λ³΄μ΄λŠ”κ²ƒκ³Ό 같이 ν˜•νƒœμ™€ μ†μ„±μ˜ μˆœμ„œκ°€ μΌμΉ˜ν•˜κ²Œ λ§Œλ“€μ–΄μ£Όμ„Έμš”.

Notion - blog template

❗️ λ…Έμ…˜μ˜ 볡제 κΈ°λŠ₯을 μ‚¬μš©μ‹œ μ΄μƒν•˜κ²Œ λΆˆλŸ¬μ™€μ§€λŠ” ν˜„μƒμ΄ μžˆμŠ΅λ‹ˆλ‹€.
λΈ”λ‘œκ·Έλ‘œ μ‚¬μš©ν•˜λŠ” λ…Έμ…˜ νŽ˜μ΄μ§€λŠ” 볡제된 νŽ˜μ΄μ§€κ°€ μ•„λ‹Œ 직접 νŽ˜μ΄μ§€λ₯Ό λ§Œλ“€μ–΄μ•Όν•©λ‹ˆλ‹€.

4. 기본으둜 κ΅¬μ„±λ˜μ–΄ μžˆλŠ” νŒŒμΌλ“€ ꡐ체 및 제거

λ‹€μš΄λ°›μœΌμ‹  μ½”λ“œλŠ” 이미 μ œκ°€ μ‚¬μš©μ€‘μΈ λΈ”λ‘œκ·Έ μ†ŒμŠ€μ΄λ―€λ‘œ ν•„μš”μ—†λŠ” 파일 및 ꡐ체해야 λ˜λŠ” 이미지 νŒŒμΌλ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. ν•­λͺ©μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  1. naver-site-verification 파일 제거: /public/naverXXXXXXXXXXX.html
  2. ν”„λ‘œν•„ 사진 λ³€κ²½: public/favicon-128x128.png, public/favicon-192x192.png, public/favicon.ico, public/favicon.png
  3. λ‘œλ”© 효과 λ³€κ²½: public/loading.gif, components/PageLoading.tsx
  4. site.config.ts λ³€κ²½: rootNotionPageId, name, domain, author, description, defaultPageIcon, navigationLinks, enableComment

5. Notion API ν‚€ λ°œκΈ‰ & ν™˜κ²½ λ³€μˆ˜ μ„€μ •

OG Image (social-image)와 λŒ“κΈ€ κΈ°λŠ₯은 Notion APIλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ•„λž˜ λ¬Έμ„œ 링크둜 이동해 ν‚€ λ°œκΈ‰μ„ μ§„ν–‰ν•΄μ£Όμ„Έμš”.

2skydev wiki - Notion API ν‚€ λ°œκΈ‰ & ν™˜κ²½ λ³€μˆ˜ μ„€μ •

6. λ¬Έμ„œ 읽기 [선택사항]

더 μžμ„Έν•œ λ¬Έμ„œλŠ” μ•„λž˜ 링크λ₯Ό ν™•μΈν•΄μ£Όμ„Έμš”.

2skydev/blog - Wiki

πŸ’‘ μœ„ 링크의 λ¬Έμ„œλŠ” μ‹œμž‘ν•˜κΈ° 와 주의점, 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 μž…λ‹ˆλ‹€

notion-next.js-blog-starter-kit's People

Contributors

2skydev avatar dependabot[bot] avatar jeonghyeon00 avatar jong-hui avatar shanefully-done avatar yoonjihong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

notion-next.js-blog-starter-kit's Issues

μ•ˆλ…•ν•˜μ„Έμš”! ꡬ글 μ• λ„λ¦¬ν‹±μŠ€ ν˜Ήμ€ κ²€μƒ‰μ²˜λ¦¬μ—λŒ€ν•΄ μ§ˆλ¬Έμ΄μžˆμŠ΅λ‹ˆλ‹€.

ν˜Ήμ‹œ ꡬ글 μ• λ„λ¦¬ν‹±μŠ€λ‚˜, κ΅¬κΈ€μ—μ„œ 검색이 λ˜κ²Œλ”ν•˜λŠ”κ±Έ μ‚¬μš©ν•  μˆ˜μžˆμ„κΉŒμš”?
@2skydev λ‹˜μ€ μ–΄λ–»κ²Œ ν•˜μ…§λ‚˜μš”?
μ•„λ‹ˆλ©΄ λ…Έμ…˜ 자체적인 μ• λ„λ¦¬ν‹±μŠ€(?)λ₯Ό μ‚¬μš©ν•˜μ‹œλŠ”κ±ΈκΉŒμš”??

NotionAPI κ΄€λ ¨ 였λ₯˜ μ§ˆλ¬Έλ“œλ¦½λ‹ˆλ‹€..

NotionAPI getSignedfileUrls error HTTPError: Response code 500 (Internal Server Error)
--
16:24:32.366 | at Request.<anonymous> (file:///vercel/path0/node_modules/got/dist/source/as-promise/index.js:86:42)
16:24:32.366 | at Object.onceWrapper (node:events:633:26)
16:24:32.366 | at Request.emit (node:events:530:35)
16:24:32.366 | at Request._onResponseBase (file:///vercel/path0/node_modules/got/dist/source/core/index.js:697:22)
16:24:32.366 | at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
16:24:32.366 | at async Request._onResponse (file:///vercel/path0/node_modules/got/dist/source/core/index.js:736:13) {
16:24:32.366 | input: undefined,
16:24:32.366 | code: 'ERR_NON_2XX_3XX_RESPONSE',
16:24:32.366 | timings: {
16:24:32.366 | start: 1717313072253,
16:24:32.366 | socket: 1717313072253,
16:24:32.366 | lookup: 1717313072253,
16:24:32.366 | connect: 1717313072253,
16:24:32.367 | secureConnect: 1717313072253,
16:24:32.367 | upload: 1717313072254,
16:24:32.367 | response: 1717313072360,
16:24:32.367 | end: 1717313072361,
16:24:32.367 | error: undefined,
16:24:32.367 | abort: undefined,
16:24:32.367 | phases: {
16:24:32.367 | wait: 0,
16:24:32.367 | dns: 0,
16:24:32.367 | tcp: 0,
16:24:32.367 | tls: 0,
16:24:32.367 | request: 1,
16:24:32.367 | firstByte: 106,
16:24:32.367 | download: 1,
16:24:32.367 | total: 108
16:24:32.367 | }
16:24:32.367 | },
16:24:32.367 | options: {
16:24:32.367 | request: undefined,
16:24:32.367 | agent: { http: undefined, https: undefined, http2: undefined },
16:24:32.367 | h2session: undefined,
16:24:32.367 | decompress: true,
16:24:32.367 | timeout: {
16:24:32.367 | connect: undefined,
16:24:32.367 | lookup: undefined,
16:24:32.367 | read: undefined,
16:24:32.367 | request: undefined,
16:24:32.367 | response: undefined,
16:24:32.367 | secureConnect: undefined,
16:24:32.367 | send: undefined,
16:24:32.367 | socket: undefined
16:24:32.367 | },
16:24:32.367 | prefixUrl: '',
16:24:32.368 | body: '{"urls":[{"permissionRecord":{"table":"block","id":"122a0ba0-7797-45ba-9577-4d051564708c"},"url":"/images/page-cover/rijksmuseum_jan_lievens_1627.jpg"}]}',
16:24:32.368 | form: undefined,
16:24:32.368 | json: undefined,
16:24:32.368 | cookieJar: undefined,
16:24:32.368 | ignoreInvalidCookies: false,
16:24:32.368 | searchParams: undefined,
16:24:32.368 | dnsLookup: undefined,
16:24:32.368 | dnsCache: undefined,
16:24:32.368 | context: {},
16:24:32.368 | hooks: {
16:24:32.368 | init: [],
16:24:32.368 | beforeRequest: [],
16:24:32.368 | beforeError: [],
16:24:32.368 | beforeRedirect: [],
16:24:32.368 | beforeRetry: [],
16:24:32.368 | afterResponse: []
16:24:32.368 | },
16:24:32.368 | followRedirect: true,
16:24:32.368 | maxRedirects: 10,
16:24:32.368 | cache: undefined,
16:24:32.368 | throwHttpErrors: true,
16:24:32.368 | username: '',
16:24:32.368 | password: '',
16:24:32.368 | http2: false,
16:24:32.368 | allowGetBody: false,
16:24:32.368 | headers: {
16:24:32.368 | 'user-agent': 'got (https://github.com/sindresorhus/got)',
16:24:32.369 | 'content-type': 'application/json',
16:24:32.369 | accept: 'application/json',
16:24:32.369 | 'content-length': '153',
16:24:32.369 | 'accept-encoding': 'gzip, deflate, br'
16:24:32.369 | },
16:24:32.369 | methodRewriting: false,
16:24:32.369 | dnsLookupIpVersion: undefined,
16:24:32.369 | parseJson: [Function: parse],
16:24:32.369 | stringifyJson: [Function: stringify],
16:24:32.369 | retry: {
16:24:32.369 | limit: 2,
16:24:32.369 | methods: [ 'POST' ],
16:24:32.369 | statusCodes: [
16:24:32.369 | 408, 413, 429, 500,
16:24:32.369 | 502, 503, 504, 521,
16:24:32.369 | 522, 524
16:24:32.369 | ],
16:24:32.369 | errorCodes: [
16:24:32.369 | 'ETIMEDOUT',
16:24:32.369 | 'ECONNRESET',
16:24:32.369 | 'EADDRINUSE',
16:24:32.369 | 'ECONNREFUSED',
16:24:32.369 | 'EPIPE',
16:24:32.369 | 'ENOTFOUND',
16:24:32.369 | 'ENETUNREACH',
16:24:32.370 | 'EAI_AGAIN'
16:24:32.370 | ],
16:24:32.370 | maxRetryAfter: undefined,
16:24:32.370 | calculateDelay: [Function: calculateDelay],
16:24:32.370 | backoffLimit: Infinity,
16:24:32.370 | noise: 100
16:24:32.370 | },
16:24:32.370 | localAddress: undefined,
16:24:32.370 | method: 'POST',
16:24:32.370 | createConnection: undefined,
16:24:32.371 | cacheOptions: {
16:24:32.371 | shared: undefined,
16:24:32.371 | cacheHeuristic: undefined,
16:24:32.371 | immutableMinTimeToLive: undefined,
16:24:32.371 | ignoreCargoCult: undefined
16:24:32.371 | },
16:24:32.371 | https: {
16:24:32.371 | alpnProtocols: undefined,
16:24:32.371 | rejectUnauthorized: undefined,
16:24:32.371 | checkServerIdentity: undefined,
16:24:32.371 | certificateAuthority: undefined,
16:24:32.371 | key: undefined,
16:24:32.371 | certificate: undefined,
16:24:32.371 | passphrase: undefined,
16:24:32.371 | pfx: undefined,
16:24:32.371 | ciphers: undefined,
16:24:32.371 | honorCipherOrder: undefined,
16:24:32.371 | minVersion: undefined,
16:24:32.371 | maxVersion: undefined,
16:24:32.371 | signatureAlgorithms: undefined,
16:24:32.371 | tlsSessionLifetime: undefined,
16:24:32.371 | dhparam: undefined,
16:24:32.371 | ecdhCurve: undefined,
16:24:32.372 | certificateRevocationLists: undefined
16:24:32.372 | },
16:24:32.372 | encoding: undefined,
16:24:32.372 | resolveBodyOnly: false,
16:24:32.372 | isStream: false,
16:24:32.372 | responseType: 'text',
16:24:32.372 | url: URL {
16:24:32.372 | href: 'https://www.notion.so/api/v3/getSignedFileUrls',
16:24:32.372 | origin: 'https://www.notion.so',
16:24:32.372 | protocol: 'https:',
16:24:32.372 | username: '',
16:24:32.372 | password: '',
16:24:32.372 | host: 'www.notion.so',
16:24:32.372 | hostname: 'www.notion.so',
16:24:32.372 | port: '',
16:24:32.372 | pathname: '/api/v3/getSignedFileUrls',
16:24:32.372 | search: '',
16:24:32.372 | searchParams: URLSearchParams {},
16:24:32.372 | hash: ''
16:24:32.372 | },
16:24:32.372 | pagination: {
16:24:32.372 | transform: [Function: transform],
16:24:32.373 | paginate: [Function: paginate],
16:24:32.373 | filter: [Function: filter],
16:24:32.373 | shouldContinue: [Function: shouldContinue],
16:24:32.373 | countLimit: Infinity,
16:24:32.373 | backoff: 0,
16:24:32.373 | requestLimit: 10000,
16:24:32.373 | stackAllItems: false
16:24:32.373 | },
16:24:32.373 | setHost: true,
16:24:32.373 | maxHeaderSize: undefined
16:24:32.373 | }
16:24:32.373 | }

vercel에 배포할 μ‹œ 이런 였λ₯˜κ°€ μ—„μ²­ 많이 λ‚˜λŠ”λ° μ–΄λ–»κ²Œ ν•΄κ²°ν•˜λŠ”μ§€ μ•Œ 수 μžˆμ„κΉŒμš”..?

λ„€λΉ„κ²Œμ΄μ…˜ 링크둜 DB 의 μ•„μ΄ν…œ νŽ˜μ΄μ§€λ₯Ό λ„£μœΌλ©΄ λΉŒλ“œμ‹œ νŽ˜μ΄μ§€ 생성이 μ•ˆλ˜λŠ” ν˜„μƒ

λΆ„λ₯˜ κΈ°λŠ₯을 λ„£μœΌλ €κ³  총 λΆ„λ₯˜ νŽ˜μ΄μ§€λ₯Ό λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λ§Œλ“€κ³ , λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν•­λͺ©μ„ 각각 naviationLink 둜 넣을 경우 λΉŒλ“œμ‹œ νŽ˜μ΄μ§€κ°€ μƒμ„±λ˜μ§€ μ•ŠλŠ” ν˜„μƒμ΄ μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ npm run dev 둜 κ°œλ°œλ²„μ „μ„ μ‹€ν–‰μ—λŠ” νŽ˜μ΄μ§€κ°€ 잘 μƒμ„±λ˜μ–΄μ„œ λ‚˜μ˜΅λ‹ˆλ‹€.

ν˜„μž¬λŠ” νŽ˜μ΄μ§€ ν•˜μœ„μ— 각각 νŽ˜μ΄μ§€λ₯Ό λ§Œλ“œλ‹ˆ μ •μƒμ μœΌλ‘œ 좜λ ₯이 λ©λ‹ˆλ‹€.

Error: An unexpected error occurred!

μ•„λž˜μ˜ μ—λŸ¬λŠ” μ™œ μΌκΉŒμš”?
λ‘œμ»¬μ—μ„œλŠ” μ œλŒ€λ‘œ λ™μž‘ν•˜κ³  μ„œλ²„μ— μ˜¬λ¦¬κ³ λŠ” μ•ˆλ˜λ„€μš”.
참고둜 μ„œλ²„λŠ” chemicloudλΌλŠ” νšŒμ‚¬μ˜ cPanelμ΄λΌλŠ” κ²λ‹ˆλ‹€.
μŠ€ν¬λ¦°μƒ· 2024-05-13 204804

[asoso.secondlife.lol (20)] [secondl1@rs3-sgp asoso.secondlife.lol]$ npm run deploy

[email protected] deploy
vercel deploy

Vercel CLI 34.1.11
Error: An unexpected error occurred!
RangeError: WebAssembly.instantiate(): Out of memory: Cannot allocate Wasm memory for new instance
at lazyllhttp (eval at requireWithFakeGlobalScope (/home/secondl1/nodevenv/asoso.secondlife.lol/20/lib/lib/node_modules/vercel/dist/index.js:108386:11), :9988:32)

No existing credentials found. Please log in:
? Log in to Vercel (Use arrow keys)
❯ Continue with GitHub
Continue with GitLab
Continue with Bitbucket
Continue with Email
Continue with SAML Single Sign-On
─────────────────────────────────
Cancel

μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ HTML이 μΌμΉ˜ν•˜μ§€ μ•ŠμŒ

image

λΈŒλΌμš°μ € μ½˜μ†”μ—μ„œ 닀크λͺ¨λ“œ classname이 μΌμΉ˜ν•˜μ§€ μ•ŠμŒμœΌλ‘œ μΈν•œ 였λ₯˜
μ•„λ§ˆλ„ _document.tsxμ—μ„œ <script dangerouslySetInnerHTML /> λ•Œλ¬Έμ— 생긴 였λ₯˜λ„ νŒλ‹¨λ¨
μœ„ μ—λŸ¬λŠ” λΉŒλ“œ ν›„ 확인이 κ°€λŠ₯함

ꡬ글 μ„œμΉ˜μ½˜μ†”μ— 등둝 μ–΄λ–»κ²Œν•˜μ…¨μ„κΉŒμš”?

μ•ˆλ…•ν•˜μ„Έμš” λΈ”λ‘œκ·Έ ν…Œλ§ˆ 잘 μ΄μš©ν•˜κ³ μžˆμŠ΅λ‹ˆλ‹€!

μ €λ²ˆμ—λ„ 같은 제λͺ©μ˜ 글을 μ˜¬λ ΈλŠ”λ° μ œκ°€ 잘λͺ» μ΄ν•΄ν•˜κ³  글을 μ˜¬λ¦°κ²ƒ κ°™μŠ΅λ‹ˆλ‹€.

μ €λ²ˆ κΈ€μ—μ„œλŠ” ꡬ글 μ• λ„λ“±λ‘λ°©λ²•μ˜ λ¬Έμ˜μ˜€μ—ˆλŠ”λ°..

이번 이슈 글은 κ΅¬κΈ€μ„œμΉ˜μ½˜μ†” 등둝 방법 λ¬Έμ˜μž…λ‹ˆλ‹€.

ꡬ글에 λΈ”λ‘œκ·Έμ΄λ¦„ κ²€μƒ‰ν•˜λ©΄ λœ¨κ²Œν•˜λŠ”κ±°λŠ” μ–΄λ–»κ²Œ μ„€μ •ν•˜μ…¨μ„κΉŒμš”?

sitemap.xml을 깃에 올렀 μ»€λ°‹ν•˜λ©΄ vercelμ—μ„œ μΆ©λŒμ—λŸ¬κ°€ λ‚˜μ„œ κ³¨μΉ˜μ•„ν”„λ„€μœ ,,

vercel 배포 ν›„ μ‹ κ·œ 컨텐츠가 μ—…λ°μ΄νŠΈ μ•ˆλ˜λŠ” 이슈

μ•ˆλ…•ν•˜μ„Έμš”. 이것저것 νˆ΄λ“€μ„ λ‘˜λŸ¬λ³΄λ‹€ μ—¬κΈ°κΉŒμ§€ μ™”λ„€μš”.
ν•œκ°€μ§€ κΆκΈˆν•œκ²Œ λ‘œμ»¬μ—μ„œ 돌리면 ISR이 잘 λŒμ•„κ°€λŠ”λ°,
vercel에 배포만 ν•˜λ©΄ 먹톡이 λ˜λŠ” μ΄μŠˆκ°€ μžˆμŠ΅λ‹ˆλ‹€.

이 λΆ€λΆ„ λ•Œλ¬Έμ— 골머리λ₯Ό 썩고 μžˆλ„€μš”;;
ν˜Ήμ‹œ 아이디어가 μžˆμœΌμ‹€κΉŒμš”?

κ°μ‚¬ν•©λ‹ˆλ‹€~

μŠ€ν¬λ‘€λ°” ν‘œμ‹œ

μ•ˆλ…•ν•˜μ„Έμš”, μ œκ³΅ν•΄μ£Όμ‹  ν…œν”Œλ¦Ώ μ‚¬μš©ν•΄μ„œ λ„ˆλ¬΄ 잘 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ»€μŠ€ν…€μ„ λ”± μž…λ§›μ— 맞게 ν•΄μ£Όμ…”μ„œ, κΈ°μ‘΄ μ˜€λ¦¬μ§€λ‚  ν”„λ‘œμ νŠΈλ³΄λ‹€ 배포해주신 ν”„λ‘œμ νŠΈλ‘œ λΈ”λ‘œκ·Έλ₯Ό λ°°ν¬ν•˜κ²Œ λμŠ΅λ‹ˆλ‹€.

그런데 μŠ€ν¬λ‘€λ°”κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠλŠ” 아쉬움이 μžˆμ–΄μ„œ, μ—…λ°μ΄νŠΈ λΆ€νƒλ“œλ¦¬λ €κ³  μ΄λ ‡κ²Œ 이슈 λ‚¨κΉλ‹ˆλ‹€.

ꡬ글 μ„œμΉ˜μ½˜μ†” μ§ˆλ¬ΈμžˆμŠ΅λ‹ˆλ‹€.

nextjs-google-analytics` 라이브러리둜 μΈν•΄μ„œ vercel에 ν™˜κ²½λ³€μˆ˜λ‘œ κ΅¬κΈ€μ• λ„λ¦¬ν‹±μŠ€ id(?) 만 λ„£μ–΄μ£Όλ©΄ μžλ™μœΌλ‘œ
ꡬ글 μ„œμΉ˜μ½˜μ†”μ—λ„ 등둝이 λ˜λŠ”κ±ΈκΉŒμš”?

λ‘œμ»¬μ—μ„œ yarn devν•˜λ©΄ 400μ—λŸ¬ 및 vercel 배포 μ—λŸ¬

μ•ˆλ…•ν•˜μ„Έμš”

vercelμ—μ„œ 배포할 λ•Œ λ‹€μŒ 사진과 같이 μ—λŸ¬κ°€λ‚©λ‹ˆλ‹€.
μŠ€ν¬λ¦°μƒ· 2024-07-19 23-22-58

λ‘œμ»¬μ—μ„œ yarn dev둜 ν…ŒμŠ€νŠΈν•΄λ³΄λ©΄ 400μ—λŸ¬κ°€ λ‚˜μ˜€κ³ μžˆμŠ΅λ‹ˆλ‹€.

제 νŒŒμΌλ¬Έμ œμΈκ°€ μ‹Άμ–΄μ„œ @2skydev λ‹˜μ˜ κΉƒν—ˆλΈŒ λΈ”λ‘œκ·Έ μ£Όμ†Œλ₯Ό ν΄λ‘ ν•΄μ„œ ν…ŒμŠ€νŠΈν•΄λ΄€λŠ”λ° λ˜‘κ°™μ΄ 400μ—λŸ¬κ°€ λ°œμƒν•˜λŠ”κ²ƒ κ°™μŠ΅λ‹ˆλ‹€.

ν˜Ήμ‹œ μ €λ§Œ λ¬Έμ œκ°€μžˆλŠ”κ±΄μ§€ κΆκΈˆν•©λ‹ˆλ‹€.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.