Web Architecture

🌐 ν΄λΌμ΄μ–ΈνŠΈμ‚¬μ΄λ“œ λ Œλ”λ§(CSR) VS μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§(SSR) | SPA, μž₯단점

grasinnong 2020. 11. 23. 18:52

 

 

ν΄λΌμ΄μ–ΈνŠΈμ‚¬μ΄λ“œ λ Œλ”λ§

ν΄λΌμ΄μ–ΈνŠΈμ‚¬μ΄λ“œ λ Œλ“œλ§μ— κ°€μž₯ λŒ€ν‘œμ μΈ κ²ƒμœΌλ‘œ Single Page Application(SPA)κ°€ μžˆλ‹€. 

 

 

πŸ“Œ SPAλž€? 

SPAλŠ” 전톡적인 Multi Page Application(MPA)κ³Ό λ‹€λ₯΄λ‹€. SPAλŠ” 단 ν•˜λ‚˜μ˜ μ›ΉνŽ˜μ΄μ§€(단 ν•˜λ‚˜μ˜ html)μ—μ„œλ§Œ λ Œλ”λ§μ΄ 이루어진닀. 

 

 

 

λ„€νŠΈμ›Œν¬ 탭을 보면 단 ν•˜λ‚˜μ˜ 파일만 λ‚΄λ €λ°›λŠ” 것을 λ³Ό 수 μžˆλ‹€. λ¦¬μ•‘νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆμ—ˆλŠ”λ° λ³΄μ΄λŠ” 것과 같이 ν•˜λ‚˜μ˜ html파일만 λ°›μ•„μ˜€μ§€λ§Œ,

 

 

 

μœ μ €κ°€ νƒ­μ—μ„œ μ„ νƒν•˜λ©΄ λ Œλ”λ§ λ˜λŠ” 것이 λ‹¬λΌμ§€λŠ” 것을 λ³Ό 수 μžˆλ‹€. μ΄λŸ¬ν•œ 방식을 ν΄λΌμ΄μ–ΈνŠΈμ‚¬μ΄λ“œ λ Œλ”λ§μ΄λΌκ³  ν•œλ‹€. 

 

SPAλŠ” 처음 화면을 켰을 λ•Œ, λΉ„μ–΄μžˆλŠ” HTML νŒŒμΌμ„ λ°›μ•„μ˜¨λ‹€. 그리고 λ‘œλ“œ λ˜λ©΄μ„œ 데이터λ₯Ό μ„œλ²„μ— μš”μ²­ν•˜κ³  화면에 λ Œλ”λ§ν•œλ‹€. 

 

직접 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ–Έμ œ 데이터λ₯Ό λΆˆλŸ¬μ˜¬μ§€ μ„€μ •ν•΄μ£Όμ–΄μ•Ό ν•˜λŠ”λ° react와 react-router-dom λͺ¨λ“ˆ μ‚¬μš©ν•˜μ—¬ SPAλ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

    <Switch>
          <Route exact path="/intro" render={() => {
            return <Intro />
           }} />
     </Switch>

 

μ΄λ ‡κ²Œ react-router-domμ—μ„œ λΌμš°νŒ…μ„ ν•΄μ£Όμ–΄μ„œ /intro, /login ... 으둜 μ‹λ³„ν•˜λŠ” μ£Όμ†Œλ₯Ό 넣을 수 μžˆμ—ˆλ‹€. μ£Όμ†Œκ°€ μžˆμ–΄μ•Ό λ‚˜μ€‘μ— 뢁마크λ₯Ό ν•  μˆ˜λ„ 있고, ꡬ글 검색엔진(SEO)을 톡해 μœ μž…μ΄ 될 수 있기 λ•Œλ¬Έμ— μ£Όμ†Œλ₯Ό λ„£μ–΄μ•Ό ν•œλ‹€. μ›Ή λΈŒλΌμš°μ € μ£Όμ†Œμ°½ URL에 λ‹€λ₯Έ 것이 λ Œλ”λ§ 될 λ•Œλ§ˆλ‹€ μ£Όμ†Œ, λ Œλ”λ§λ˜λŠ” 데이터가 λ°”λ€Œκ²Œλœλ‹€. 

 

 

 

πŸ“Œ SPAκ°€ λ‚˜μ˜€κ²Œ 된 λ°°κ²½

SPAλŠ” 전톡적인 μ›Ή 방식인 SSR의 λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κ³ μž λ‚˜μ˜¨ 방식이닀. μ›Ήμ—μ„œ μ œκ³΅ν•˜λŠ” 정보가 λ§Žμ•„μ§μ— 따라 SSR λ°©μ‹μœΌλ‘œ ν•  경우 λ§Žμ€ ν•œκ³„μ μ΄ 생겼닀. μƒˆλ‘œκ³ μΉ¨ ν•  λ•Œλ§ˆλ‹€ μ„œλ²„μ— μƒˆλ‘œ μš”μ²­μ„ λ³΄λ‚΄μ„œ htmlνŒŒμΌμ„ 받아와야 ν•˜κΈ° λ•Œλ¬Έμ— νŠΈλž˜ν”½, μ„œλ²„ μžμ›μ΄ λ‚­λΉ„λ˜μ—ˆλ‹€. 반면, SPAλŠ” 맨 처음 ν•˜λ‚˜μ˜ html 파일만 λ°›μ•„μ˜€κ³  데이터 변경이 μžˆμ„ λ•Œλ§Œ μ„œλ²„μ— μš”μ²­μ„ ν•˜κΈ° λ•Œλ¬Έμ— ν™•μ‹€νžˆ νŠΈλž˜ν”½κ³Ό μ„œλ²„ μžμ›μ΄ κ°μ†Œν•œλ‹€. 

 

 

πŸ“Œ SPA의 μž₯점

1. 처음 λ‘œλ”©μ΄ 될 λ•Œ  ν•˜λ‚˜μ˜ html파일만 λ°›μœΌλ©΄ 되기 λ•Œλ¬Έμ— λ™μ μœΌλ‘œ λΉ λ₯΄κ²Œ λ Œλ”λ§ ν•  수 μžˆλ‹€.(μ‚¬μš©μž UXκ°€ 뛰어남)

2. μ„œλ²„μ— μš”μ²­ν•˜λŠ” νšŸμˆ˜κ°€ μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§κ³Ό λΉ„κ΅ν–ˆμ„ λ•Œ 훨씬 적닀.(μ„œλ²„λΆ€λ‹΄μ΄ λœν•¨ -> 데이터 변경이 μžˆμ„ λ•Œλ§Œ μš”μ²­μ„ ν•œλ‹€.)

 

 

πŸ“Œ SPA의 단점

1. 처음 λ‘œλ”©λ  λ•Œ λͺ¨λ“  htmlκ³Ό static파일이 λ‘œλ“œλ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•œλ‹€. 

2. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 λ‚΄μž₯λ˜μ–΄μžˆλŠ” ꡬ글 검색엔진이 μ•„λ‹ˆλΌλ©΄, 크둀링을 μ œλŒ€λ‘œ ν•˜μ§€ λͺ»ν•œλ‹€. (μ‹€μ œ react μ†ŒμŠ€λ₯Ό ν™•μΈν•˜λ©΄ λ‚΄μš©μ΄ λΉ„μ–΄μžˆλ‹€)

 

 


 

μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§

1.html, 2.html, 3.html λ“± μ—¬λŸ¬κ°œμ˜ νŒŒμΌμ„ λ§Œλ“€μ–΄μ„œ 각각 λ‹€λ₯Έ νŽ˜μ΄μ§€λ₯Ό λ Œλ”λ§ν•˜λŠ” 방식이닀.  μ›Ήμ„œλ²„μ— μš”μ²­μ„ ν•  λ•Œλ§ˆλ‹€ Browser에 μƒˆλ‘œκ³ μΉ¨μ΄ μΌμ–΄λ‚˜κ³ , μ„œλ²„μ— μƒˆλ‘œμš΄ νŽ˜μ΄μ§€μ— λŒ€ν•œ μš”μ²­μ„ ν•œλ‹€. 

 

SSR은 μ²˜μŒλΆ€ν„° μ„œλ²„μ—κ²Œ μ™„μ„±λœ html νŒŒμΌμ„ λ°›μ•„μ™€μ„œ 화면에 λ Œλ”λ§ λœλ‹€. 

 

πŸ“Œ SSR의 μž₯점

1. 처음 λ‘œλ”©μ΄ 될 λ•Œ, μ™„μ „ν•œ html νŒŒμΌμ„ λ°›μ•„μ˜€κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ 빨리 λ Œλ”λ§λœ 화면을 λ³Ό 수 μžˆλ‹€.

2. κ²€μƒ‰μ—”μ§„μ΅œμ ν™”(SEO) κ°€λŠ₯

 

 

πŸ“Œ SSR의 단점

1. 맀번 νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•  λ•Œλ§ˆλ‹€ μƒˆλ‘œκ³ μΉ¨μ΄ μΌμ–΄λ‚˜μ„œ μ‚¬μš©μž UXκ°€ λ–¨μ–΄μ§„λ‹€. 

2. 맀번 μ„œλ²„μ— html νŒŒμΌμ„ μš”μ²­μ„ ν•˜κΈ° λ•Œλ¬Έμ— νŠΈλž˜ν”½, μ„œλ²„ λΆ€ν•˜κ°€ 컀진닀. 

 

 

 

 

 

ν΄λΌμ΄μ–ΈνŠΈμ‚¬μ΄λ“œ λ Œλ”λ§, μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§μ— λŒ€ν•œ 각각의 μž₯단점이 있기 λ•Œλ¬Έμ— μ–΄λ–€ 것을 μ‚¬μš©ν•˜λ©΄ 쒋을지 κ³ λ―Όν•˜κ³  μ‚¬μš©ν•˜λ©΄ 쒋을 것 κ°™λ‹€. 

 

 

 

 

 

 

 

 

 

 

[참고자료] [μ£Όλ‹ˆμ–΄νƒˆμΆœκΈ°] μ„œλ²„μ‚¬μ΄λ“œλ Œλ”λ§(SSR) & ν΄λΌμ΄μ–ΈνŠΈμ‚¬μ΄λ“œλ Œλ”λ§(CSR) -> bit.ly/3pRyLsA

 

CSR, SSR -> velog.io/@namezin/CSR-SSR

 

CSR, SSR

CSR : Client Side Rendering / SSR : Server Side Rendering

velog.io