[NextJS] CSR vs SSR

✨ 강은비·2022λ…„ 6μ›” 12일
1

NextJS

λͺ©λ‘ 보기
3/10
post-thumbnail

πŸ“Œ Client Side Rendering

CSR은 react, vue λ“±μ˜ SPA(Single Page Application)μ—μ„œ μ“°μ΄λŠ” κΈ°λ²•μœΌλ‘œ, ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ 화면을 κ΅¬μ„±ν•˜κ³  λ Œλ”λ§μ„ μ§„ν–‰ν•œλ‹€.

초반 μ‚¬μš©μž κ²½ν—˜μ΄ 쒋지 μ•Šλ‹€. πŸ‘₯

  • ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ JS λ²ˆλ“€ νŒŒμΌμ„ λ‹€μš΄ λ°›κ³ , 데이터가 λ‹΄κΈ΄ html νŒŒμΌμ„ κ΅¬μ„±ν•˜μ—¬ λ Œλ”λ§ν•œλ‹€.
  • 그러면 JS λ²ˆλ“€ νŒŒμΌμ„ λ‹€ λ‹€μš΄λ°›κΈ° μ „κΉŒμ§€λŠ” 데이터가 μ—†λŠ” 빈 html 파일이 λ Œλ”λ§λ˜μ–΄ μ‚¬μš©μžλŠ” 빈 화면을 보게 λœλ‹€.
  • JS λ²ˆλ“€ νŒŒμΌμ„ λ‹€μš΄λ°›λŠ” μ‹œκ°„μ΄ 였래 걸릴수둝 μ‚¬μš©μž κ²½ν—˜μ΄ λ‚˜λΉ μ§„λ‹€.
  • ν•˜μ§€λ§Œ code splitting으둜 μ–΄λŠ 정도 해결이 κ°€λŠ₯ν•˜λ‹€.

κ²€μƒ‰μ—”μ§„μ΅œμ ν™” (SEO)에 μ·¨μ•½ν•˜λ‹€. πŸ”Ž

  • 검색엔진은 html νŒŒμΌμ„ λ°”νƒ•μœΌλ‘œ 이 μ‚¬μ΄νŠΈκ°€ 검색 결과에 μ•Œλ§žμ€ μ‚¬μ΄νŠΈμΈμ§€ νŒλ‹¨ν•˜μ—¬ 검색결과에 보여쀀닀.
  • ν•˜μ§€λ§Œ CSRλ₯Ό μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 초기 html νŒŒμΌμ—λŠ” 데이터가 μ—†λ‹€.
  • κ·Έλž˜μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•ŠλŠ” 일반 검색엔진은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 정보λ₯Ό μ œλŒ€λ‘œ μˆ˜μ§‘ν•  수 μ—†μ–΄ 검색결과에 잘 λ‚˜νƒ€λ‚˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

μ„œλ²„ λΆ€ν•˜λ₯Ό 쀄일 수 μžˆλ‹€. 🀯

  • ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λ Œλ”λ§μ„ μ§„ν–‰ν•˜κ³  μ„œλ²„λ‘œλΆ€ν„°λŠ” ν•„μš”ν•œ λ°μ΄ν„°λ§Œ κ°€μ Έμ˜€κ³  κ°±μ‹ ν•˜λ©΄ 되기 λ•Œλ¬Έμ— μ„œλ²„ λΆ€ν•˜λ₯Ό 쀄일 수 μžˆλ‹€.

πŸ“Œ Server Side Rendering

SSR은 μ„œλ²„ μΈ‘μ—μ„œ 데이터가 λ‹΄κΈ΄ html νŒŒμΌμ„ κ΅¬μ„±ν•˜κ³  λΈŒλΌμš°μ € 츑에 μ „λ‹¬ν•˜μ—¬ λ Œλ”λ§ν•˜λŠ” 방법이닀.

초반 μ‚¬μš©μž κ²½ν—˜μ΄ μ’‹λ‹€. πŸ‘₯

  • JS λ²ˆλ“€ 파일이 λ‹€ λ‹€μš΄λ°›κΈ° 전에도 html 상에 μ‚¬μš©μžκ°€ λ³Ό 수 μžˆλŠ” μ½˜ν…μΈ κ°€ 있기 λ•Œλ¬Έμ— μ‚¬μš©μž κ²½ν—˜μ΄ ν–₯μƒλœλ‹€.

κ²€μƒ‰μ—”μ§„μ΅œμ ν™” (SEO)에 μ’‹λ‹€. πŸ”Ž

  • μ„œλ²„ μΈ‘μ—μ„œ 데이터가 λ‹΄κΈ΄ html νŒŒμΌμ„ λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— 검색 엔진이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŽ˜μ΄μ§€ 정보λ₯Ό μ›ν• ν•˜κ²Œ μˆ˜μ§‘ν•  수 μžˆλ‹€.

μ„œλ²„ λΆ€ν•˜κ°€ μ‹¬ν•˜λ‹€. 🀯

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ νŽ˜μ΄μ§€λ₯Ό μ΄λ™ν•˜κ±°λ‚˜, 클릭으둜 μΈν•œ λ‹€λ₯Έ μš”μ²­μ΄ 생길 λ•Œλ§ˆλ‹€ μ„œλ²„ μΈ‘μ—μ„œ λ‹€μ‹œ html νŒŒμΌμ„ κ΅¬μ„±ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€.
  • ν™”λ©΄μ—μ„œ λ°”λ€Œμ§€ μ•Šμ•„λ„ λ˜λŠ” 뢀뢄도 λ¦¬λ Œλ”λ§λœλ‹€.

πŸ‘πŸ» NextJS의 μž₯점

Next.jsλŠ” Reactμ—μ„œ SSR을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” ν”„λ ˆμž„μ›Œν¬μ΄λ‹€.

SSR λ°©μ‹μœΌλ‘œ pre-renderingν•œλ‹€.

  • μ‚¬μš©μž μš”μ²­ μ‹œ Server Sideμ—μ„œ html κ΅¬μ„±ν•˜μ—¬ λΈŒλΌμš°μ € 츑에 μ „λ‹¬ν•˜μ—¬ pre-rendering
  • 이후 JS 파일이 λ‘œλ“œλ˜μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ μš©λœλ‹€. (μ΄λ•Œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ μš©λ˜λŠ” 과정을 Hydration이라고 ν•˜κ³  Hydration을 거쳐 interactiveν•œ νŽ˜μ΄μ§€κ°€ μ™„μ„±λœλ‹€.)

πŸ‘‰ 초반 μ‚¬μš©μž κ²½ν—˜μ΄ ν–₯μƒλ˜κ³  SEO에 μ’‹λ‹€.

μ‚¬μš©μžκ°€ νŽ˜μ΄μ§€μ™€ μƒν˜Έμž‘μš©ν•˜λ©° λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œ 이동할 경우 μ΄λ™ν•˜λ €λŠ” νŽ˜μ΄μ§€λŠ” CSR λ°©μ‹μœΌλ‘œ λ Œλ”λ§ν•œλ‹€.

  • NextJSμ—μ„œλŠ” Link μ»΄ν¬λ„ŒνŠΈ ν˜Ήμ€ router.push() λ₯Ό 톡해 νŽ˜μ΄μ§€ 이동을 ν•˜λŠ”λ° 이 λ‘˜μ€ client side navigation을 μ œκ³΅ν•œλ‹€.
  • 즉, νŽ˜μ΄μ§€ 이동이 ν΄λΌμ–΄μ–ΈνŠΈ μΈ‘ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό 톡해 이루어진닀.
  • Client-Side Navigation

πŸ‘‰ μ„œλ²„μ˜ λΆ€ν•˜λ₯Ό 쀄일 수 μžˆλ‹€.

❣️ SSRκ³Ό CSRλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ λ‘˜μ˜ μž₯점을 살리고 단점은 λ³΄μ™„ν•œλ‹€.

NextJSμ—μ„œλŠ” Automatic Code Splitting이 이루어진닀.

  • importλ₯Ό λΆ„μ„ν•˜μ—¬ λ‘œλ”©λ˜λŠ” νŽ˜μ΄μ§€κ°€ κΌ­ ν•„μš”λ‘œ ν•˜λŠ” JS 파일만 λ‘œλ“œλœλ‹€.
  • JSλ₯Ό ν¬ν•¨ν•œ 화면이 빨리 κ΅¬μ„±λ˜μ–΄ μ‚¬μš©μž κ²½ν—˜μ΄ μ’‹λ‹€.
  • λ‹€λ§Œ 절반 이상 μ‚¬μš©λ˜λŠ” JS νŒŒμΌμ€ main bundle에 ν¬ν•¨λœλ‹€.

0개의 λŒ“κΈ€