🧐 CSR, SSR, SSG, ISR κ°œλ… 정리 ( Next.js )

박상은·2022λ…„ 6μ›” 29일
0

Next.jsλ₯Ό 기반으둜 CSR, SSR, SSG, ISR에 λŒ€ν•œ κ°œλ…μ„ μ •λ¦¬ν•œ μž‘μ„±ν•œ ν¬μŠ€νŠΈμž…λ‹ˆλ‹€.

✨ CSR ( Client-Side-Rendering )

ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λ Œλ”λ§μž…λ‹ˆλ‹€. ( μ‚¬μš©μžκ°€ μ‚¬μš©ν•˜λŠ” λΈŒλΌμš°μ €μ—μ„œ λ Œλ”λ§μ„ ν•œλ‹€λŠ” 의미 )

1. CSR λ™μž‘ μˆœμ„œ

  1. λΈŒλΌμš°μ €μ—μ„œ μ„œλ²„μ—κ²Œ URL + Method에 λ§žλŠ” 파일/데이터λ₯Ό μš”μ²­ν•œλ‹€.
  2. <div id="root"></div>와 ν•„μš”ν•œ νŒŒμΌλ“€μ— λŒ€ν•œ μš”μ²­μ„ ν¬ν•¨ν•˜λŠ” HTML을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  3. HTML을 νŒŒμ‹±ν•˜λŠ” 도쀑에 ν•„μš”ν•œ JavaScriptνŒŒμΌμ„ μš”μ²­ν•˜κ³  νŒŒμ‹±ν•©λ‹ˆλ‹€. ( <script src="xx.js" /> )
  4. ν•΄λ‹Ή JavaScriptλ₯Ό νŒŒμ‹±ν•΄μ„œ <div id="root"></div>λ₯Ό μ±„μ›Œ λ„£μŠ΅λ‹ˆλ‹€. ( ReactDOM.render(_, document.querySelector("#root")) )

λ™μž‘ μˆœμ„œμ™€ ν•¨κ»˜ CSR을 μ‚΄νŽ΄λ³΄λ©΄ λΈŒλΌμš°μ €μ—μ„œ μ„œλ²„μ—κ²Œ μš”μ²­ν•˜λŠ” μˆœκ°„μ— μ›ΉνŽ˜μ΄μ§€μ— 정보가 μ±„μ›Œμ§€λ©° λ Œλ”λ§λ˜κ²Œ λ©λ‹ˆλ‹€.
이 말은 μ„œλ²„μ—κ²Œ μš”μ²­ν•˜κΈ° μ „μ—λŠ” HTML이 λΉ„μ–΄μžˆλŠ” μƒνƒœ 즉, <div id="root"></div> μƒνƒœμž…λ‹ˆλ‹€.
κ²‰μœΌλ‘œ 보면 이게 무슨 λ¬Έμ œμΈκ°€ 생각할 μˆ˜λ„ μžˆμ§€λ§Œ, SEOμΈ‘λ©΄μ—μ„œλŠ” μ‚¬μš©μžκ°€ μ›ΉνŽ˜μ΄μ§€μ— 듀어가기전에 ν¬λ‘€λ§ν•΄μ„œ ν•„μš”ν•œ 데이터λ₯Ό μ°Ύμ•„μ•Όν•˜λŠ”λ° ν•΄λ‹Ή μ‚¬μ΄νŠΈμ—λŠ” 빈 HTML만 λ“€μ–΄κ°€ μžˆμœΌλ‹ˆ κ°€μ Έμ˜¬ 정보가 μ—†λ‹€κ³  νŒλ‹¨ν•©λ‹ˆλ‹€. ( ꡬ글 검색엔진은 μ œμ™Έ )
λ”°λΌμ„œ 검색 엔진은 ν•΄λ‹Ή μ‚¬μ΄νŠΈλ₯Ό κ²€μƒ‰μ˜ μš°μ„ μˆœμœ„μ—μ„œ μ™„μ „νžˆ μ œμ™Έμ‹œμΌœλ²„λ¦¬κ²Œ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
λ˜ν•œ HTMLμš”μ²­κ³Ό 응닡, JavaScriptμš”μ²­κ³Ό 응닡, JavaScriptνŒŒμ‹± μ΄λΌλŠ” 과정이 μžˆμ–΄μ„œ μ•ž 두 개의 κ³Όμ • ( HTMLμš”μ²­κ³Ό 응닡, JavaScriptμš”μ²­κ³Ό 응닡 )μ—μ„œλŠ” 빈 화면이 보이게 되고, JavaScriptνŒŒμ‹±μ—μ„œλŠ” λŒ€λΆ€λΆ„ μŠ€ν”Όλ„ˆκ°€ 보이게 λ©λ‹ˆλ‹€.

2. CSR 정리

  1. SEOκ°€ μ•ˆλœλ‹€. ( 검색 엔진에 λ…ΈμΆœλ˜μ§€ μ•ŠλŠ”λ‹€. )
  2. JavaScriptνŒŒμ‹± 과정에 λ‹€λ₯Έ 처리λ₯Ό ν•΄μ€˜μ•Ό ν•œλ‹€. ( λ Œλ”λ§ 과정에 μ‹œκ°„μ΄ 걸리기 λ•Œλ¬Έμ— μœ μ €μ—κ²Œ λ Œλ”λ§μ€‘μž„μ€ μΈμ‹μ‹œμΌœμ£ΌκΈ° μœ„ν•¨ )

✨ SSR ( Server-Side-Rendering )

μ„œλ²„ μΈ‘ λ Œλ”λ§μž…λ‹ˆλ‹€. ( λΈŒλΌμš°μ €μ—μ„œ μš”μ²­ν•œ μ„œλ²„μ—μ„œ μ™„μ„±λœ HTML을 μ‘λ‹΅ν•œλ‹€λŠ” 의미 )

1. SSR λ™μž‘ μˆœμ„œ

  1. λΈŒλΌμš°μ €μ—μ„œ μ„œλ²„μ—κ²Œ URL + Method에 λ§žλŠ” 파일/데이터λ₯Ό μš”μ²­ν•œλ‹€.
  2. μ„œλ²„μ—μ„œ getServerSideProps()λ₯Ό μ‹€ν–‰ν•˜κ³  얻은 λ°μ΄ν„°λ‘œ HTML을 μ±„μ›Œμ„œ μ‘λ‹΅ν•œλ‹€.
  3. λΈŒλΌμš°μ €λŠ” μ™„μ„±λœ HTML을 νŒŒμ‹±ν•΄μ„œ λ°”λ‘œ 화면에 λ Œλ”λ§ν•œλ‹€.

λ™μž‘ μˆœμ„œμ™€ ν•¨κ»˜ SSR을 μ‚΄νŽ΄λ³΄λ©΄ μ„œλ²„μ—κ²Œ μš”μ²­ν•˜λŠ” μˆœκ°„ μ„œλ²„μΈ‘μ—μ„œ getServerSideProps()λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
getServerSideProps()μ—μ„œλŠ” μ›ΉνŽ˜μ΄μ§€λ₯Ό λ Œλ”λ§ν•˜λŠ”λ° ν•„μš”ν•œ 데이터듀을 μš”μ²­ν•˜κ³  μ‘λ‹΅ν•˜λŠ” 과정을 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
ν•„μš”ν•œ 데이터λ₯Ό λ°›μ•„μ„œ HTML을 μ™„μ„±ν•˜κ³  μ‘λ‹΅ν•©λ‹ˆλ‹€. ( 이미 μ™„μ„±λœ μƒνƒœλ‘œ μ‘λ‹΅λ˜κΈ° λ•Œλ¬Έμ— SEO에 μ’‹μŒ )
λΈŒλΌμš°μ €μ—μ„œ 받은 HTML을 νŒŒμ‹±ν•΄μ„œ 화면에 λ Œλ”λ§ν•©λ‹ˆλ‹€. ( 단, μ„œλ²„μ—μ„œ μ™„μ„±ν•˜λŠ” μ‹œκ°„μ΄ ν•„μš”ν•˜λ―€λ‘œ 응닡 μ‹œκ°„μ΄ CSR보닀 였래 κ±Έλ¦Ό )

2. SSR 정리

  1. SEOκ°€ λœλ‹€. ( 검색 엔진에 λ…ΈμΆœλœλ‹€. )
  2. 첫 λ Œλ”λ§μ΄ CSR보닀 였래 κ±Έλ¦°λ‹€. ( μ„œλ²„μ—μ„œ μ™„μ„±ν•˜λŠ” μ‹œκ°„μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έ )
  3. μ„œλ²„μ— 뢀담이 될 수 μžˆλ‹€. ( μš”μ²­ν•  λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ HTML을 생성함 )

✨ SSG ( Static-Site-Generation )

정적 μ‚¬μ΄νŠΈ μƒμ„±μž…λ‹ˆλ‹€.

1. SSG λ™μž‘ μˆœμ„œ

  1. Next.jsλ₯Ό buildν•  λ•Œ getStaticSideProps()λ₯Ό μ‹€ν–‰ν•œλ‹€.
  2. getStaticSideProps()λ₯Ό μ‹€ν–‰ν•΄μ„œ 얻은 데이터λ₯Ό μ΄μš©ν•΄μ„œ 미리 HTML을 μƒμ„±ν•œλ‹€.
  3. λΈŒλΌμš°μ €μ—μ„œ μ„œλ²„μ—κ²Œ URL+Method에 λ§žλŠ” 파일/데이터λ₯Ό μš”μ²­ν•˜λ©΄ λ°”λ‘œ μ™„μ„±λœ HTML을 μ‘λ‹΅ν•œλ‹€.

2. SSG 정리

  1. SEOκ°€ λœλ‹€. ( 검색 엔진에 λ…ΈμΆœλœλ‹€. )
  2. 첫 λ Œλ”λ§μ΄ λΉ λ₯΄λ‹€. ( 이미 μ™„μ„±λœ HTML을 κ·ΈλŒ€λ‘œ 전솑 )
  3. 변화에 λŒ€ν•œ 변경이 μ—†λ‹€. ( λΉŒλ“œ μ‹œ μ™„μ„±ν•΄λ²„λ €μ„œ λΉŒλ“œ 이후에 DBκ°€ μˆ˜μ •λ˜λ”λΌλ„ κ·Έ μˆ˜μ •λœ 데이터가 μ—…λ°μ΄νŠΈλ˜μ§€ μ•ŠλŠ”λ‹€. )

✨ ISR ( Incremental-Static-Regeneration )

정적인 μ‚¬μ΄νŠΈλ₯Ό λ‹€μ‹œ μƒμ„±ν•©λ‹ˆλ‹€.

1. ISR λ™μž‘ μˆœμ„œ

  1. Next.jsλ₯Ό buildν•  λ•Œ getStaticSideProps()λ₯Ό μ‹€ν–‰ν•œλ‹€.
  2. getStaticSideProps()λ₯Ό μ‹€ν–‰ν•΄μ„œ 얻은 데이터λ₯Ό μ΄μš©ν•΄μ„œ 미리 HTML을 μƒμ„±ν•œλ‹€.
  3. μΆ”κ°€μ μœΌλ‘œ getStaticSideProps()μ—μ„œ μ„€μ •ν•œ revalidate ν˜Ήμ€ unstable_revalidate()λ₯Ό μ΄μš©ν•΄μ„œ νŠΉμ • μ‹œμ μ— λ‹€μ‹œ 정적 νŽ˜μ΄μ§€λ₯Ό μž¬μƒμ„±ν•œλ‹€.
  4. λΈŒλΌμš°μ €μ—μ„œ μ„œλ²„μ—κ²Œ URL+Method에 λ§žλŠ” 파일/데이터λ₯Ό μš”μ²­ν•˜λ©΄ λ°”λ‘œ μ™„μ„±λœ HTML을 μ‘λ‹΅ν•œλ‹€.

2. ISR 정리

  1. SEOκ°€ λœλ‹€. ( 검색 엔진에 λ…ΈμΆœλœλ‹€. )
  2. 첫 λ Œλ”λ§μ΄ λΉ λ₯΄λ‹€. ( 이미 μ™„μ„±λœ HTML을 κ·ΈλŒ€λ‘œ 전솑 )
  3. 변화에 λŒ€ν•œ 변경이 κ°€λŠ₯ν•˜λ‹€. ( revalidate ν˜Ήμ€ unstable_revalidate()λ₯Ό μ‚¬μš©ν•˜λ©΄ μ›ν•˜λŠ” 지점에 λ‹€μ‹œ νŽ˜μ΄μ§€λ₯Ό μž¬μƒμ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. )

0개의 λŒ“κΈ€