Post

[Network] Web๊ณผ WAS, ๊ทธ๋ฆฌ๊ณ  Spring ๐ŸŒฑ

[Network] Web๊ณผ WAS, ๊ทธ๋ฆฌ๊ณ  Spring ๐ŸŒฑ

Web Server


์›น ์„œ๋ฒ„์™€ WAS์˜ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ  Spring์˜ ์—ญํ• 


Web Server ๋ž€?

๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›๊ณ  ์š”์ฒญ์— ๋งž๋Š” ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

  • ์š”์ฒญ๊ฐ’์— ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์ฝ˜ํ…์ธ  ์ œ๊ณต (HTML, CSS, image)
  • ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์„œ๋น™ํ•˜๋Š” ์—ญํ• 

Web Server ์˜ ๊ธฐ๋Šฅ

  • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
  • ์ •์  ์ฝ˜ํ…์ธ  (HTML, CSS, JS, ์ด๋ฏธ์ง€) ์ œ๊ณต
  • ๋™์  ์ฝ˜ํ…์ธ  ์š”์ฒญ ์‹œ WAS์— ์ „๋‹ฌํ•˜์—ฌ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

Web Server

WAS ๋ž€?

  • DB์กฐํšŒ๋‚˜ ๋‹ค์–‘ํ•œ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ด ๋™์ ์ธ ์ปจํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ
  • ์ •์  ์ปจํ…์ธ ์™€ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ์ž๋‚˜ ์ธ์ž๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋ฉด ์ปจํ…์ธ  ๋‚ด์šฉ์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ

WAS ์˜ ๊ธฐ๋Šฅ

  • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ (๋Œ€๋ถ€๋ถ„์˜ WAS๋Š” Web Server ๋‚ด์žฅ)
  • ์š”์ฒญ์— ๋งž๋Š” ์ •์  ์ปจํ…์ธ (html, jpeg, css)๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • DB์กฐํšŒ๋‚˜ ๋‹ค์–‘ํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ๋™์  ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

Web Server์™€ WAS๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ 

  • ์ฑ…์ž„ ๋ถ„ํ• ์„ ํ†ตํ•œ ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. ์ฆ‰ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ(์—ฌ๋Ÿฌ๋Œ€์˜ WAS) ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ(๋Œ€๋ฆฌ์ž)๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์„œ๋ฒ„๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

Spring ์š”์ฒญ ์ฒ˜๋ฆฌ ํ๋ฆ„

Spring Request Flow

  1. ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €) โ†’ WAS(Tomcat)
    ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์š”์ฒญ์ด WAS๋กœ ์ „๋‹ฌ๋œ๋‹ค.
    WAS๋Š” ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.

  2. WAS(Tomcat) โ†’ Filter โ†’ Servlet Container
    ์š”์ฒญ์„ ํ•„ํ„ฐ๊ฐ€ ๊ฐ€๋กœ์ฑ„ ๋ณด์•ˆ, ์ธ์ฆ, ์š”์ฒญ/์‘๋‹ต ์ˆ˜์ • ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    ํ•„ํ„ฐ๋ฅผ ํ†ต๊ณผํ•œ ์š”์ฒญ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

  3. ์„œ๋ธ”๋ฆฟ ์‹คํ–‰
    ์„œ๋ธ”๋ฆฟ์ด ์š”์ฒญ์„ ๋ฐ›์•„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ , DB ์กฐํšŒ ๋ฐ ๋กœ์ง ์ฒ˜๋ฆฌ๋กœ ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค.

  4. Servlet Container โ†’ ํ•„ํ„ฐ โ†’ WAS โ†’ ํด๋ผ์ด์–ธํŠธ
    ์‘๋‹ต์€ ๋‹ค์‹œ ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์ณ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๋กœ ์ „๋‹ฌ๋œ๋‹ค.
    ํ•„ํ„ฐ๋Š” ์‘๋‹ต์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋กœ๊น…ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


2025-04-04 ์ถ”๊ฐ€
์‹ค๋ฌด์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ดํ•ด

  1. WAR ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ
    maven package ๋ช…๋ น์œผ๋กœ .war ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ ,
    ์‚ฌ์šฉ ์ค‘์ธ WAS(Tomcat ๋“ฑ)์˜ ์„ค์ •์— ๋”ฐ๋ผ ์ง€์ •๋œ ๋ฐฐํฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•˜๋ฉด ์ž๋™์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐฐํฌ๋˜๊ณ  ์‹คํ–‰๋จ. (Tomcat์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ /webapps ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜)

  2. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ โ†’ WAS ์ง„์ž…
    ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์€ ๋จผ์ € WAS(Tomcat) ๊ฐ€ ๋ฐ›์Œ.

  3. Filter ์ฒ˜๋ฆฌ
    ๋“ฑ๋ก๋œ javax.servlet.Filter ๋“ค์ด ์‹คํ–‰๋˜์–ด ๊ณตํ†ต ์ž‘์—…(CORS, ๋กœ๊น… ๋“ฑ)์„ ์ˆ˜ํ–‰.

  4. DispatcherServlet ์ง„์ž…
    ํ•„ํ„ฐ๋ฅผ ํ†ต๊ณผํ•œ ์š”์ฒญ์€ DispatcherServlet์œผ๋กœ ์ „๋‹ฌ๋จ.
    Spring MVC์˜ ํ•ต์‹ฌ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์ด๋ฉฐ WAR ์•ˆ์— ํฌํ•จ๋จ.

  5. ์ธํ„ฐ์…‰ํ„ฐ(HandlerInterceptor) ๋™์ž‘
    preHandle()์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์ฒดํฌ, ๊ถŒํ•œ ํ™•์ธ ๋“ฑ์„ ์ฒ˜๋ฆฌ.

  6. Controller โ†’ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰
    ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰(Service โ†’ DB ๋“ฑ).

  7. ์‘๋‹ต ๋ฐ˜ํ™˜ ์ฒ˜๋ฆฌ
    ์‘๋‹ต์€ ๋‹ค์‹œ ์ธํ„ฐ์…‰ํ„ฐ์˜ postHandle(), afterCompletion()์„ ๊ฑฐ์ณ ํ•„ํ„ฐ๋ฅผ ์ง€๋‚˜ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋จ.


์ตœ์ข… ํ๋ฆ„ ์š”์•ฝ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ]                     โ† ์†๋‹˜์ด ์‹๋‹น์— ๋ฐฉ๋ฌธ
   โ†“
[WAS - Filter]                       โ† ์ž…๊ตฌ์—์„œ ๋งˆ์Šคํฌ๋‚˜ ๋ณต์žฅ ํ™•์ธ
   โ†“
[DispatcherServlet (war ์„œ๋ธ”๋ฆฟ ์•ˆ)] โ† ์›จ์ดํ„ฐ์—๊ฒŒ ์ฃผ๋ฌธ ์ „๋‹ฌ
   โ†“
[Interceptor - preHandle()]         โ† ์›จ์ดํ„ฐ๊ฐ€ ๋‹จ๊ณจ ์—ฌ๋ถ€ ํ™•์ธ, ์ฃผ๋ฌธ ๊ฐ€๋Šฅ ํ™•์ธ
   โ†“
[Controller โ†’ Service โ†’ DB]        โ† ์š”๋ฆฌ์‚ฌ(Controller)๊ฐ€ ์ฃผ๋ฐฉ์—์„œ ์š”๋ฆฌ(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง) ์ง„ํ–‰
   โ†‘
[Interceptor - postHandle(), afterCompletion()] โ† ์›จ์ดํ„ฐ๊ฐ€ ์Œ์‹ ์ƒํƒœ ํ™•์ธ, ๊ธฐ๋ก ํ›„ ์„œ๋น™
   โ†‘
[Filter ์‘๋‹ต ํ›„์ฒ˜๋ฆฌ]               โ† ์›จ์ดํ„ฐ๊ฐ€ ์Œ์‹ ์„œ๋น™ ์งํ›„ ์ •๋ฆฌ, ๊ธฐ๋ก
   โ†‘
[ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต ๋„์ฐฉ]              โ† ์†๋‹˜์ด ์Œ์‹ ๋ฐ›๊ณ  ์‹๋‹น ๋‚˜๊ฐ

Servlet Container์™€ Spring๐ŸŒฑ ์˜ ๊ด€๊ณ„

  • Servlet Container๋Š” ์„œ๋ธ”๋ฆฟ(Servlet)๊ณผ JSP๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณต
  • Spring์€ ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ, Servlet Container ์œ„์—์„œ ์‹คํ–‰๋จ
  • Spring MVC์˜ ํ•ต์‹ฌ์ธ DispatcherServlet๋„ ๊ฒฐ๊ตญ ์„œ๋ธ”๋ฆฟ์ž„

์ฆ‰, Spring์ด ๋™์ž‘ํ•˜๋ ค๋ฉด Servlet Container๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, Spring ์ž์ฒด๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.


Spring Boot์˜ ๊ฒฝ์šฐ

  • Spring Boot๋Š” Tomcat, Jetty, Undertow ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด ๋ณ„๋„์˜ WAS ์„ค์น˜๊ฐ€ ํ•„์š” ์—†๋‹ค.

๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

Web ์„œ๋ฒ„, WAS, ๊ทธ๋ฆฌ๊ณ  Spring์˜ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋‹ค.
์Œค์€ Spring์˜ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ข€ ๋” ๊นŠ๊ฒŒ ์•Œ์•„๋ณด๋ผ ์กฐ์–ธํ•˜๊ณ  ๋”ฐ๋กœ ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค.
๋‹ค์Œ์—๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ์•Œ์•„๋ณด๊ณ  ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Trending Tags