๐Ÿ“—Spring MVC Study [ WEB SERVER, WAS, SERVLET ]

Caruhยท2025๋…„ 3์›” 13์ผ

Spring MVC

๋ชฉ๋ก ๋ณด๊ธฐ
1/17
post-thumbnail

์›น ์„œ๋ฒ„ (Web Server)

  • Http ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘
  • ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต, ๊ธฐํƒ€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ
  • ์ •์  ๋ฆฌ์†Œ์Šค๋ž€?
    • ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”, ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ํŒŒ์ผ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.)
    • ์ฆ‰ ๋‚ด์šฉ์ด ๊ณ ์ •๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋Š” ์ž์›์„ ๋งํ•œ๋‹ค.
    • ์›น ๊ฐœ๋ฐœ์—์„œ์˜ ์˜ˆ์‹œ
      • HTMLํŒŒ์ผ, CSSํŒŒ์ผ, JSํŒŒ์ผ, ImageํŒŒ์ผ, PDF ํŒŒ์ผ ๋“ฑ์ด ์žˆ๋‹ค.
  • ์›น ์„œ๋ฒ„์—๋Š” nginx, apache ๋“ฑ์ด ์žˆ์Œ.

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (Web Application Server, WAS)

  • Http ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘
  • ์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จ + ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต ๊ธฐ๋Šฅ
  • ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ˆ˜ํ–‰
    • ๋™์  HTML, HTTP API (JSON)
    • ์„œ๋ธ”๋ฆฟ, JSP, ์Šคํ”„๋ง MVC
  • WAS์—๋Š” Tomcat, Jetty, Undertow ๋“ฑ์ด ์žˆ๋‹ค.

Web Server, WAS ์ฐจ์ด์ 

  • ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฆฌ์†Œ์Šค(ํŒŒ์ผ), WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง
  • ์‚ฌ์‹ค ๋‘˜์˜ ์šฉ์–ด๋„ ๊ฒฝ๊ณ„๋„ ๋ชจํ˜ธํ•˜๋‹ค.
    • ์›น ์„œ๋ฒ„๋„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ธฐ๋„ ํ•จ
    • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋„ ์›น ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ
  • ์ž๋ฐ”๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด WAS
    • ์„œ๋ธ”๋ฆฟ ์—†์ด ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์žˆ๋‹ค.
  • WAS๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ๋” ํŠนํ™” ๋˜์–ด์žˆ๋‹ค.
๊ตฌ๋ถ„WebserverWAS
์ฒ˜๋ฆฌ ๋Œ€์ƒ์ •์  ์ฝ˜ํ…์ธ  (HTML, ์ด๋ฏธ์ง€ ๋“ฑ)๋™์  ์ฝ˜ํ…์ธ  + ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
๊ธฐ๋Šฅ๋‹จ์ˆœ ์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ฐ ๊ด€๋ฆฌ
๋ณต์žก์„ฑ์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœ๋ณต์žกํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
์˜ˆ์‹œ ์†Œํ”„ํŠธ์›จ์–ดNginx, Apache HTTP ServerTomcat, WebSphere
์‚ฌ์šฉ ๋ชฉ์ ๋น ๋ฅธ ์ •์  ํŒŒ์ผ ์ œ๊ณต์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์šด์˜

์›น ์‹œ์Šคํ…œ ๊ตฌ์„ฑ - WAS, DB

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

์›น ์‹œ์Šคํ…œ ๊ตฌ์„ฑ - WEB, WAS, DB

  • ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
    • ์ •์  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉด Web ์„œ๋ฒ„ ์ฆ์„ค
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉด WAS ์ฆ์„ค
  • ์ •์  ๋ฆฌ์†Œ์Šค๋งŒ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋ฒ„๋Š” ์ž˜ ์ฃฝ์ง€ ์•Š๋Š”๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์ด ๋™์ž‘ํ•˜๋Š” WAS ์„œ๋ฒ„๋Š” ์ž˜ ์ฃฝ์Œ
  • WAS, DB ์žฅ์• ์‹œ WEB ์„œ๋ฒ„๊ฐ€ ์˜ค๋ฅ˜ ํ™”๋ฉด ์ œ๊ณต ๊ฐ€๋Šฅ
    • WAS + DB ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š” ์›น ์‹œ์Šคํ…œ์€ WAS ์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๋„ ๋ณด์—ฌ์ฃผ์ง€ ๋ชปํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

  • ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์•ž์— ๋‘๊ณ , ๋™์  ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฉด WAS๋กœ ๋„˜๊ธฐ๊ณ  DB์— ์ ‘๊ทผํ›„ ๋‹ค์‹œ ์—ญ์ˆœ์œผ๋กœ ๋™์ž‘
  • ์›น ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ๊ฐ™์€ ๋™์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด WAS์— ์š”์ฒญ์„ ์œ„์ž„
  • WAS๋Š” ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง ์ฒ˜๋ฆฌ ์ „๋‹ด

  • REST API์™€๊ฐ™์ด ํšŒ์‚ฌ ๊ฐ„์˜ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋งŒ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒฝ์šฐ์—๋Š” WAS + DB ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ๋ฆฌํ•˜๋‹ค.

์„œ๋ธ”๋ฆฟ ์ด์ „

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์„œ๋ธ”๋ฆฟ์ด ๋„์ž…๋˜๊ณ  ๋‚œ ํ›„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‹คํ–‰ ๋ถ€๋ถ„์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์„œ๋ธ”๋ฆฟ์ด ๋Œ€์‹ ํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค.

์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์—…๋ฌด

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์ง์ ‘ ๊ตฌํ˜„

์„œ๋ธ”๋ฆฟ (Servlet)

์„œ๋ธ”๋ฆฟ ์ด๋ž€?

  • ์„œ๋ธ”๋ฆฟ์€ JAVA๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋™์ ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ (EX:์›น ๋ธŒ๋ผ์šฐ์ €)์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ์€ Java EE(Java Enterprise Edition)์˜ ์ผ๋ถ€๋กœ, HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ํŠนํ™”๋˜์–ด ์žˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ๋™์ž‘ ๋ฐฉ์‹

Http ์š”์ฒญ, ์‘๋‹ต ํ๋ฆ„

  • Http ์š”์ฒญ, ์‘๋‹ต ํ๋ฆ„
  • Http ์š”์ฒญ ์‹œ
    • was๋Š” request, response ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด ํ˜ธ์ถœ
    • ๊ฐœ๋ฐœ์ž๋Š” request ๊ฐ์ฒด์—์„œ http ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊บผ๋‚ด์„œ ์‚ฌ์šฉ
    • ๊ฐœ๋ฐœ์ž๋Š” response ๊ฐ์ฒด์— http ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž…๋ ฅ
    • was๋Š” response ๊ฐ์ฒด์— ๋‹ด๊ฒจ์žˆ๋Š” ๋‚ด์šฉ์œผ๋กœ http ์‘๋‹ต ์ •๋ณด๋ฅผ ์ƒ์„ฑ

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ Servlet Container

  • ํ†ฐ์บฃ ์ฒ˜๋Ÿผ ์„œ๋ธ”๋ฆฟ์„ ์ง€์›ํ•˜๋Š” was๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•œ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ์˜ฌ ๋•Œ ๋งˆ๋‹ค ๊ณ„์† ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ
    • ์ตœ์ดˆ ๋กœ๋”ฉ ์‹œ์ ์— ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ณ  ์žฌํ™œ์šฉ
    • ๋ชจ๋“  ๊ณ ๊ฐ ์š”์ฒญ์€ ๋™์ผํ•œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผ
    • ๊ณต์œ  ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ฃผ์˜ -> ๊ณต์œ ๋ณ€์ˆ˜๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ์„ ํ–ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์ด ๋ณด์ด๋Š” ๋“ฑ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ. > ๊ทธ๋Ÿฌ๋‹ˆ ์ฃผ์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ž
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ์‹œ ํ•จ๊ป˜ ์ข…๋ฃŒ

๐Ÿ“ญ Reference

profile
Backend Developer

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