[Spring MVC] ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ๋™์ž‘ ์›๋ฆฌ

2024. 11. 5. 01:12ยท๐Ÿ› ๏ธBackend/๐ŸŒณSpring

๋ชฉ์ฐจ

    โ—  1. ์›น ์„œ๋ฒ„ & ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„

    โ—  2. ์Šคํ”„๋ง๋ถ€ํŠธ ํ™˜๊ฒฝ ๋‚ด์žฅ ์„œ๋ฒ„

    โ—  1. ์›น ์„œ๋ฒ„๋ž€?


1. ์›น ์„œ๋ฒ„ & ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„

์ถœ์ฒ˜ : https://yozm.wishket.com/magazine/detail/1780/

์›น ์„œ๋ฒ„๋ž€?

1. HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์ฃผ๊ณ  ์ •์ ์ธ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

2. ์ •ํ™•ํžˆ๋Š”, ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ WAS์—์„œ ๋ฐ›์•„์„œ ํ•ด์„ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ž€?

1. ์›น ์„œ๋ฒ„๊ฐ€ ์กด์žฌํ•ด์•ผ์ง€๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„์ด๋ฉฐ, ๋™์ ์ธ ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ์„œ๋ฒ„์ด๋‹ค.

2. ๋™์ ์ธ ์ปจํ…์ธ ๋กœ๋Š” DB์กฐํšŒ๋‚˜ ๋‹ค์–‘ํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ ๋ฐ ๊ณ„์‚ฐ ๋“ฑ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ ์›น ์„œ๋ฒ„๋กœ ์ „๋‹ฌ์„ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


2. ์Šคํ”„๋ง๋ถ€ํŠธ ํ™˜๊ฒฝ ๋‚ด์žฅ ์„œ๋ฒ„

 

์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ์›น ์„œ๋ฒ„ & ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ํ•ฉ์นœ ์„œ๋ฒ„๋ฅผ ๋‚ด์žฅ ์„œ๋ฒ„์ธ "์•„ํŒŒ์น˜ ํ†ฐ์บฃ"์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์•„ํŒŒ์น˜ ์ œ๋‹จ์—์„œ ๋งŒ๋“  ์•„ํŒŒ์น˜ ์›น์„œ๋ฒ„์˜ ๊ธฐ์ˆ ๊ณผ ํ†ฐ์บฃ์ด๋ผ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๊ธฐ์ˆ ์„ ํ†ตํ•ฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ์„œ๋ฒ„์ด๋‹ค.

implementation 'org.springframework.boot:spring-boot-starter-web'

์Šคํ”„๋ง๋ถ€ํŠธ ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด web ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ๋˜๋ฉด ์ž๋™์ ์œผ๋กœ ์•„ํŒŒ์น˜ ํ†ฐ์บฃ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์•„ํŒŒ์น˜ ํ†ฐ์บฃ ๋‚ด์žฅ์„œ๋ฒ„๋Š” ์ž๋ฐ”์ฝ”๋“œ์ธ ๊ฒƒ์ด๋‹ค.

 

 


 

Tomcat์˜ ๊ตฌ์„ฑ ์š”์†Œ

 

 

 

๋”๋ณด๊ธฐ
๋‹ซ๊ธฐ

1. ServletContainer

Tomcat์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ, ์„œ๋ธ”๋ฆฟ์„ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” HTTP ์š”์ฒญ์„ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ , ์„œ๋ธ”๋ฆฟ์˜ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. Catalina ( ServletContainer ๊ตฌํ˜„์ฒด => Coyote๋ฅผ ํฌํ•จํ•˜๊ณ ์žˆ๋Š” ํ•ต์‹ฌ ๊ตฌํ˜„์ฒด )

Tomcat์˜ ServletContainer ๊ตฌํ˜„์ฒด๋กœ, ์‹ค์ œ๋กœ ์„œ๋ธ”๋ฆฟ API๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ด์ฃผ๋ฉฐ Coyote๋ฅผ ํฌํ•จํ•˜๊ณ ์žˆ๋‹ค. Catalina๋Š” ์„œ๋ธ”๋ฆฟ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด๋‹ค.

( ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ์„œ๋ธ”๋ฆฟ์˜ ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์†Œ๋ฉธ ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. )

2-1. Thread Pool ๊ด€๋ฆฌ

Thread Pool์˜ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹น์„ ํ•ด์ค€๋‹ค.

2-2. HTTP ์š”์ฒญ ํŒŒ์‹ฑ

์„ธ๋ถ€์ ์ธ ์—ญํ• ๋กœ๋Š” HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์š”์ฒญ ๋ผ์ธ, ํ—ค๋”, ๋ณธ๋ฌธ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•œ ๋’ค ์š”์ฒญ ๊ฐ์ฒด์ธ Request๊ฐ์ฒด์™€ Response๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋กœ๋Š” HTTP ๋ฉ”์„œ๋“œ์˜ ์ •๋ณด, ์š”์ฒญ URL, ํ—ค๋” ์ •๋ณด, ๋ณธ๋ฌธ ๋ฐ์ดํ„ฐ ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ์ด ๋œ๋‹ค.

๋˜ํ•œ, ์‘๋‹ต์— ๋Œ€ํ•ด์„œ๋„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ƒ์„ฑ๋œ HTTP ์‘๋‹ต ๊ฐ์ฒด์ธ Response๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ์‘๋‹ต ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊ทธ ์™ธ์—๋„ Servlet ๋งคํ•‘, HTTP ์‘๋‹ต์˜ ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.

3. Coyote ( ServletContainer ๊ตฌํ˜„์ฒด )

Coyote๋Š” ๋„คํŠธ์›Œํฌ ์ˆ˜์ค€์—์„œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ค‘๊ณ„ํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, HTTP ํ”„๋กœํ† ์ฝœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปค๋„ฅํ„ฐ๋กœ, ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ , ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

4. Jasper ( ServletContainer ๊ตฌํ˜„์ฒด )

JSP ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ, JSP๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

5. Thread Pool

Tomcat์€ ๋‚ด๋ถ€์ ์œผ๋กœ ์“ฐ๋ ˆ๋“œ ํ’€์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ํšจ์œจํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ HTTP ์š”์ฒญ์€ ์“ฐ๋ ˆ๋“œ ํ’€์—์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ž์› ๊ด€๋ฆฌ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋„๋ชจํ•ฉ๋‹ˆ๋‹ค.

* ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ ํ’€์„ ๊ด€๋ฆฌํ•˜๋Š”๊ฑด Catalina์ด๋‹ค.

 

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

1. ์„œ๋ธ”๋ฆฟ ํ”„๋กœ์ ํŠธ ์„œ๋ฒ„ ๊ตฌ๋™ ์‹œ์ 

์•„ํŒŒ์น˜ ํ†ฐ์บฃ์˜ ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ ์‹œํ‚ค๊ฒŒ ๋˜๋ฉด ServletContainer๊ฐ€ ๋œจ๊ฒŒ ๋˜๊ณ  ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—๋Š”

๊ธฐ์กด์˜ ์„ค์ • ํŒŒ์ผ๋กœ ์ •์˜๋ฅผ ํ•ด๋‘” Servlet์ด๋‚˜ ์• ๋„ˆํ…Œ์ด์…˜์œผ๋กœ ์ •์˜ํ•ด๋‘” Servlet์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ํ•ด๋‹น Servlet์„ init() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ServletContainer์— ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋กœ ๋ณด๊ด€์„ ํ•˜๊ฒŒ๋œ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ๋Š” xml๋ฐฉ์‹๊ณผ ์• ๋„ˆํ…Œ์ด์…˜์˜ ๋ฐฉ์‹์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

* xml๋ฐฉ์‹

์„œ๋ฒ„์˜ ๊ตฌ๋™ ์‹œ์ ์— xml ์„ค์ • ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ์ฝ์–ด ํ•ด๋‹น api ์—”๋“œํฌ์ธํŠธ์™€ Servlet์˜ ํด๋ž˜์Šค๋ช…์„ ๊ธฐ์žฌํ•จ์œผ๋กœ์จ ์„œ๋ฒ„๊ฐ€ ๋œฐ ๋•Œ

๋ฐ”๋กœ ServletContainer์— ํ•ด๋‹น Servlet์„ ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋กœ ๋ณด๊ด€ํ•˜๊ฒŒ ๋œ๋‹ค. 

 

* ์• ๋„ˆํ…Œ์ด์…˜ ๋ฐฉ์‹

์„œ๋ฒ„์˜ ๊ตฌ๋™์ด ๋๋‚˜๊ณ  ์š”์ฒญ์ด ๋“ค์–ด์™€ ํ•ด๋‹น Servlet์— ์—”๋“œํฌ์ธํŠธ๋ฅผ ์• ๋„ˆํ…Œ์ด์…˜ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์ฐพ๊ฒŒ ๋œ๋‹ค.

์ฐพ๊ฒŒ๋˜๋ฉด ํ•ด๋‹น ์• ๋„ˆํ…Œ์ด์…˜์€ ๊ทธ๋•Œ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์„ init()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ServletContainer์— ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค์–ด์ ธ 

๋ณด๊ด€์ด ๋˜๊ฒŒ ๋œ๋‹ค. ( ์ฆ‰, ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์š”์ฒญ์—๋Œ€ํ•ด ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ์„œ Container์— ๋“ฑ๋ก์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. )

 

์ด ์ฒ˜๋Ÿผ ๊ธฐ์กด ์„œ๋ธ”๋ฆฟ ํ”„๋กœ์ ํŠธ ๋ฐฉ์‹์€ api์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๊ฐ๊ฐ์˜ ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด Servlet์˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ค‘๋ณต์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค. ( ํ•ด๋‹น ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด SpringWebMVC์ด๋‹ค. )

 

2. ์„œ๋ธ”๋ฆฟ ํ”„๋กœ์ ํŠธ ์š”์ฒญ ์‹œ์ 

์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์•„ํŒŒ์น˜ ํ†ฐ์บฃ์€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ServletContainer์˜ ๋‚ด๋ถ€์˜ Thread Pool์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด ์ค„ Thread 1๊ฐœ๋ฅผ ํ• ๋‹น์„ ๋ฐ›์•„ ์š”์ฒญ์— ์•Œ๋งž๋Š” Servlet(Container ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค)์„ ์ฐพ์•„ request์™€ response ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ๋™์ž‘ ๋ฐฉ์‹ ( Spring Web MVC )

์Šคํ”„๋ง์€ DispatcherServlet์„ ํ†ตํ•ด ์œ„์˜ ์„œ๋ธ”๋ฆฟ ํ”„๋กœ์ ํŠธ์˜ ๊ณผ์ •์„ ๋ณด์™„ํ•˜๊ณ ์žˆ๋‹ค.

๊ธฐ์กด ์„œ๋ธ”๋ฆฟ ๋ฐฉ์‹์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์•„ํŒŒ์น˜ ํ†ฐ์บฃ ์„œ๋ฒ„๊ฐ€ ๋œฐ ๋•Œ ํ•ด๋‹น DispatcherServlet์„ ServletContainer์—

init() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋กœ ๋ณด๊ด€์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ ํ•ด๋‹น ์š”์ฒญ์„ ๋‹จ์ˆœํ•˜๊ฒŒ DispatcherServlet์„ ํ†ตํ•ด api ์—”๋“œํฌ์ธํŠธ์— ๋งž๋Š” Controller๋ฅผ ์ฐพ์•„ ๋งคํ•‘์„ ํ•˜๊ฒŒ ๋œ๋‹ค. Controller๋ฅผ ์ฐพ์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊ธฐ์กด ์„œ๋ธ”๋ฆฟ ํ”„๋กœ์ ํŠธ ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์„ ํ†ตํ•ด api ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

1. ์Šคํ”„๋ง๋ถ€ํŠธ ์„œ๋ฒ„๊ฐ€ ์ผœ์งˆ ๋•Œ ์‹œ์ 

์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ์ฒ˜์Œ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ๋‚ด๋ถ€์„œ๋ฒ„์˜ ๋™์ž‘์œผ๋กœ ServletContainer๊ฐ€ ๋œจ๊ฒŒ ๋˜๊ณ  ServletContainer ๊ตฌํ˜„์ฒด์ธ Coyote ์ปค๋„ฅํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์„ ์—ด์–ด ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ HTTP ์š”์ฒญ์„ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

// ๊ทธ ํ›„ ServletContainer๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ DispatcherServlet ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ํ•˜๋‚˜๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.

( SpringContainer๊ฐ€ Bean์„ ๋“ฑ๋กํ•˜์—ฌ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ๊ณผ ๋‘๊ฐœ ๋‹ค Container๋ผ๋Š” ์ ์„ ๋ณผ ๋•Œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์“ฐ์ด๋Š” Container๋ผ๋Š”๊ฑด ๊ฐ์ฒด๋ฅผ ํ•œ๊ฐœ๋งŒ ๊ฐ€์ง€๋Š” ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. )

 

2. ์Šคํ”„๋ง๋ถ€ํŠธ ์„œ๋ฒ„์— ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ

1. ์›น์œผ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด ์Šคํ”„๋ง๋ถ€ํŠธ ๋‚ด์žฅ ์„œ๋ฒ„์ธ ์•„ํŒŒ์น˜ํ†ฐ์บฃ์ด ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ฒŒ ๋œ๋‹ค.

2. ๋‚ด๋ถ€์— ๊ฐ€์ง€๊ณ ์žˆ๋Š” Thread Pool์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹น์„ ๋ฐ›์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋จ

3. ๋„˜์–ด์˜จ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ServletContainer๊ฐ€ ํŒŒ์‹ฑํ•˜์—ฌ HTTP ๋ฉ”์„œ๋“œ, URL, ํ—ค๋”, ๋ฐ”๋”” ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ HttpServletRequest์™€ HttpServletResponse๊ฐ์ฒด์— ๋‹ด๊ฒŒ ๋œ๋‹ค.

4. ์ดํ›„ service() ๋ฉ”์„œ๋“œ์— request์™€ response๋ฅผ ๋„ฃ์–ด ํ˜ธ์ถœ์„ ํ•˜๊ฒŒ๋˜๋ฉด DispatcherServlet์ด ํ˜ธ์ถœ์ด ๋œ๋‹ค.

5. DispacherServlet์€ ๋ฐ›์•„์˜จ request์™€ response์— ๋Œ€ํ•ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ํ›„ ServletContainer์— ์—ญ์ˆœ์œผ๋กœ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋œ๋‹ค.

6. ์‘๋‹ต์€ ๋‹ค์‹œ ServletContainer๊ฐ€ ๋ฐ›์•„ HTTP ๋ฉ”์‹œ์ง€๋กœ ๋งŒ๋“ค์–ด ์‘๋‹ต์„ ๋‹ค์‹œ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋œ๋‹ค.

 

* ์• ๋„ˆํ…Œ์ด์…˜ ๋ฐฉ์‹

์œ„์˜ ์„œ๋ธ”๋ฆฟ์˜ ์• ๋„ˆํ…Œ์ด์…˜ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๊ฒŒ Spring์€ ์• ๋„ˆํ…Œ์ด์…˜ ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ DispatcherServlet์„ ์š”์ฒญ ์‹œ์ ์— ์ƒ์„ฑ์„ ํ•ด์„œ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ฐ€์ง€๊ฒŒ๋œ๋‹ค. ( ์„œ๋ฒ„ ๊ตฌ๋™ ์‹œ์ ์— ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค!! )

์œ„์˜ ์š”์ฒญ๊ณผ์ •์—์„œ 4๋ฒˆ์˜ ์ฒซ ์š”์ฒญ์ด๋ผ๋ฉด init() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ DispatcherServlet์„ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋กœ ๋ณด๊ด€์„ 

์Šคํ”„๋ง๋ถ€ํŠธ์˜ ์„œ๋ธ”๋ฆฟ์€ ์• ๋„ˆํ…Œ์ด์…˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ 4๋ฒˆ์˜ ๊ณผ์ •์—์„œ ์„œ๋ฒ„๊ฐ€ ๋œฌ ํ›„ ์ฒ˜์Œ ์š”์ฒญ์ด ์˜ค๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์• ๋„ˆํ…Œ์ด์…˜๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ์š”์ฒญ์‹œ์ ์— DispathcerServlet์„ ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋กœ ๋“ฑ๋ก์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

( ์—ฌ๊ธฐ์„œ ์“ฐ์ด๋Š” ์• ๋„ˆํ…Œ์ด์…˜์€ ๋Ÿฐํƒ€์ž„์‹œ์ ์— ๋™์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. )

 

์Šคํ”„๋ง ์„œ๋ฒ„์— ์ฒ˜์Œ์œผ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ => init() -> dispatcherServlet

 

 

 

์ •๋ฆฌ

์•„ํŒŒ์น˜ ํ†ฐ์บฃ ๋‚ด๋ถ€์—๋Š” Thread Pool์ด ์กด์žฌํ•˜๋ฉฐ Thread Pool์— ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘” Thread ๊ฐฏ์ˆ˜๋งŒํผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค. ์š”์ฒญ์ด ํ•˜๋‚˜ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด Thread Pool์—์„œ Threadํ•˜๋‚˜๋ฅผ Pool์—์„œ ๊ฐ€์ง€๊ณ ์™€ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ ํ›„, ์š”์ฒญ์— ๋Œ€ํ•œ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ServletContainer๊ฐ€ ํŒŒ์‹ฑ์„ ํ•˜์—ฌ HttpServletRequest, HttpServletResponse  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํŒŒ์‹ฑ ๋œ

์š”์ฒญ์—๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  DispatcherServlet๊ฐ์ฒด๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ƒ์„ฑ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด service() ๋ฉ”์„œ๋“œ์— ์š”์ฒญ๊ณผ ์‘๋‹ต ์ •๋ณด๋ฅผ ๋„ฃ์–ด DispatcherServlet์— ์ „๋‹ฌ์„ ํ•ด์ฃผ๊ณ , ๋งŒ์•ฝ ์ƒ์„ฑ์ด ์•ˆ๋˜์–ด์žˆ๋‹ค๋ฉด ์ƒ์„ฑ์„ ํ•˜์—ฌ ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค์–ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

 

 

# ์˜ค๋Š˜์˜ ํšŒ๊ณ 

ํ†ฐ์บฃ๊ณผ ์„œ๋ธ”๋ฆฟ์„ ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€์„œ ๊ณต๋ถ€๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ๋งŽ์€ ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํŠนํžˆ ์›น ์„œ๋ฒ„์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์Šคํ”„๋ง์˜ ์„œ๋ธ”๋ฆฟ๊ณผ ๋ ˆ๊ฑฐ์‹œํ•œ ์„œ๋ธ”๋ฆฟ ํ”„๋กœ์ ํŠธ๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ๋‘๊ฐœ์˜ ์ฐจ์ด๋„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

XML ๋ฐฉ์‹๊ณผ ์• ๋„ˆํ…Œ์ด์…˜์˜ ๋ฐฉ์‹ ๋‘ ๊ฐ€์ง€์˜ ์„ค์ •์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

'๐Ÿ› ๏ธBackend > ๐ŸŒณSpring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Data JPA] JPA Entity ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ   (0) 2024.12.30
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ  (0) 2024.11.14
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ  (1) 2024.10.21
[Spring Framework] IoC & DI ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ  (0) 2024.10.20
[Spring Framework] Spring & Spring Framework ์ฐจ์ด  (0) 2024.10.19
'๐Ÿ› ๏ธBackend/๐ŸŒณSpring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring Data JPA] JPA Entity ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 
  • [Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ
  • [Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ
  • [Spring Framework] IoC & DI ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (155)
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (26)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
      • ๐Ÿ› ๏ธBackend (52)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (21)
        • ๐ŸŒณSpring (11)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Data Structure (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์ •๋ณด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํด๋ž˜์Šค
    ๋‹คํ˜•์„ฑ
    ์Šคํ”„๋ง
    ํด๋ผ์šฐ๋“œ
    Java
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    spring
    ๋ฐฉํ†ต๋Œ€
    ์ž…์ถœ๋ ฅ
    ํŒŒ์ด์ฌ
    ์ž๋ฐ”
    Spring Framework
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ๋ฐฉ์†ก๋Œ€
    Python
    ์„ธ๊ณ„ํ™”
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ์ปดํŒŒ์ผ๋Ÿฌ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[Spring MVC] ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ๋™์ž‘ ์›๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”