Spring๐Ÿ€

spring MVC(๋ชจ๋ธ2, DispatcherServlet) ์ •๋ฆฌ

@ENFJ 2022. 10. 20. 21:52

์Šคํ”„๋ง MVC ๋Š” ๋ชจ๋ธ2 ๋ฐฉ์‹ ๊ตฌ์กฐ๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ชจ๋ธ2 ๋ฐฉ์‹์€ ๋ญ˜๊นŒ?  = > ๋ชจ๋ธ2: ์›น ๊ฐœ๋ฐœ์‹œ ๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๐Ÿ™„๋ชจ๋ธ2๊ฐ€ ๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ ๋งŒ ํ•˜๋‹ˆ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ„๋‹ค. 

์ฐพ์•„๋ณด๋‹ˆ => ํ™”๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” View ์ ์ธ ๋ถ€๋ถ„๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•œ๊ฒƒ์œผ๋กœ

๋””์ž์ด๋„ˆ , ๊ฐœ๋ฐœ์ž๋ฅผ ๋ถ„๋ฆฌ ์‹œ์ผœ์„œ ์ž‘์—…ํ•˜๊ธฐ ํŽธํ•˜๊ณ , ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

๋งŒ์•ฝ์— ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์—์„œ ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค๋ฉด ๋งค์šฐ ์„œ๋กœ์„œ๋กœ ๋ถˆํŽธํ• ๊ฒƒ์ด๋‹ค.

 

๋ชจ๋ธ 2๋ฐฉ์‹์ธ MVC์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž 

MVC ๋Š” ๋ชจ๋ธ(model), ๋ทฐ(view), ์ปจํŠธ๋กค๋Ÿฌ(Controller) ์ด๋ฉฐ,

๋ชจ๋ธ: ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„

๋ทฐ : ํ™”๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„

์ปจํŠธ๋กค๋Ÿฌ: ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋ทฐ์™€ <->๋ชจ๋ธ ์‚ฌ์ด์˜ ํ†ต์‹  ์—ญํ• ์„ ํ•œ๋‹ค.

 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ชจ๋ธ 2๋ฐฉ์‹ ํŒจํ„ด์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ , ์š”์ฒญ์— ๋Œ€ํ•œ ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋ธ์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค. ํ˜ธ์ถœ๋œ ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ›„, ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต(๊ฒฐ๊ณผ)๋ฅผ ๋ณด๋‚ด๊ณ  ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ทฐ์—๊ฒŒ ์ „์†กํ•˜๋Š” ์›๋ฆฌ์ด๋‹ค.

 

 

๋” ๊ตฌ์ฒด์ ์ธ ์„ค๋ช… (์ฐธ๊ณ . ๊ตฌ๊ธ€๋ง์ค‘ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•œ ๋ธ”๋กœ๊ทธ๊ฐ€ ์žˆ์–ด์„œ ์ฝ์œผ๋ฉด์„œ ํ•œ๋ฒˆ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. ํ•ด๋‹น๋ธ”๋กœ๊ทธ ์ฃผ์†Œ:min-it.tistory.com )

์œ„ ์‚ฌ์ง„์€ Spring MVC DispatcherServlet ์„ ์ด์šฉํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

1. ํด๋ผ์ด์–ธํŠธ ์ฆ‰ ์‚ฌ์šฉ์ž์˜ ๋ชจ๋“  ์š”์ฒญ์„ Front Controller ์ธ Dispatcher Servlet ์ด ๋ฐ›์Šต๋‹ˆ๋‹ค.

*Front Controller์€ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค.

2. DispatcherServlet์€ handlerMapping (ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘)์„ ํ†ตํ•ด์„œ ์š”์ฒญ์— ํ•ด๋‹นํ•˜๋Š” Controller๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•˜์ง€๋งŒ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ด ์š”์ฒญ๋ฐ›์€ ์ผ์„ ์ˆ˜ํ–‰ํ• ์ง€๋Š” ํ•ธ๋“ค๋Ÿฌ๋งคํ•‘ ์ด๋ผ๋Š” ๋…€์„์„ ์ด์šฉํ•˜๋Š”๊ฑฐ์ฃ .

3. controller๋Š” ์ ์ ˆํ•œ ์„œ๋น„์Šค ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. 

4. Service๋Š” DB์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด DAO๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

5. DAO๋Š” mybatis๋ฅผ ์ด์šฉํ•˜๋Š” Mapper๋ฅผ ํ†ตํ•ด ์ž‘์—…์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

6. ์ด์ œ DAO๊ฐ€ ์‹ค์ œ db์™€์˜ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‚œํ›„ ์—ญ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ(๊ฒฐ๊ณผ)๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

mapper(mybatis) - > DAO -> Service -> Controller ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

7. Controller๋Š” ์ „๋‹ฌ๋œ ๊ฒฐ๊ณผ(์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ)๋ฅผ View Resolver๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ ๋ฐ›์„ ๋ทฐ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

8. ์ „๋‹ฌ๋ฐ›์„ ๋ทฐ๊ฐ€ ์žˆ๋‹ค๋ฉด view์—๊ฒŒ ๊ฒฐ๊ณผ(์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ)๋ฅผ ์ „๋‹ฌํ•ด์ค๋‹ˆ๋‹ค.

9. view๋Š” ์ „๋‹ฌ๋ฐ›์€ ๊ฒฐ๊ณผ(์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‹ค์‹œ dispatcherServlet์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ 

10. DispatcherServlet์€ ์ „๋‹ฌ๋ฐ›์€ ๊ฒฐ๊ณผ(์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ)๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

 

+ ์–ด๋…ธํ…Œ์ด์…˜ ์ •๋ฆฌ 

@์• ๋…ธํ…Œ์ด์…˜๋ช… - ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋Š”๊ณณ

 

@Controller - ํด๋ž˜์Šค

-์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด์ž„์„ ๋ช…์‹œ

 

@RequestMapping -ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ

-ํŠน์ • URL์— ๋งค์นญ๋˜๋Š” ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ์ž„์„ ๋ช…์‹œ

 

@RequestParam -ํŒŒ๋ผ๋ฏธํ„ฐ

-์š”์ฒญ์—์„œ ํŠน์ •ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ์ฐพ์•„๋‚ผ ๋•Œ ์‚ฌ์šฉ

 

@RequestHeader -ํŒŒ๋ผ๋ฏธํ„ฐ

-์š”์ฒญ์—์„œ ํŠน์ • HTTP ํ—ค๋” ์ •๋ณด๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉ

 

@PathVariable -ํŒŒ๋ผ๋ฏธํ„ฐ

-ํ˜„์žฌ URL์—์„œ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉ

 

@CookieValue -ํŒŒ๋ผ๋ฏธํ„ฐ

-ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜์ฟ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ฟ ํ‚ค์˜ ์ด๋ฆ„์„ ์ด์šฉํ•ด์„œ ์ฟ ํ‚ค๊ฐ’ ์ถ”์ถœ

 

@ModelAttribute -๋ฉ”์†Œ๋“œ, ํŒŒ๋ผ๋ฏธํ„ฐ

-์ž๋™์œผ๋กœ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ทฐ๊นŒ์ง€ ์ „๋‹ฌํ•˜๋„๋ก ๋งŒ๋“  ๊ฒƒ

 

@SessionAttribute -ํด๋ž˜์Šค

-์„ธ์…˜์ƒ์—์„œ ๋ชจ๋ธ์˜ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

 

@InitBinder -๋ฉ”์†Œ๋“œ

-ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด์„œ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ๊ฒฝ์šฐ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

 

@ResponseBody -๋ฉ”์†Œ๋“œ,๋ฆฌํ„ดํƒ€์ž…

-๋ฆฌํ„ด ํƒ€์ž…์ด HTTP์˜ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋กœ ์ „์†ก

 

@RequsetBody -ํŒŒ๋ผ๋ฏธํ„ฐ

-์š”์ฒญ ๋ฌธ์ž์—ด์ด ๊ทธ๋Œ€๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ

 

@Repository -ํด๋ž˜์Šค

-DAO ๊ฐ์ฒด

 

@Service - ํด๋ž˜์Šค

-์„œ๋น„์Šค ๊ฐ์ฒด