← λͺ©λ‘μœΌλ‘œ
Lessons Learned from My Side Project

Next.js둜 μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 느꼈던 것듀을 κΈ€λ‘œ μ •λ¦¬ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

Why Next.js?

μ‹œμž₯의 νλ¦„μ—μ„œ React의 μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§μ„ μœ„ν•œ ν”„λ ˆμž„μ›Œν¬λ‘œ Next.jsκ°€ λŒ€μ„Έλ₯Ό 이루고, λ°±μ—”λ“œ APIκΉŒμ§€ μ•„μš°λ₯΄λŠ” λ°©ν–₯으둜 λ°œμ „ν•˜κ³  있기 λ•Œλ¬Έμ— 곡뢀해 λ³Ό κ°€μΉ˜κ°€ μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

What?

λ³΅μž‘ν•œ κΈ°λŠ₯λ³΄λ‹€λŠ” κ°„λ‹¨ν•˜λ©΄μ„œ λΉ λ₯΄κ²Œ λ§Œλ“€μ–΄ λ³Ό 수 μžˆλŠ” κΈ°λŠ₯으둜 λ§Œλ“€κ³ μž ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ Todo 앱을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
Todo 생성/μˆ˜μ •/μ‚­μ œ κΈ°λŠ₯을 κ°€μ§€λŠ” μ•„μ£Ό μ‹¬ν”Œν•œ μ•±μž…λ‹ˆλ‹€. (ν”„λ‘œμ νŠΈ 링크)

How?

λ‹€μŒ 기술 μŠ€νƒμ„ 기반으둜 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©ν•œ 기술 μŠ€νƒ:

  • ν”„λ‘ νŠΈμ—”λ“œ: Next.js
  • 인증: Google OAuth
  • λ°μ΄ν„°λ² μ΄μŠ€: AWS DynamoDB

μ£Όμš” νŠΉμ§•:

  • Next.js의 API λΌμš°ν„°λ₯Ό ν™œμš©ν•˜μ—¬ λ³„λ„μ˜ λ°±μ—”λ“œ μ„œλ²„ 없이 κ΅¬ν˜„
  • Vercel을 ν†΅ν•œ μ„œλ²„λ¦¬μŠ€ 배포둜 κ°„νŽΈν•œ 운영 ν™˜κ²½ ꡬ좕

Review

Next.jsλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ 개인적으둜 λŠλ‚€ κ²½ν—˜λ“€ μœ„μ£Όλ‘œ μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

  • μž₯점

- μ†μ‰¬μš΄ μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§: Next.js 없이 μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§μ„ κ΅¬ν˜„ν•˜λ €λ©΄ λ§Žμ€ μˆ˜κ³ κ°€ λ“­λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ 직접 ν•˜μ΄λ“œλ ˆμ΄μ…˜ μ΅œμ ν™”λ₯Ό μœ„ν•œ 방법을 κ°•κ΅¬ν•΄μ•Όν•˜κ³  HTML을 슀트리밍 λ°©μ‹μœΌλ‘œ μ „λ‹¬ν•˜λŠ” μ„œλ²„λ₯Ό ꡬ좕해야 ν•©λ‹ˆλ‹€.
- μž‘μ€ λ²ˆλ“€μ‚¬μ΄μ¦ˆ: μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ ν•œλ‹€λŠ” 것은 ν΄λΌμ΄μ–ΈνŠΈμ˜ js 크기가 μž‘μ•„μ§μ„ μ˜λ―Έν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ 웹뷰와 같이 λ²ˆλ“€ μ‚¬μ΄μ¦ˆμ— λ―Όκ°ν•œ κ³³μ—λŠ” 쒋은 선택이 될 수 μžˆμŠ΅λ‹ˆλ‹€.
- API λΌμš°νŒ… 지원: λ³„λ„μ˜ λ°±μ—”λ“œ μ„œλ²„λ₯Ό κ΅¬μ„±ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ”κ²ƒμ΄ λ„ˆλ¬΄ νŽΈν–ˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ λ ˆν¬μ§€ν† λ¦¬ μ•ˆμ—μ„œ λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈ μ½”λ“œλ₯Ό ν•œλ²ˆμ— λ‹€λ£° 수 μžˆκΈ°μ— 생산성이 κ·ΉλŒ€ν™” λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
- λ―Όκ°ν•œ 정보 가리기: μš”μ¦˜ 개발자 도ꡬλ₯Ό 톡해 λ§Žμ€ 데이터λ₯Ό μœ μ €κ°€ 디버깅 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°μ΄ν„°μ˜ λ³΄μ•ˆμ— λ―Όκ°ν•œ 앱일 경우 이런 정보듀을 μ„œλ²„ μ‚¬μ΄λ“œμ—μ„œ λ Œλ”λ§ν•˜μ—¬ 보여주면 λ―Όκ°ν•œ 정보λ₯Ό μœ μ €μ—κ²Œ λ…ΈμΆœν•˜μ§€ μ•Šμ„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
- ν›Œλ₯­ν•œ λ¬Έμ„œ: λ¬Έμ„œλŠ” μ•„μ£Ό μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€. 개발 κ°„μ˜ μ μ ˆν•œ κΈ°λŠ₯κ³Ό 이슈λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ 잘 μ •λ¦¬λœ λ¬Έμ„œκ°€ μžˆμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이런 λ©΄μ—μ„œ Next.jsλŠ” κΈ°μ‘΄ νŽ˜μ΄μ§€ λΌμš°ν„° λ°©μ‹μ˜ λ¬Έμ„œμ™€ λ§Žμ€ κΈ°λŠ₯듀에 λŒ€ν•΄μ„œ 잘 정리 λ˜μ–΄μžˆλŠ” λ¬Έμ„œλ₯Ό κ°–μΆ”κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • 단점

- μ½”λ“œμ˜ νŒŒνŽΈν™”: 기본적으둜 Next.js μ»΄ν¬λ„ŒνŠΈλŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ΄κΈ° λ•Œλ¬Έμ— useState와 같은 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ μ„ μ–Έν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” μœ μ €μ˜ μ΄λ²€νŠΈλ‚˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ‘΄μž¬ν•˜λŠ” μ˜μ—­μ€ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ λΆ„λ¦¬λ˜μ–΄μ•Ό 함을 μ˜λ―Έν•˜λ©°, 이에 따라 λ§Žμ€ μ½”λ“œκ°€ λΆˆν•„μš”ν•˜κ²Œ νŒŒνŽΈν™”λ˜λŠ” κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€.
- μƒνƒœκ΄€λ¦¬: μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ˜ 이점을 λˆ„λ¦¬λ €λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ₯Ό μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν”„λ¦¬νŒ¨μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλ ‡κ²Œ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ™€ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈ μƒνƒœκ°€ 곡유될 수 μžˆλŠ”λ°, μ΄λŸ¬ν•œ μ½”λ“œλ“€μ€ μ½”λ“œμ˜ λ³΅μž‘λ„λ₯Ό 높이고 μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ˜ 경계λ₯Ό κ°œλ°œμžκ°€ 항상 인지해야 ν•˜κΈ° λ•Œλ¬Έμ— 개발 κ²½ν—˜μ— μ’‹μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
- 기본은 μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ: λ³„λ„λ‘œ λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ 기본적으둜 μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. κΈ°λŠ₯이 λ§Žμ€ 앱을 κ°œλ°œν•  λ•ŒλŠ” ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ μ„ μ–Έν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ λ§Žμ•„, λ§Žμ€ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ μ„ μ–Έλ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ 되면 Next.jsλ₯Ό μ‚¬μš©ν•˜λŠ” 이점이 점차 쀄어듀 수 μžˆμŠ΅λ‹ˆλ‹€.
- μž¦μ€ μ—…λ°μ΄νŠΈ: λŒ€λΆ€λΆ„μ˜ ν”„λ ˆμž„μ›Œν¬λŠ” 버전 μ—…λ°μ΄νŠΈ μ‹œ λ§Žμ€ λ³€κ²½ 사항이 λ°œμƒν•©λ‹ˆλ‹€. Next.js도 μ˜ˆμ™ΈλŠ” μ•„λ‹ˆλ©°, μ‹€μ œλ‘œ Next.js 13+ 버전과 이전 버전 κ°„μ˜ 차이가 ν½λ‹ˆλ‹€. 버전에 따라 κΈ°μ‘΄ μ½”λ“œκ°€ λ™μž‘ν•˜μ§€ μ•Šμ„ 수 μžˆμ–΄ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.


μž‘μ€ λ²ˆλ“€μ‚¬μ΄μ¦ˆ/높은 데이터 λ³΄μ•ˆμ„ μΆ”κ΅¬ν•˜λ©° 높은 정적 νŽ˜μ΄μ§€μ˜ λΉ„μœ¨μ„ κ°€μ§„
앱이라면 Next.jsλ₯Ό μ‚¬μš©ν•˜κΈ°μ— μ ν•©ν•˜λ‹€κ³  λŠκΌˆμŠ΅λ‹ˆλ‹€. κ·Έ μ΄μ™Έμ˜ μ˜μ—­μ—μ„œλŠ”
μ˜€λ²„μŠ€νŽ™μ΄ 될거라 μƒκ°λ˜μ—ˆμœΌλ©° Reactλ§ŒμœΌλ‘œλ„ μΆ©λΆ„νžˆ 쒋은 앱을 λ§Œλ“€ 수 μžˆλ‹€κ³ 
μƒκ°ν•©λ‹ˆλ‹€.