πŸ“• CS μŠ€ν„°λ””/λ„€νŠΈμ›Œν¬

[WEB 🌍] CSR/SSR/SSG, SPA/MPA, AJAX λͺ½λ•… 정리

iknowDev 2023. 5. 7. 02:54

ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ±„μš© μš°λŒ€μ‚¬ν•­μ— μ΄λŸ¬ν•œ λ¬Έμž₯을 λ³Έ 적이 μžˆμŠ΅λ‹ˆλ‹€.

  • CSR/SSR/SSG/ISR에 λŒ€ν•΄ μ΄ν•΄ν•˜κ³ , μ‹€μ œ νŽ˜μ΄μ§€ 개발 μ‹œ ν•΄λ‹Ή κ°œλ…μ„ μ μš©ν•΄λ³΄μ‹  λΆ„

그렇기에 κ΄€λ ¨ CS 지식을 ν•™μŠ΅ν•˜κ³  μ •λ¦¬ν•΄λ΄…μ‹œλ‹€.

 

 

πŸ“Œ CSR / SSR

πŸ‘‰ μ–΄λŠμͺ½μ—μ„œ λ Œλ”λ§μ„ μ€€λΉ„ν•˜λŠ”μ§€μ— 따라 λ‚˜λ‰œλ‹€.

CSR SSR
μ›Ή νŽ˜μ΄μ§€μ˜ λ Œλ”링이 ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €) μΈ‘μ—μ„œ μΌμ–΄λ‚˜λŠ” 것

λ™μž‘ κ³Όμ •
1) μœ μ €μ˜ μ›ΉλΈŒλΌμš°μ € λ°©λ¬Έ
2) λΈŒλΌμš°μ €μ˜ μ„œλ²„λ‘œ μ½˜ν…μΈ  μš”μ²­
3) μ„œλ²„μ˜ λΈŒλΌμš°μ €λ‘œ HTML, JS 링크 전솑
4) λΈŒλΌμš°μ €λŠ” JS λ‹€μš΄λ‘œλ“œ ν›„ 동적 DOM 생성

νŠΉμ§•
1. μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν•„μš”ν•œ 정적 λ¦¬μ†ŒμŠ€λ₯Ό μ΄ˆλ°˜μ— λͺ¨λ‘ λ‹€μš΄λ‘œλ“œ
-> 초기 λ‘œλ”© 속도 느림

2. νŽ˜μ΄μ§€ κ°±μ‹  μ‹œ ν•„μš”ν•œ λ°μ΄ν„°λ§Œ 전달 λ°›μ•„ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ νŽ˜μ΄μ§€λ₯Ό κ°±μ‹ 
-> λ‘œλ”© 이후 ꡬ동 속도 빠름, UX 만쑱

3. μ„œλ²„λ‘œλΆ€ν„° 빈 λΌˆλŒ€ HTML을 λ°›μŒ
-> 검색 μ—”μ§„ μ΅œμ ν™”(SEO)에 뢈리

4. TTV === TTI
-> λ‘œλ”©κ³Ό ν•¨κ»˜ 이벀트 λ°˜μ‘μ΄ κ°€λŠ₯


μ›Ή νŽ˜μ΄μ§€μ˜ λ Œλ”링이 μ„œλ²„ μΈ‘μ—μ„œ μΌμ–΄λ‚˜λŠ” 것


λ™μž‘ κ³Όμ •
1) μœ μ €μ˜ μ›ΉλΈŒλΌμš°μ € λ°©λ¬Έ
2) λΈŒλΌμš°μ €μ˜ μ„œλ²„λ‘œ μ½˜ν…μΈ  μš”μ²­
3) μ„œλ²„μ˜ λΈŒλΌμš°μ €λ‘œ λ Œλ”λ§μ„ 마친 HTMLκ³Ό JS Code 전솑
4) λΈŒλΌμš°μ €λŠ” HTML을 ν‘œμ‹œν•˜κ³ , HTML에 JS 둜직 μ—°κ²°

νŠΉμ§•
1. JS μ—°κ²° μ „ μ‚¬μš©μžκ°€ HTML 화면을 λ³Ό 수 있음
-> λΉ λ₯Έ 초기 λ‘œλ”© (Time To View)

2. JS 둜직 μ—°κ²° μ „ 클릭 이벀트 λ“±μ˜ λ™μž‘μ΄ μž‘λ™ λΆˆκ°€
-> 이벀트 λ°˜μ‘ μ€€λΉ„ μ‹œκ°„μ΄ κ±Έλ¦Ό (Time To Interactive)

3. λ Œλ”λ§μ„ 마친 HTML을 λ°›μŒ
-> SEO에 유리

4. νŽ˜μ΄μ§€ κ°±μ‹  λ•Œλ§ˆλ‹€ μ„œλ²„μ—μ„œ λžœλ”λ§λœ 정적 λ¦¬μ†ŒμŠ€λ₯Ό λ°›μ•„μ˜΄

5. TTV !== TTI
-> λ‘œλ”©κ³Ό 이벀트 λ°˜μ‘μ˜ κ°€λŠ₯ μ‹œκ°„μ΄ 닀름

 

 


+) SSG

Static Site Generation(static rendering)

μ„œλ²„μ—μ„œ html을 λ³΄λ‚΄μ£Όμ§€λ§Œ μ–Έμ œ λ§Œλ“€μ–΄μ§€λŠλƒμ˜ 차이가 μžˆλ‹€.

  • SSGλŠ” μ„œλ²„μ— λͺ¨λ‘ λ§Œλ“€μ–΄λ‘κ³  μš”μ²­ μ‹œμ— ν•΄λ‹Ή νŽ˜μ΄μ§€λ₯Ό 응닡
  • λ°”λ€Œμ§€ μ•ŠλŠ” μΊμ‹± ν•΄λ‘λ©΄ μ’‹μ€ νŽ˜μ΄μ§€μ— μ ν•©

 

πŸ“Œ SPA / MPA

SPA(Single Page Application) := ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€λ‘œ κ΅¬μ„±λœ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜

SPA ➑ 헀더 μ •보듀은 κ³ μ •λ˜μ–΄ 있고 νŠΉμ • μ˜μ—­μ˜ λ³€ν™”λ§Œμ„ λ°˜μ˜ν•˜λŠ” CSR λ Œλ”λ§ 방식

 

MPA ➑  μƒˆλ‘œμš΄ HTML을 λ°›μ•„μ™€μ„œ νŽ˜μ΄μ§€ 전체λ₯Ό μƒˆλ‘­κ²Œ λ Œλ”λ§ν•˜λŠ” SSR λ Œλ”λ§ 방식

μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ μœ„ν•΄ React.js, Angular, Vue.js와 같은
μžλ°”μŠ€ν¬λ¦½νŠΈ 기반 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•΄ SPAλ₯Ό κ°œλ°œν•¨

 

 

βœ”οΈ SPA == CSR λΌλŠ” μ˜€ν•΄

νŽ˜μ΄μ§€κ°€ λͺ‡κ°œλƒ, λ Œλ”λ§μ„ μ–΄λ””μ„œ ν•˜λŠ”μ§€λ‘œ λ‹€λ₯Έ κ°œλ…μž…λ‹ˆλ‹€.

 

 

 

βœ”οΈ CSR이 κ°€μž₯ 쒋은 λ Œλ”λ§ 방식인가?

λŒ€λΆ€λΆ„μ˜ μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ SPAμ΄λ‹ˆ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” λ Œλ”λ§ 방식도 CSR이긴 ν•˜μ§€λ§Œ

CSR은 검색엔진에 λ…ΈμΆœλ  ν•„μš” μ—†κ³ , μœ μ €μ™€μ˜ μƒν˜Έμž‘μš©μ΄ λ§Žμ€ νŽ˜μ΄μ§€μ— 적합 

SSR은 μš”μ²­ μ‹œ μ„œλ²„μ—μ„œ μ¦‰μ‹œ λ§Œλ“€μ–΄μ„œ μ‘λ‹΅ν•˜κΈ° λ•Œλ¬Έμ— 데이터가 자주 λ°”λ€Œκ³ , 미리 λ§Œλ“€μ–΄λ‘κΈ° μ–΄λ €μš΄ νŽ˜μ΄μ§€μ— 적합

 

 

πŸ“Œ AJAX

μ„ν˜„μ€€μ˜ μ•„μ•½μŠ€

AJAX := JS와 XMLHttpRequest κ°μ²΄λ₯Ό μ‚¬μš©ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ λΉ„동기 λ°©μ‹μœΌλ‘œ ν†΅μ‹ ν•˜λŠ” 것

XMLHttpRequest(XHR) := λΈŒλΌμš°μ €μ—μ„œ μ œκ³΅ν•˜λŠ” Web API 객체, HTTP μš”μ²­ 전솑과 응닡 μˆ˜μ‹ μ„ μœ„ν•œ λ©”μ„œλ“œμ™€ ν”„λ‘œνΌν‹° 제곡

 

 

βœ”οΈ κΈ°λŒ€ 효과

  1. μ›ν•˜λŠ” λΆ€λΆ„λ§Œ λ™μ μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ κ°ˆμ•„λΌμšΈ 수 있음
  2. λͺ¨λ°”일 μ•±μ²˜λŸΌ λ™μž‘ν•˜κΈ°μ— ν™”λ©΄ ν‘œμ‹œκ°€ μƒˆλ‘­κ²Œ ν•  λ•Œ λ°œμƒν•˜λŠ” ν™”λ©΄ κΉœλΉ‘μž„ 없이 Seamless UX
  3. ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 톡신이 비동기 λ°©μ‹μœΌλ‘œ λ™μž‘ (μ΄μ „μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ˜ 응닡을 κΈ°λ‹€λ¦¬λŠ” ν΄λΌμ΄μ–ΈνŠΈ λΈ”λ‘œν‚Ήμ΄ μžˆμ—ˆμŒ)

 

 

βœ”οΈ Ajax 이용 μ›Ή λ™μž‘ 원리

  1. μ΄λ²€νŠΈκ°€ λ°œμƒν•œλ‹€.
  2. ν•Έλ“€λŸ¬μ— μ˜ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν˜ΈμΆœν•œλ‹€.
  3. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” XMLHttpRequest 객체 μƒμ„±ν•˜μ—¬ μ„œλ²„λ‘œ μš”μ²­μ„ 보낸닀.
    • κ·Έλ™μ•ˆ μ›Ή λΈŒλΌμš°μ €λŠ” 응닡을 기닀릴 ν•„μš” 없이 λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€(비동기)
  4. μ„œλ²„λŠ” XmlHttpRequest 객체λ₯Ό 전달 λ°›μ•„ Ajax μš”μ²­ 처리λ₯Ό ν•œλ‹€.
  5. 응닡을 생성해 보낸닀. (HTML, XML, JSON)
  6. λΈŒλΌμš°μ €λŠ” HTML 및 CSS 데이터λ₯Ό λ°›μ•„ 일뢀뢄을 μ—…λ°μ΄νŠΈν•œλ‹€.