Spring

[Spring] Dispatcher Servlet

jeong_ii 2024. 12. 6. 00:14

๐Ÿ”น Dispatcher Servlet ์ด๋ž€ ?

Dispatcher Servlet์˜ dispatch๋Š” "๋ณด๋‚ด๋‹ค"๋ผ๋Š” ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋Š” Dispatcher Servlet์€ HTTP ํ”„๋กœํ† ์ฝœ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›์•„ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์œ„์ž„ํ•ด ์ฃผ๋Š” ํ”„๋ŸฐํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller)๋ผ๊ณ  ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Dispatcher Servlet์€ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด URI์— ๋งž๋Š” ํ•ธ๋“ค๋Ÿฌ์™€ ๋ทฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด "/posts/save"์˜ URI ์ฃผ์†Œ๋กœ GET ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด Dispatcher Servlet์€ ์•„๋ž˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ์ž‘์—…์„ ์œ„์ž„ํ•œ๋‹ค.

@GetMapping("posts/save")
public String save() {
	return "posts-save";
}

 

์ด๋•Œ, ํ”„๋ŸฐํŠธ  ์ปจํŠธ๋กค๋Ÿฌ(Front Controller)๋Š” ์ฃผ๋กœ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ œ์ผ ์•ž์—์„œ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด ์ฃผ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ์„œ, MVC ๊ตฌ์กฐ์—์„œ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

 

 

๐Ÿ”น Dispatcher Servlet ์žฅ์ 

Spring MVC๋Š” Dispatcher Servlet์ด ๋“ฑ์žฅํ•จ์— ๋”ฐ๋ผ web.xml์˜ ์—ญํ• ์„ ์ƒ๋‹นํžˆ ์ถ•์†Œ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

๊ณผ๊ฑฐ์— ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์„ URL ๋งคํ•‘์„ ์œ„ํ•ด web.xml์— ๋ชจ๋‘ ๋“ฑ๋กํ•ด ์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ,

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

์šฐ๋ฆฌ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•ด๋‘๊ธฐ๋งŒ ํ•˜๋ฉด Dispatcher Servlet์ด ์•Œ์•„์„œ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ„์ž„์„ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

 

๐Ÿ”น ์ •์  ์ž์›(Static Resources) ์ฒ˜๋ฆฌ

Dispatcher Servlet์ด ์š”์ฒญ์„ ์ปจํŠธ๋กค๋Ÿฌ์— ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์€ ํšจ์œจ์ ์œผ๋กœ ๋ณด์ธ๋‹ค.

ํ•˜์ง€๋งŒ Dispatcher Servlet์ด ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋‹ค ๋ณด๋‹ˆ ์ด๋ฏธ์ง€๋‚˜ HTML, CSS, JavaScript ๋“ฑ๊ณผ ๊ฐ™์€ ์ •์  ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์ฒญ๋งˆ์ € ๋ชจ๋‘ ๊ฐ€๋กœ์ฑ„๊ธฐ ๋•Œ๋ฌธ์— ์ •์  ์ž์›์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ๋„ ๋ฐœ์ƒํ•˜๊ณค ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. ์ •์  ์ž์› ์š”์ฒญ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ์„ ๋ถ„๋ฆฌ

2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ์„ ํƒ์ƒ‰ํ•˜๊ณ  ์—†์œผ๋ฉด ์ •์  ์ž์› ์š”์ฒญ์œผ๋กœ ์ฒ˜๋ฆฌ

 

[ ์ •์  ์ž์› ์š”์ฒญ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ์„ ๋ถ„๋ฆฌ ]

์œ„ ๋ฐฉ๋ฒ•์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ 2๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

1. /apps์˜ URL๋กœ ์ ‘๊ทผํ•˜๋ฉด Dispatcher Servlet์ด ๋‹ด๋‹นํ•œ๋‹ค.

2. /resources์˜ URL๋กœ ์ ‘๊ทผํ•˜๋ฉด Dispatcher Servlet์ด ์ปจํŠธ๋กคํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋‹ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

ํ•ด๋‹น ๋ฐฉ์‹์€ ์ฝ”๋“œ๊ฐ€ ์ƒ๋‹นํžˆ ์ง€์ €๋ถ„ํ•ด์ง€๋ฉฐ, ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ์œ„์™€ ๊ฐ™์€ URL์„ ๋ถ™์—ฌ์ค˜์•ผ ํ•˜๋ฏ€๋กœ ์ง๊ด€์ ์ธ ์„ค๊ณ„๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์— ํ•œ๊ณ„๋ฅผ ๋А๋ผ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ๊ณ ์•ˆ๋˜์—ˆ๋‹ค.

 

[ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ์„ ํƒ์ƒ‰ํ•˜๊ณ  ์—†์œผ๋ฉด ์ •์  ์ž์› ์š”์ฒญ์œผ๋กœ ์ฒ˜๋ฆฌ ]

์œ„ ๋ฐฉ๋ฒ•์€ Dispatcher Servlet์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋จผ์ € ์ฐพ๊ณ ,

์š”์ฒญ์— ๋Œ€ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, 2์ฐจ์ ์œผ๋กœ ์„ค์ •๋œ ์ž์› ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์ž์›์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ์˜์—ญ์„ ๋ถ„๋ฆฌํ•˜๋ฉด ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•  ๋ฟ ์•„๋‹ˆ๋ผ ์ถ”ํ›„ ํ™•์žฅ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

๐Ÿ”น Dispatcher Servlet ๋™์ž‘ ๋ฐฉ์‹

Dispatcher Servlet์€ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„ ์š”์ฒญ์„ ์œ„์ž„ํ•ด์•ผ ํ•œ๋‹ค.

Dispatcher Servlet์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

[ ๋™์ž‘ ๋ฐฉ์‹ ]

1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ Dispatcher Servlet์ด ๋ฐ›๋Š”๋‹ค.

2. ์š”์ฒญ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์œ„์ž„ํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๋Š”๋‹ค.

3. ์š”์ฒญ์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ„์ž„ํ•  ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ฐพ์•„์„œ ์ „๋‹ฌํ•œ๋‹ค.

4. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์š”์ฒญ์„ ์œ„์ž„ํ•œ๋‹ค.

5. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

6. ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

7. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

8. ์„œ๋ฒ„์˜ ์‘๋‹ต ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์œ„์™€ ๊ฐ™์€ ํ๋ฆ„์„ ๊ฐ€์ง€๋ฉฐ,

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด Dispatcher Servlet์„ ํ†ตํ•ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„์„œ ์œ„์ž„ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.



 

 

 

๐Ÿ“ƒ reference