9osari.log
โ† ๋ชฉ๋ก์œผ๋กœ

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

2025๋…„ 3์›” 16์ผ ยท #network#web#spring#was

Web Server


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


Web Server ๋ž€?

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

Web Server ์˜ ๊ธฐ๋Šฅ


Web Server

WAS ๋ž€?

WAS ์˜ ๊ธฐ๋Šฅ

Web Server์™€ 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()์„ ๊ฑฐ์ณ ํ•„ํ„ฐ๋ฅผ ์ง€๋‚˜ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋จ.


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

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

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

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


Spring Boot์˜ ๊ฒฝ์šฐ


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

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

ยทยทยท
NEXT โ†’ [JAVA] JVM์˜ ๋™์ž‘์›๋ฆฌ