๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring/์›น

Servlet (์„œ๋ธ”๋ฆฟ์ด๋ž€? ๊ทธ๋ฆฌ๊ณ , Dispatcher Servlet์ด๋ž€ ? )

 

๐ŸŽจ What is Servlet? 

- JAVA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. (Servlet ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๊ทœ์น™์„ ์ง€์ผœ์•ผํ•ฉ๋‹ˆ๋‹ค.)

- ๋˜ํ•œ, ์ด๋Ÿฌํ•œ ์›น ๊ธฐ๋ฐ˜์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์—ญํ• ๋กœ์„œ Server Side์—์„œ ์ž‘๋™(WAS)ํ•ฉ๋‹ˆ๋‹ค.

- ์›น ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ ์‹œ, ์›น ํ™”๋ฉด(HTML)์€ JSP๋กœ ํ‘œํ˜„ํ•˜๊ณ , ๋ณต์žกํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์กฐํ™”๋กญ๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ•˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

- HttpServlet์ด๋ผ๋Š” Java์˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.

 

๐ŸŽจ Servlet Life Cycle

1. Servlet ๊ฐ์ฒด ์ƒ์„ฑ (1ํšŒ) 

2. init() ํ˜ธ์ถœ (1ํšŒ)

3. service(), doGet(), doPost() ํ˜ธ์ถœ (์š”์ฒญ์‹œ ๋งค๋ฒˆ)

4. destory() ํ˜ธ์ถœ (1ํšŒ)

 

 

๐ŸŽจ What is Servlet Container? 

- ์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ์„ ๋ฐ›๊ฑฐ๋‚˜ ๋‚ด๋ณด๋‚ผ ๋•Œ, ์ž์‹ ์ด ์•Œ์•„์„œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์ฃผ์ฒด์ธ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๊ฒƒ์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

- ์ฆ‰, Servlet์„ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” Servlet Container๋Š” ์–ด๋–ค ์š”์ฒญ์— ๋Œ€ํ•ด ์–ด๋–ค Servlet์„ ์‹คํ–‰ํ•  ๊ฒƒ์ธ์ง€ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด์ฃ .

- ๋” ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด,, ์„œ๋ธ”๋ฆฟ์ด ์›น์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

- ๋Œ€ํ‘œ์ ์ธ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฐ”๋กœ Tomcat (EJB์˜ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์ฃผ์ง€ ์•Š๋Š” Tomcat์„ ์™„์ „ํ•œ WAS๋ผ๊ณ  ๋ณด๊ธฐ์—” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.) ์ด์ฃ !

 

 

 

๐ŸŽจ Servlet ๋™์ž‘ ๊ณผ์ •

 

 

 

๐ŸŽจ๊ทธ๋ ‡๋‹ค๋ฉด, Dispatcher Servlet์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

 

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ์ฃผ๋ฉด, Servlet Container๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๋Š”๋ฐ์š”. ์ด๋•Œ ์ œ์ผ ์•ž์—์„œ ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”Front Controller๋ผ๋Š” ๊ฒƒ์„ Spring์—์„œ ์ •์˜ํ•˜์˜€๊ณ , ์ด๋ฅผ Dispatcher Servlet์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

- ๊ธฐ์กด์—๋Š” ๋ชจ๋“  Servlet์— ๋Œ€ํ•ด URL ๋งคํ•‘์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ web.xml์— ๋ชจ๋‘ ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ, dispatcher servlet์ด ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํ•ธ๋“ค๋งํ•ด์ฃผ๋ฉด์„œ ์ž‘์—…์˜ ํšจ์œจ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

(Spring Boot์—์„œ๋Š” @SpringBootApplication ์ด๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ web.xml ํŒŒ์ผ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

- ์ฆ‰, Controller๋กœ ํ–ฅํ•˜๋Š” ๋ชจ๋“  ์›น ์š”์ฒญ์˜ ์ง„์ž…์ ์œผ๋กœ์จ ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ Client์—๊ฒŒ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

- Dispatcher Servlet์„ ์ด์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” MVC ๋ชจ๋ธ์„ ์ด์šฉํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

๐ŸŽจ Dispathcer Servlet ๋™์ž‘ ๊ณผ์ •

 

ex) 

1. user/register์— ์š”์ฒญ์ด ์˜ค๋ฉด, Spring์˜ Dispatcher Servlet์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

2. Dispatcher Servlet์ด UserContoller์— ์žˆ๋Š” registerUser()๊ณผ ๊ฐ™์€ ์ ์ ˆํ•œ Method๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

3. ํ•ด๋‹น Method๋Š” @PostMapping('/user/register'), @RequestMapping(value="/user/register", Request.Method=Post) ์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜(Handler Mapping)์„ ๋ณด๊ณ  ์ฐพ์Šต๋‹ˆ๋‹ค.

4. ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ ๋‚˜์„œ ์ ์ ˆํ•œ view๋ฅผ Response ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐ŸŽจ Web ๋™์ž‘ ๊ณผ์ • 

์ถœ์ฒ˜ : taes-k.github.io/2020/02/16/servlet-container-spring-container/

Server start ๋‹จ๊ณ„

  1. Web server init
  2. Root WebApplicationContext ๋กœ๋”ฉ
  3. Web server start

Client ํ˜ธ์ถœ ๋‹จ๊ณ„

  1. Client -> Web server ์œผ๋กœ request ๋ณด๋ƒ„
  2. ๋™์  Web server -> Servlet container๋กœ ์ „๋‹ฌ
  3. Servlet container ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ
  4. DispatcherServlet init (์„œ๋ธ”๋ฆฟ ์ƒ์„ฑ ์•ˆ๋˜์–ด ์žˆ์„๊ฒฝ์šฐ)
  5. ์ƒ์„ฑ๋œ ์“ฐ๋ ˆ๋“œ์—์„œ DispatcherServlet service() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
  6. HandlerMapping์„ ํ†ตํ•ด ๋งคํ•‘ ์ปจํŠธ๋กค๋Ÿฌ ์กฐํšŒ
  7. HandlerAdapter๋ฅผ ํ†ตํ•ด ๋งคํ•‘ ์ปจํŠธ๋กค๋Ÿฌ์— request ์ „๋‹ฌ
  8. ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌํ˜„ํ•œ Controller -> Service -> Repository … ๋™์ž‘