CSR vs SSR (SPA와 MPA)

Daehyeon YunΒ·2024λ…„ 8μ›” 7일

ν”„λ‘ νŠΈμ—”λ“œ

λͺ©λ‘ 보기
9/14

πŸ“– Reference
πŸ“Ž https://codingapple.com/unit/nextjs-0-ot/
πŸ“Ž https://dev-ellachoi.tistory.com/28
πŸ“Ž https://www.youtube.com/watch?v=YuqB8D6eCKE


πŸ€” SPA와 MPAλž€ 뭘까?

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

πŸ’‘ MPA(Multi Page Application)

  • νŽ˜μ΄μ§€ 전체λ₯Ό λ Œλ”λ§ν•˜λŠ” 전톡적인 μ›Ή νŽ˜μ΄μ§€ ꡬ성 방식.
  • 탭을 μ΄λ™ν•˜κ±°λ‚˜ μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€ μ„œλ²„λ‘œλΆ€ν„° μƒˆλ‘œμš΄ HTMLλ₯Ό 응닡받아 λ‹€μ‹œ κ·Έλ¦°λ‹€.

πŸ’‘ SPA(Single Page Application)

  • ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€λ‘œ κ΅¬μ„±λœ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜.
  • SPA둜 개발된 μ›Ή μ‚¬μ΄νŠΈλŠ” μ»΄ν¬λ„ŒνŠΈ(Component) κΈ°λ°˜μ΄λ‹€. β†’ 예λ₯Ό λ“€μ–΄, μΉ΄ν…Œκ³ λ¦¬μ— μžˆλŠ” 각 메뉴λ₯Ό μ„ νƒν•˜λ©΄ 전체 νŽ˜μ΄μ§€κ°€ λ‹€μ‹œ κ·Έλ €μ§€λŠ”κ²ƒμ΄ μ•„λ‹Œ, ν—€λ”λŠ” κ³ μ •λ˜μ–΄ μžˆλŠ” μƒνƒœλ‘œ νŠΉμ • ν™”λ©΄ ν˜Ήμ€ ν΄λ¦­ν•œ λΆ€λΆ„λ§Œ κ·Έλ €μ§„λ‹€.

πŸ€” CSR와 SSR은 뭘까?

πŸ’‘ CSR(Client Side Rendering)

  • 뜻 κ·ΈλŒ€λ‘œ ν΄λΌμ΄μ–ΈνŠΈ μ—μ„œ λ Œλ”λ§μ΄ μ§„ν–‰λ˜λŠ” 방식을 λ§ν•œλ‹€.

μœ„ 사진은 CSR 의 λ™μž‘κ³Όμ •μ΄λ©°, μ •λ¦¬ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

  1. μœ μ €κ°€ μ›Ήμ‚¬μ΄νŠΈμ— λ°©λ¬Έν•˜λ©΄ λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œ 컨텐츠λ₯Ό μš”μ²­(Request)ν•œλ‹€.
  2. μ„œλ²„λŠ” λΈŒλΌμš°μ €μ—κ²Œ HTML κ³Ό λ‹€μš΄λ‘œλ“œν•  수 μžˆλŠ” JavaScript 링크 λ₯Ό 응닡(Response)ν•œλ‹€.
    1. λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œλΆ€ν„° λ°›μ•„μ˜¨ HTML 에 JSλ₯Ό μ μš©ν•˜κΈ°μœ„ν•΄ 응닡받은 JavaScript 링크 λ₯Ό 톡해 μ„œλ²„λ‘œλΆ€ν„° JS νŒŒμΌμ„ λ°›μ•„μ˜¨λ‹€.
  3. HTML 에 λ°›μ•„μ˜¨ JS νŒŒμΌμ„ μ μš©μ‹œμΌœ 동적 νŽ˜μ΄μ§€λ‘œ λ§Œλ“€μ–΄ λΈŒλΌμš°μ €μ— 좜λ ₯ν•œλ‹€.

❕CSR의 μž₯단점

CSR μ„€λͺ… 쀑 4번 ν•­λͺ©μ„ μ£Όλͺ©ν•˜λ©΄ μ’‹λ‹€. CSR은 λΈŒλΌμš°μ €κ°€ JS νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜κ³  λ™μ μœΌλ‘œ DOM을 μƒμ„±ν•˜λŠ” μ‹œκ°„μ„ κΈ°λ‹€λ €μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 초기 λ‘œλ”© 속도가 λŠλ¦¬λ‹€.

ν•˜μ§€λ§Œ, 초기 λ‘œλ”© 이후에 λ°œμƒλ˜λŠ” νŽ˜μ΄μ§€ 일뢀 λ³€κ²½ 사항듀에 λŒ€ν•œ μ²˜λ¦¬λŠ” λΉ λ₯΄λ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€. μ„œλ²„μ—μ„œ λ³€κ²½ν•˜κ³ μž ν•˜λŠ” λ°μ΄ν„°λ§Œ μš”μ²­ν•˜λ©΄ 되기 λ•Œλ¬Έμ΄λ‹€.

λ”λΆˆμ–΄, μ„œλ²„λŠ” JSλ₯Ό μ‚½μž…ν•˜μ§€ μ•ŠλŠ” 빈 λΌˆλŒ€μ™€ λ‹€λ¦„μ—†λŠ” HTML만 μ‘λ‹΅ν•˜λŠ” 역할을 μˆ˜ν–‰ν•˜κΈ°μ— μ„œλ²„ 츑의 λΆ€ν•˜κ°€ 적닀. 뿐만 μ•„λ‹ˆλΌ μ„œλ²„κ°€ μ•„λ‹Œ, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ—°μ‚°κ³Ό λΌμš°νŒ… 등을 λͺ¨λ‘ 직접 μ²˜λ¦¬ν•˜κΈ°μ— λ°˜μ‘μ†λ„κ°€ λΉ λ₯΄λ©° UXλ˜ν•œ μš°μˆ˜ν•˜λ‹€.

단, CSR의 경우 SEO(검색 μ—”μ§„ μ΅œμ ν™”) μΈ‘λ©΄μ—μ„œ λΆˆλ¦¬ν•˜λ‹€. SEOλ₯Ό μ§„ν–‰ν•˜λŠ” μ›Ή 크둀러 봇 μž…μž₯μ—μ„œλŠ” HTML 이 ν…… λΉ„μ–΄μžˆλŠ” κ²ƒμ²˜λŸΌ 보이기에 μƒ‰μΈν• λ§Œν•œ 컨텐츠가 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ μΈμ‹ν•œλ‹€. λ”°λΌμ„œ μ—΄μ‹¬νžˆ μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•˜λ”λΌλ„ 검색 μ‚¬μ΄νŠΈμ— λ…ΈμΆœμ΄ 잘 λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ λ°œμƒν•  수 μžˆλ‹€.

β†’ μ‹€μ œ, 아직 μ™„λ²½ν•œ 단계가 μ•„λ‹ˆκΈ°μ— ꡬ글 μΈ‘μ—μ„œλ„ SSR을 κ³ λ €ν•˜λΌλŠ” 말을 덧뢙이고 μžˆλ‹€β€¦


πŸ’‘ SSR(Server Side Rendering)

  • 뜻 κ·ΈλŒ€λ‘œ μ„œλ²„ μ—μ„œ λ Œλ”λ§μ΄ μ§„ν–‰λ˜λŠ” 방식을 λ§ν•œλ‹€.

μœ„ 사진은 SSR 의 λ™μž‘κ³Όμ •μ΄λ©°, μ •λ¦¬ν•˜λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

  1. μœ μ €κ°€ μ›Ήμ‚¬μ΄νŠΈμ— λ°©λ¬Έν•˜λ©΄ λΈŒλΌμš°μ €λŠ” μ„œλ²„μ—κ²Œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­(Request)ν•œλ‹€.
  2. μ„œλ²„λŠ” λΈŒλΌμš°μ €κ°€ μš”μ²­ν•œ λ¦¬μ†ŒμŠ€λ₯Ό λͺ¨λ‘ 얻어와 μ¦‰μ‹œ μ‚½μž…ν•˜λ©°, CSSκΉŒμ§€ μ μš©ν•œ HTMLκ³Ό JS μ½”λ“œλ₯Ό λΈŒλΌμš°μ €μ—κ²Œ 응닡(Response)ν•œλ‹€.
  3. λΈŒλΌμš°μ €λŠ” CSSκΉŒμ§€ 적용된 HTMLκ³Ό μ„œλ²„λ‘œλΆ€ν„° λ°›μ•„μ˜¨ JS μ½”λ“œλ₯Ό μ—°κ²°ν•œλ‹€.

! SSR의 μž₯단점

SSR μ„€λͺ… 쀑 2λ²ˆμ„ μ£Όλͺ©ν•˜μž. SSR 은 μ„œλ²„μ—μ„œ 이미 λͺ¨λ“  데이터가 HTML 에 λ‹΄κΈ΄ μ±„λ‘œ λΈŒλΌμš°μ €λ‘œ μ „λ‹¬λ˜μ–΄ SEO(검색 μ—”μ§„ μ΅œμ ν™”) 에 μœ λ¦¬ν•˜λ‹€.

SEO λ₯Ό μ§„ν–‰ν•˜λŠ” μ›Ή 크둀러 봇이 μ„œλ²„λ‘œλΆ€ν„° λ„˜μ–΄μ˜¨ μ™„μ„±λœ HTML을 읽을 수 있기 λ•Œλ¬Έμ΄λ‹€. λ˜ν•œ, JS μ½”λ“œλ₯Ό λ‹€μš΄λ‘œλ“œ λ°›κ³  μ‹€ν–‰ν•˜κΈ° 전에 μ‚¬μš©μžλŠ” 이미 HTML 이 λ Œλ”λ§λœ 화면을 λ³Ό 수 μžˆλ‹€. λ”°λΌμ„œ JS μ½”λ“œλ₯Ό λ‹€μš΄λ°›κ³  κΈ°λ‹€λ €μ•Όν•˜λŠ” CSR 보닀 초기 ꡬ동 속도가 λΉ λ₯΄λ‹€.

μ΄λ•Œ, 상기와 같이 이미 HTML이 λ Œλ”λ§λœ 화면을 λ³Ό 수 μžˆλ‹€. λΌλŠ” 문ꡬλ₯Ό μ£Όλͺ©ν•˜μž. ν•΄λ‹Ή μ‹œμ μ—μ„œλŠ” μ‚¬μš©μžκ°€ λ²„νŠΌμ„ ν΄λ¦­ν•˜κ±°λ‚˜ 이벀트λ₯Ό λ°œμƒμ‹œν‚€λ € ν•  λ•Œ 아무 λ°˜μ‘μ΄ 없을 수 μžˆλ‹€. μ‚¬μš©μžμ™€ λ°˜μ‘ν•  수 μžˆλŠ” νŽ˜μ΄μ§€κ°€ 사싀은 λ‚΄μš©κ³Ό μŠ€νƒ€μΌλ§Œ μž…ν˜€μ§„ 껍데기에 λΆˆκ³Όν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ‹€μ œλ‘œλŠ” μ„œλ²„λ‘œλΆ€ν„° λ°›μ•„μ˜¨ JS κ°€ μ‹€ν–‰λ˜κ³  ν•Έλ“€λŸ¬κ°€ μ²¨λΆ€λœ JS 둜직이 연결될 λ•ŒκΉŒμ§€ νŽ˜μ΄μ§€λŠ” μ‚¬μš©μžμ˜ μž…λ ₯에 응닡할 수 μ—†λ‹€.


CSRκ³Ό SSR의 μ°¨μ΄λŠ” μ–΄λ–€ Side μ—μ„œ λ Œλ”λ§μ΄ μ§„ν–‰λ˜λŠ”κ°€μ— μžˆλ‹€.

SSR은 TTV(Time to View, 화면에 λ³΄μ΄λŠ” μ‹œκ°„) 와 TTI(Time to Interact, λ°˜μ‘λ˜λŠ” μ‹œκ°„) κ°„μ˜ μ‹œκ°„ 간격이 μ‘΄μž¬ν•˜λŠ” 것이 단점이닀.

CSR은 JSκ°€ λ™μ μœΌλ‘œ DOM 을 μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— HTML 은 JS 둜직이 λͺ¨λ‘ μ—°κ²°λœ μƒνƒœμ΄κΈ°μ— μ‚¬μš©μžκ°€ λ³΄λŠ” 관점(TTV)와 μ΄μš©ν•  수 μžˆλŠ” μ‹œμ (TTI)κ°€ λ™μΌν•˜λ‹€.


πŸ’‘ λ²ˆμ™Έ : SSG(Static Site Generation) 정적 μ‚¬μ΄νŠΈ μƒμ„±μ΄λž€?

  • Static Rendering 이라고도 λΆˆλ¦¬λŠ” 방식은 μ‚¬μš©μžμ—κ²Œ 보여주기 μœ„ν•œ νŽ˜μ΄μ§€λ“€μ„ μ„œλ²„μ—μ„œ λͺ¨λ‘ λ§Œλ“  λ’€ μš”μ²­μ΄ μžˆμ„ λ•Œ λ§Œλ“€μ–΄λ‘” νŽ˜μ΄μ§€λ₯Ό μ‘λ‹΅ν•˜λŠ” 방식이닀. β†’ 즉, λ°”λ€” 일이 거의 μ—†μ–΄ 캐싱해 두면 쒋은 νŽ˜μ΄μ§€μ— μ‚¬μš©ν•˜λ©΄ μ ν•©ν•˜λ‹€.
  • SSRκ³Ό SSG의 차이점은? β†’SSR은 νŠΉμ • μš”μ²­μ΄ μžˆμ„ λ•Œ μ¦‰μ‹œ HTML을 λ§Œλ“€μ–΄ μ‘λ‹΅ν•œλ‹€. β†’ 데이터가 μˆ˜μ‹œλ‘œ λ°”λ€Œκ±°λ‚˜ 미리 λ§Œλ“€μ–΄λ‘κΈ° μ–΄λ €μš΄ νŽ˜μ΄μ§€μ— μ ν•©ν•˜λ‹€. β†’ 즉, SSRκ³Ό SSGλŠ” μ„œλ²„μ—μ„œ HTML을 λ³΄λ‚΄μ€€λ‹€λŠ” μΈ‘λ©΄μ—μ„œ μœ μ‚¬ν•˜λ‹€. ν•˜μ§€λ§Œ, μ–Έμ œ λ§Œλ“€μ–΄μ£ΌλŠ”μ§€μ— 따라 차이가 μ‘΄μž¬ν•œλ‹€.

πŸ’‘ CSR κ³Ό SSR 의 μž₯단점 정리

CSR의 μž₯, 단점

  • μž₯점
    -> ν™”λ©΄ κΉœλΉ‘μž„ μ—†μŒ
    -> 초기 λ‘œλ”© 이후 ꡬ동 속도가 빠름
    -> TTV와 TTI 사이 κ°„κ·Ή μ—†μŒ
    -> μ„œλ²„μ˜ λΆ€ν•˜λ₯Ό λΆ„μ‚°ν•  수 있음

  • 단점
    -> 초기 λ‘œλ”© 속도가 느림
    -> SEO에 뢈리

SSR의 μž₯단점

  • μž₯점
    -> 초기 ꡬ동 속도가 빠름
    -> SEO에 유리

  • 단점
    -> ν™”λ©΄ κΉœλΉ‘μž„μ΄ 쑴재
    -> TTV와 TTI 사이 κ°„κ·Ή 있음
    -> μ„œλ²„μ— λΆ€ν•˜κ°€ 올 수 있음


πŸ€” λ‚΄κ°€ λ§Œλ“œλŠ” μ„œλΉ„μŠ€μ— μ–΄λ–€ λ Œλ”λ§μ„ μ μš©ν• κΉŒ?

🚩 CSR(Client Side Rendering)

β†’ μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©μ΄ λ§Žμ€ μ„œλΉ„μŠ€
πŸ’‘ λŒ€λΆ€λΆ„μ΄ 고객의 κ°œμΈμ •λ³΄λ“€λ‘œ 이루어진 νŽ˜μ΄μ§€λ“€ β†’ 검색엔진에 λ…ΈμΆœλ  ν•„μš” X (SEO 무의미)

🚩 SSR(Server Side Rendering)

β†’ λˆ„κ΅¬μ—κ²Œλ‚˜ 항상 같은 λ‚΄μš©μ„ λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€

β†’νšŒμ‚¬ ν™ˆνŽ˜μ΄μ§€ ν˜Ήμ€ μ‡Όν•‘λͺ° λ“± 홍보 ν˜Ήμ€ 검색엔진에 λ…ΈμΆœμ΄ 많이 λ˜μ–΄μ•Όν•˜λŠ” μ„œλΉ„μŠ€

β†’ μ—…λ°μ΄νŠΈκ°€ λΉˆλ²ˆν•΄ νŽ˜μ΄μ§€ λ‚΄μš©μ΄ 자주 λ°”λ€ŒλŠ” νŽ˜μ΄μ§€
πŸ’‘ 검색엔진에 자주 λ…ΈμΆœλ˜μ–΄μ•Όν•˜κΈ°μ— SEO에 유리

🚩 SSG(Static Site Generation)

β†’ SSR κ³Ό λ™μΌν•˜κ²Œ λˆ„κ΅¬μ—κ²Œλ‚˜ 항상 같은 λ‚΄μš©μ„ λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€.

β†’ 홍보 ν˜Ήμ€ μƒμœ„ λ…ΈμΆœμ΄ ν•„μš”ν•œ νŽ˜μ΄μ§€
β†’ 단, πŸ’‘μ—…λ°μ΄νŠΈλ₯Ό 거의 ν•˜μ§€ μ•ŠλŠ” νŽ˜μ΄μ§€

🚩 Universal Rendering (초기 λ Œλ”λ§ SSR + 이후 CSR)

β†’ μ‚¬μš©μžμ— 따라 νŽ˜μ΄μ§€ λ‚΄μš©μ΄ λ³€ν•˜λŠ” 경우

β†’ λΉ λ₯Έ λ°˜μ‘ 및 응닡과 ν™”λ©΄ κΉœλΉ‘μž„ ν˜„μƒμ΄ μ—†μ–΄μ•Ό ν•˜λŠ” 경우

β†’ SEOλ₯Ό 포기할 수 μ—†λŠ” 경우 (= 홍보 및 μƒμœ„ λ…ΈμΆœμ˜ ν•„μš”μ„±)

profile
μ—΄μ‹¬νžˆ μ‚΄μ•„μ•Όμ§€

0개의 λŒ“κΈ€