2 ๋ถ„ ์†Œ์š”

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐ŸŒปํƒ€๋ฏธ์˜ Servlet vs Spring ๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•จ.

์ •์˜

์„œ๋ธ”๋ฆฟ์ด๋ž€:

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋•Œ ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค

์Šคํ”„๋ง ์›น mvc

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์— ์žˆ๋Š” ๋ชจ๋“ˆ

MVC ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ์›น ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

์„œ๋ธ”๋ฆฟ์€ ์™œ ์ƒ๊ฒผ์„๊นŒ

Untitled

์ฒ˜์Œ์— ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ •์  ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ๋“ค์–ด์˜ค๋˜ htmlํŒŒ์ผ๋งŒ ๋ณด๋‚ผ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.

์ฆ‰,

  • ์‚ฌ์šฉ์ž(์š”์ฒญ)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค„ ์ˆ˜ ์—†๋‹ค.
  • ๋™์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—†์—ˆ๋‹ค.

Untitled

์ดํ›„ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ CGI์ด๋‹ค.

CGI (Common Gate Interface) ๋Š” ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๊ฒƒ์€ ๊ทœ์•ฝ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰ ์›น ์„œ๋ฒ„์™€ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์˜ ๊ทœ์•ฝ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

Untitled

์›น ์„œ๋ฒ„์™€ ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐ์ง“๋Š” ์ธํ„ฐํŽ˜์Šค, ๊ทœ์•ฝ์ด ๋ฐ”๋กœ CGI

Untitled

ํ•˜์ง€๋งŒ ์˜ค๋Š˜๋‚  ์•ˆ์“ฐ์ด๋Š”๋ฐ์—๋Š” ๋‹ค ์ด์œ ๊ฐ€ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์กด์žฌ

  1. ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์•„์•ผํ•œ๋‹ค.

โ†’ ๊ฐœ์„  : ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ชจ๋ธ๋กœ ๊ต์ฒด

  1. ๊ฐ™์€ ํƒ€์ž…์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋งค ๋ฆฌํ€˜์ŠคํŠธ(์“ฐ๋ ˆ๋“œ)๋งˆ๋‹ค ๊ตฌํ˜„์ฒด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด๋‚ธ๋‹ค. ์ฆ‰ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด ์•„๋‹ˆ๋‹ค.

โ†’ ๊ฐœ์„ : ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ํŒจํ„ด์—์„œ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์œผ๋กœ ๊ต์ฒด

์œ„ ๊ฐœ์„ ์ ๋“ค์„ ์ ์šฉํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์„œ๋ธ”๋ฆฟ์ด๋‹ค.

Untitled

๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๊ตฌํ˜„์ฒด ๊ฐ์ฒด๋„ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด.

Untitled

๋” ๋‚˜์•„๊ฐ€ ํ•œ๊ฐ€์ง€ ๋” ์ถ”๊ฐ€๋œ ๊ฒƒ์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์ด๋‹ค. ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

์›น ์ปจํ…Œ์ด๋„ˆ : ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธํ„ฐํŽ˜์ด์Šค์— ๋”ฐ๋ผ ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•œ๋‹ค.(์„œ๋ธ”๋ฆฟ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๋“ฑ๋“ฑ)

์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ

Untitled

์„œ๋ธ”๋ฆฟ์—๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋˜์–ด์žˆ๋‹ค.

Init Method: ์ƒ์„ฑ

Service Method: ์‹ค์ œ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰, Http๋ฉ”์†Œ๋“œ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์„œ๋ธ”๋ฆฟ ์›น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์š”์ฒญ์„ ๊ตฌํ˜„ ํ•ด์ค€๋‹ค.

Destroy Method: ์†Œ๋ฉธ์ž

๊ฐ๊ฐ์˜ ๋ฉ”์†Œ๋“œ๋“ค์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat) ์ด ํ˜ธ์ถœํ•ด์ค€๋‹ค

Untitled

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๋กœ์ปฌ ๋ณ€์ˆ˜๋“ค์€ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋”ฐ๋กœ ๊ด€๋ฆฌํ•จ์„ ์•Œ ์ˆ˜ ์ž‡๋‹ค.

์„œ๋ธ”๋ฆฟ์„ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๊ธฐ

Untitled

Web.xml: ์„ค์ •ํŒŒ์ผ์œผ๋กœ Url๊ณผ ๋งตํ•‘๋  ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์œ„์—์„œ๋Š” /member์— ํ•ด๋‹นํ•˜๋Š” Url์„ Servlets.MemberServlet๋กœ ๋งตํ•‘ํ• ๊ฒƒ์„ ๋ช…์‹œํ–ˆ๋‹ค.

MemberServlet: ์„œ๋ธ”๋ฆฟ ๊ตฌํ˜„์ฒด์ด๋‹ค.

๋ฆฌํ€˜์ŠคํŠธ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๊ณ , ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ ํ›„ result ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์€ vIew๋ฅผ ๋งŒ๋“ค์–ด์„œ Client์—๊ฒŒ ์ „์†กํ•˜๊ณ  ์žˆ๋‹ค.

Untitled

์ „์ฒด์ ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด Member, Line, Station ์ด ์„ธ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ url์„ web.xml์—์„œ ๋งตํ•‘ํ•˜๊ณ , ๊ฐ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋“ค์„ ํ†ตํ•ด ์„œ๋น„์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ view๋ฅผ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋œ๋‹ค.

์Šคํ”„๋ง ์›น MVC์—์„œ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

Dispatcher Servlet

Untitled

์Šคํ”„๋ง์€ Dispatcher Servlet์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์„œ๋ธ”๋ฆฟ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜์™€ ๊ฐ™์€ ๋‚ด์šฉ)

๋™์ž‘ ๊ณผ์ •

Untitled

์ฒ˜์Œ์— ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Dispatcher Servlet์œผ๋กœ ๊ฐ€๊ฒŒ ๋œ๋‹ค. Dispatcher Servlet๋„ ์—ญ์‹œ ์„œ๋ธ”๋ฆฟ์ด๊ธฐ ๋•Œ๋ฌธ์— Web.xml์— ๋“ฑ๋กํ•ด์ค˜์•ผํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ชจ๋“  ์š”์ฒญ์„ DispatcherServlet์œผ๋กœ ๋งตํ•‘ํ• ๊ฒƒ์œผ๋กœ ๋ช…์‹œํ•˜๊ณ  ์žˆ๋‹ค.

Untitled

์ดํ›„ Dispatcher Servlet์€ ์ „๋‹ฌ๋ฐ›์€ ์š”์ฒญ์„ HandlerMapping ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ์š”์ฒญ์— ๋งž๋Š” ์ ์ ˆํ•œ Controller๋ฅผ ์–ป์–ด์˜จ๋‹ค. ์ด๋•Œ, ์ ์ ˆํ•œ Controller๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์ œ๊ณต๋œ๋‹ค.

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” HandlerMapping ๋„ค๊ฐ€์ง€.

BeanNameHandlerMapping, ControllerClassNameHandlerMapping, SimpleUrlHandlerMapping, DefaultAnnotationHandlerMapping

์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ• ์ง€ ์ •ํ•œ ํ›„ ์„œ๋ธ”๋ฆฟ์˜ ์„ค์ • ํŒŒ์ผ์— ํ•ธ๋“ค๋Ÿฌ ๋งตํ•‘ ๋ฐฉ์‹์„ ์ง€์ •ํ•ดํ•œ๋‹ค.

์„œ๋ธ”๋ฆฟ์„ ๋“ฑ๋กํ•˜๋ฉด ๊ทธ ์„œ๋ธ”๋ฆฟ์ด ์‚ฌ์šฉํ•  ์„ค์ • ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ๋“ฑ๋ก๋˜๊ฒŒ ๋œ๋‹ค.

(/WEB-INF/servlet์ด๋ฆ„-servelet.xml)

(์ถ”๊ฐ€์ ์ธ ์„ค์ •ํŒŒ์ผ์„ ๋“ฑ๋กํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  1. BeanNameHandlerMapping

Untitled

Bean ๋ฐฉ์‹์€ default์„ค์ •์œผ๋กœ ๋˜์–ด์žˆ์–ด์„œ ๋”ฐ๋กœ ์ง€์ •ํ•  ํ•„์š”๋Š” ์—†๋‹ค.

  1. DefaultAnnotationHandlerMapping

Untitled

์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ๋งตํ•‘ ๋ฐฉ์‹์ด๋‹ค.

Untitled

Untitled

Untitled

VIew๊ฐ์ฒด๊นŒ์ง€ ๋ฐ›์•„์˜ค๋ฉด ๊ทธ์ œ์„œ์•ผ Dispatcher Servlet์€ ๋‹ค์‹œ response๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ณ  ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋‹ค์‹œ ๋ณด๋‚ด์ง„๋‹ค.

์„œ๋ธ”๋ฆฟ๊ณผ ์„œ๋ธ”๋ฆฟ์„ ์ด์šฉํ•˜๋Š” ์Šคํ”„๋ง ์›น MVC ์ฐจ์ด

Untitled

๊ธฐ์กด ์„œ๋ธ”๋ฆฟ์€ Url๋‹น ์„œ๋ธ”๋ฆฟ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•ด์•ผํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์Šคํ”„๋ง ์›น mvc์—์„œ๋Š” dispatcher servletํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.

์„œ๋ธ”๋ฆฟ์ด ์ƒ์„ฑ๋ ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ฐœ์ž๊ฐ€ web.xml์—์„œ ๋“ฑ๋กํ•ด์ฃผ๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์—ˆ์œผ๋‚˜,

์Šคํ”„๋ง ์›น mvc์—๋Š” ์„œ๋ธ”๋ฆฟ์ด ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฏ€๋กœ ๋“ฑ๋กํ•ด์ฃผ๊ณ  ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•Œ์•„์„œ ํ•ด์ค€๋‹ค.

Untitled

๋˜ํ•œ ๊ธฐ์กด์˜ ์„œ๋ธ”๋ฆฟ์€ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด์—์„œ ์ปจํŠธ๋กค๋Ÿฌ ๋กœ์ง, ์„œ๋น„์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ๋กœ์ง, view๊นŒ์ง€ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ–ˆ๋‹ค. J

ํ•˜์ง€๋งŒ ์Šคํ”„๋ง mvc๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ์ข€ ๋” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ