๐ŸŒฑ Spring Boot 9 โ€” MVC ํŒจํ„ด, Thymeleaf, ๊ทธ๋ฆฌ๊ณ  SSR & CSR ์ดํ•ดํ•˜๊ธฐ

๊น€์„ธํ˜„ยท2025๋…„ 10์›” 22์ผ

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
9/19

๋‚ ์งœ:2025-10-22


ํ•™์Šต ๋ชฉํ‘œ

  • MVC ํŒจํ„ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…(Model, View, Controller)๊ณผ ์—ญํ• ์„ ์ดํ•ดํ•œ๋‹ค.
  • Thymeleaf ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์†Œ๊ฐœํ•œ๋‹ค.
  • SSR(Server Side Rendering)๊ณผ CSR(Client Side Rendering)์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•œ๋‹ค.

โœ… ์„œ๋ธ”๋ฆฟ ๊ตฌ์กฐ์˜ ํ•œ๊ณ„

1.๋‚ฎ์€ ์‘์ง‘๋„ (Low Cohesion)

  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์•ˆ์— ์š”์ฒญ ์ฒ˜๋ฆฌ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์‘๋‹ต ์ƒ์„ฑ์ด ๋ชจ๋‘ ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ‰, ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜๊ฒŒ ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

2.๋†’์€ ๊ฒฐํ•ฉ๋„ (High Coupling)

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด HttpServletRequest, HttpServletResponse ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ API์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ฑฐ๋‚˜ ์›น ์ด์™ธ ํ™˜๊ฒฝ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค.

3.๋ฐ˜๋ณต์ ์ธ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ (Boilerplate)

  • ๋งค๋ฒˆ ํŒŒ๋ผ๋ฏธํ„ฐ ํŒŒ์‹ฑ, ์‘๋‹ต ํƒ€์ž… ์„ค์ •, JSON ๋ณ€ํ™˜ ๋“ฑ์„ ์ง์ ‘ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… MVC ํŒจํ„ด

MVC ํŒจํ„ด

  • ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์ด ๋ชจ๋“  ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์—ญํ• ๋ณ„๋กœ ๋ถ„๋ฆฌํ•œ ์„ค๊ณ„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
๊ตฌ์„ฑ์š”์†Œ์—ญํ• 
Model๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋‹ด๋‹น (์˜ˆ: ์˜ํ™” ๋ฐ์ดํ„ฐ, ์ถ”์ฒœ ๋กœ์ง)
View์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ํ™”๋ฉด(UI) ๋‹ด๋‹น (์˜ˆ: HTML, Thymeleaf ํ…œํ”Œ๋ฆฟ)
Controller์š”์ฒญ์„ ๋ฐ›์•„ Model๊ณผ View๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• 

์ด๋ ‡๊ฒŒ ์—ญํ• ์„ ๋ถ„๋ฆฌ(Separation of Concerns) ํ•˜๋ฉด
์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•ด์ง€๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ํšจ์œจ์ด ํฌ๊ฒŒ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.


Controller

  • ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ์–ด๋–ค URL์ด ์–ด๋–ค ๋ฉ”์„œ๋“œ๋กœ ์—ฐ๊ฒฐ๋ ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ Model์— ๋‹ด์€ ๋’ค View ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


Model

  • Controller์—์„œ View๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • Key-Value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    -๐Ÿ’ก Model์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋Š” View(HTML)์—์„œ ${title}๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

View

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ํ™”๋ฉด(UI)์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Controller๊ฐ€ ๋ฐ˜ํ™˜ํ•œ View ์ด๋ฆ„์„ ViewResolver๊ฐ€ ์‹ค์ œ ํŒŒ์ผ๊ณผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  • Thymeleaf ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด ์ด ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

โœ… Thymeleaf๋ž€?

Thymeleaf(ํƒ€์ž„๋ฆฌํ”„)

  • ์„œ๋ฒ„์—์„œ HTML์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ž…๋‹ˆ๋‹ค.
    -์ฆ‰, Controller์—์„œ ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ HTML ์ฝ”๋“œ์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜ํ•ด์ค๋‹ˆ๋‹ค.

โœ… Thymeleaf์˜ ์ฃผ์š” ํŠน์ง•

  • HTML ํŒŒ์ผ ์•ˆ์—์„œ ๋ณ€์ˆ˜ ํ‘œํ˜„ (${}) ๊ฐ€๋Šฅ
  • ์ˆœ์ˆ˜ HTML๋กœ๋„ ๋ฏธ๋ฆฌ ํ™”๋ฉด ํ™•์ธ ๊ฐ€๋Šฅ (๊ฐœ๋ฐœ ํŽธ์˜์„ฑ โ†‘)
  • Spring MVC์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ

โœ… SSR vs CSR

์„œ๋ฒ„์—์„œ HTML์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” Thymeleaf๋ฅผ ๋ฐฐ์šฐ๋‹ค ๋ณด๋ฉด
ํ”„๋ก ํŠธ์—”๋“œ(React, Vue ๋“ฑ)์™€์˜ ์ฐจ์ด๊ฐ€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด SSR๊ณผ CSR ๊ฐœ๋…์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.


SSR (Server Side Rendering)

  • SSR์€ ์„œ๋ฒ„์—์„œ ์™„์„ฑ๋œ HTML์„ ๋งŒ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ›์€ HTML์„ ๊ทธ๋Œ€๋กœ ๋ Œ๋”๋งํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ ๋กœ๋”ฉ์ด ๋น ๋ฅด๊ณ , SEO์—๋„ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก Thymeleaf๋Š” SSR ๋ฐฉ์‹์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค.

  • ์ฆ‰, ์„œ๋ฒ„์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ ๋„ฃ์€ HTML์„ ํ†ต์งธ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

CSR (Client Side Rendering)

  • CSR์€ ์„œ๋ฒ„๊ฐ€ ๋น„์–ด์žˆ๋Š” HTML ๋ผˆ๋Œ€์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋งŒ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ๊ทธ ์ž๋ฆฌ์—์„œ ์ง์ ‘ HTML์„ ์กฐ๋ฆฝํ•ด ํ™”๋ฉด์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.
    ๐Ÿ’ก React, Vue, Svelte ๋“ฑ ์ตœ์‹  ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ : ์•ฑ์ฒ˜๋Ÿผ ๋น ๋ฅธ ํ™”๋ฉด ์ „ํ™˜

๋‹จ์ : ์ดˆ๊ธฐ ๋กœ๋”ฉ์ด ๋А๋ฆฌ๊ณ , SEO์— ๋ถˆ๋ฆฌํ•จ


์ •๋ฆฌ

๊ตฌ๋ถ„SSRCSR
์ฒ˜๋ฆฌ ์œ„์น˜์„œ๋ฒ„ํด๋ผ์ด์–ธํŠธ
๋Œ€ํ‘œ ๊ธฐ์ˆ Thymeleaf, JSPReact, Vue
์ดˆ๊ธฐ ์†๋„๋น ๋ฆ„๋А๋ฆผ
ํ™”๋ฉด ์ „ํ™˜์ƒˆ๋กœ๊ณ ์นจ ๋ฐœ์ƒ๋ถ€๋“œ๋Ÿฌ์šด ์ „ํ™˜
SEO์œ ๋ฆฌ๋ถˆ๋ฆฌ
profile
๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ•œ ๊ฑธ์Œ

0๊ฐœ์˜ ๋Œ“๊ธ€