• [Spring] ์Šคํ”„๋ง MVC : ์„œ๋ฒ„-์›น๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹/ CSR, SSR์˜ ๊ฐœ๋…

    2023. 12. 3.

    by. @leeeun

     

    ์„œ๋ฒ„์—์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค์ฃผ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์ฐจ์ด๋ฅผ ์‚ดํŽด๋ณด์ž.

    ํฌ๊ฒŒ (1) ์ •์  ๋ฆฌ์†Œ์Šค ์ „๋‹ฌ -์ •์   html ๋‚ด๋ ค์คŒ (2) ๋™์  html ํŽ˜์ด์ง€ ์ „๋‹ฌ (3)  HTTP API ๋ฐฉ์‹์ด ์žˆ๋‹ค.

     

    ์ •์  ๋ฆฌ์†Œ์Šค

    • ์š”์ฒญ์‹œ ๊ณ ์ •๋œ HTML ํŒŒ์ผ, CSS, JS, ์ด๋ฏธ์ง€, ์˜์ƒ ๋“ฑ์„ ์ œ๊ณต
    • ์ฃผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ

     

    HTML ํŽ˜์ด์ง€

    • ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ HTML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ์ „๋‹ฌ
    • ์›น ๋ธŒ๋ผ์šฐ์ €: HTML ํ•ด์„
    • ex) ์ฃผ๋ฌธ๋‚ด์—ญ. WAS๊ฐ€ ์ฃผ๋ฌธ ์ •๋ณด ์กฐํšŒ→ ๋™์  html(view template) ์ƒ์„ฑ → ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด๋ ค์คŒ

     

    HTTP API

    • HTML ๋‹จ์ˆœ ์ „๋‹ฌ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ
    • ๋ฐ์ดํ„ฐ๋Š” ์ฃผ๋กœ JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ
    • ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ์—์„œ ํ˜ธ์ถœ
    • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•จ⇒ html ๋ Œ๋”๋ง์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ. ๊ทธ๋Ÿผ ์–ด๋–จ ๋•Œ ์‚ฌ์šฉ?

     

    • ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ์—์„œ ํ˜ธ์ถœ, ์ฃผ๋กœ 3๊ฐ€์ง€ ์ƒํ™ฉ

     

    UI ํด๋ผ์ด์–ธํŠธ

    • (1) ์•ฑ ํด๋ผ์ด์–ธํŠธ
      • ๋ฐ์ดํ„ฐ๋งŒ ์ฃผ๊ณ  ๋ฐ›์Œ, UI ํ™”๋ฉด์ด ํ•„์š”ํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณ„๋„ ์ฒ˜๋ฆฌ
      • DB์—์„œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค์คŒ
      • UI ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์ฒด์ ์œผ๋กœ ๋งŒ๋“ค๊ณ , ๋ฐ์ดํ„ฐ๋งŒ ํ•„์š”ํ•  ๋•Œ
      • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์•ฑ์˜ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ทฐ ์ œ๊ณต
    • (2) ์›น ํด๋ผ์ด์–ธํŠธ
      • ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ JS์˜ ajax, patch์™€ ๊ฐ™์€ API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์˜ API๋ฅผ ํ˜ธ์ถœ → WAS ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋‚ด๋ ค์คŒ → JS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด html ๋™์ ์œผ๋กœ ์ƒ์„ฑ
      • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ React, Vue.js๊ฐ™์€ ์›น ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ทฐ ์ œ๊ณต

    (3) ์„œ๋ฒ„ to ์„œ๋ฒ„

    • ex) ์ฃผ๋ฌธ ์„œ๋ฒ„์™€ ๊ฒฐ์ œ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ํ•  ๋•Œ, HTML ์ฃผ๊ณ ๋ฐ›์„ ํ•„์š” ์—†์ด ๋ฐ์ดํ„ฐ๋งŒ ์ฃผ๊ณ  ๋ฐ›์Œ
    • ์š”์ฆ˜์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์œ ํ–‰ → ๊ธฐ์—… ์•ˆ์—์„œ๋„ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค์ด ์ชผ๊ฐœ์ ธ ์žˆ๊ณ , ๊ฐ ์„œ๋ฒ„๋Š” HTTP API๋กœ ํ†ต์‹ 
    • ๊ธฐ์—… ๊ฐ„ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์—๋„ ์‚ฌ์šฉํ•จ
     โœ๏ธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ์ •์  ๋ฆฌ์†Œ์Šค, ๋™์  HTML ํŽ˜์ด์ง€, HTTP API ์ด 3๊ฐ€์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•  ์ง€ ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค

     

    ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

     

    SSR - ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

    • HTML ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌ
      • ์„œ๋ฒ„์— ์š”์ฒญ → ์„œ๋ฒ„๊ฐ€ html ๋™์  ์ƒ์„ฑ (์„œ๋ฒ„์—์„œ html ํ™”๋ฉด์„ ๋ Œ๋”๋ง!) html์ฝ”๋“œ๋ฅผ ์‹ค์–ด์„œ ์‘๋‹ต์„ ๋ณด๋ƒ„ → ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” html์„ ๋ณด์—ฌ์คŒ
    • ๋™์  html์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์€ ์„œ๋ฒ„๊ฐ€, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ƒ์„ฑ๋œ html์„ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•จ.
    • ์ฃผ๋กœ ์ •์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉ
    • ๊ด€๋ จ๊ธฐ์ˆ : JSP, ํƒ€์ž„๋ฆฌํ”„ → ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ์˜์—ญ

     

    CSR - ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

    • HTML ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ ์œผ๋กœ html ์ƒ์„ฑํ•ด์„œ ์ ์šฉ
    • ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ html์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง
    • ์ฃผ๋กœ ๋™์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉ, ์›น ํ™˜๊ฒฝ์„ ๋งˆ์น˜ ์•ฑ ์ฒ˜๋Ÿผ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋ถ€๋ถ„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ
    • ์˜ˆ) ๊ตฌ๊ธ€ ์ง€๋„(ํ™•๋Œ€, ์ถ•์†Œํ•ด๋„ url์ด ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์•ฑ์ฒ˜๋Ÿผ ๋™์ž‘), Gmail, ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”
    • ๊ด€๋ จ๊ธฐ์ˆ : React, Vue.js → ์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ์˜์—ญ
    • ex) ์ฃผ๋ฌธ๋‚ด์—ญ ๊ด€๋ จ ์›น. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ html ์š”์ฒญ(์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง๊ณผ ๋™์ผ) → html์•ˆ์— ๋‚ด์šฉ์ด X. JS๋ฅผ ์„œ๋ฒ„์— ๋‚ด๋ ค์คŒ(ํด๋ผ์ด์–ธํŠธ ๋กœ์ง, html๋ Œ๋”๋ง ๋กœ์ง์ด ์žˆ์Œ) HTTP API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœ → ์„œ๋ฒ„์—์„œ ๊ด€๋ จ ์ •๋ณด๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋‚ด๋ ค์คŒ → ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ, html ๋ Œ๋”๋ง ์ฝ”๋“œ์— ์ด ์ •๋ณด๋ฅผ ์„ž์–ด์„œ html ๋™์ ์œผ๋กœ ์ƒ์„ฑ
    • ์ฐธ๊ณ 
      • CSR SSR ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ด ์žˆ์Œ
      • React, Vue.js๋ฅผ CSR + SSR ๋™์‹œ์— ์ง€์›ํ•˜๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์žˆ์Œ
      • SSR์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ™”๋ฉด ์ผ๋ถ€๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

    ๋Œ“๊ธ€