Spring์˜ Dispatcher Servlet

2024. 1. 26. 20:45
728x90

๐ŸŽ€Dispatcher Servlet๐ŸŽ€

๋งค๋ฒˆ ์„œ๋ธ”๋ฆฟ ๊ด€๋ จ์ด ๋‚˜์˜ค๋ฉด ์•„ใ…... ์Œ... ๊ทธ๋ž˜ ์„œ๋ธ”๋ฆฟ ๋„ˆ๋ฌด ๋งŽ์ด ๋“ค์–ด๋ดค๋Š”๋ฐ... ๊ทผ๋ฐ ์ •ํ™•ํ•˜๊ฒŒ ๋ญ”์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ๋‹ค!!! ๋‹ต๋‹ตํ—ˆ๋‹ค!!!!์‹ถ์—ˆ๋‹ค. 

๊ทธ๋ž˜ ์˜ค๋Š˜์ด ๋ฐ”๋กœ ๊ทธ๋‚ ์ด๋‹ค....

์„œ๋ธ”๋ฆฟ์„ ์กฐ์ ธ๋ฒ„๋ฆฌ๋Š”๋‚ ~..~

๊ฐ„๋‹จํ•œ ๊ฑธ ๋งค์ผ ๋ฏธ๋ค„๋ฒ„๋ ค ์˜ค๋Š˜์€ ๊ผญ ํฉ์–ด์ ธ์žˆ๋Š” ์ง€์‹๋“ค์„ ํ—ค์ณ๋ชจ์—ฌ ์‹œ์ผœ์„œ ํ•ฉ์ฒด์‹œ์ผœ์„œ ์ดํ•ดํ•ด์•ผ๊ฒ ๋‹ค.

 

 

1. what's Dispatcher Servlet?

: HTTP ํ”„๋กœํ† ์ฝœ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›์•„ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์œ„์ž„ํ•ด์ฃผ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์ด๋‹ค. 

 

๋งŒ์•ฝ, ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ์˜ค๋ฉด > ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค. > ์ด ๋ชจ๋“  ์š”์ฒญ์„ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›๊ฒŒ ๋œ๋‹ค > ์ด์นœ๊ตฌ๊ฐ€ ๊ณตํ†ต์ ์ธ ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•œ ํ›„, ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ์ž‘์—…์„ ์œ„์ž„ํ•œ๋‹ค. 

 

์Œ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด 

์„ ์ƒ๋‹˜์ด >> ๋ฐ˜์žฅ์—๊ฒŒ ์š”์ฒญ (์šฐ๋ฆฌ๋ฐ˜ ๋ˆ„๊ตฌ๋ˆ„๊ตฌ ์„ค๋ฌธ์กฐ์‚ฌ ํ•ด์™€๋ผ) >> ํ•˜๋ฉด ๋ฐ˜์žฅ์€ >> ์šฐ๋ฆฌ๋ฐ˜ ๋ˆ„๊ตฌ๋ˆ„๊ตฌ์—๊ฒŒ ๊ฐ€์„œ ๊ทธ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ  >> ๋‹ค์‹œ ์„ค๋ฌธ์กฐ์‚ฌ ๋ฐ›์•„์™€์„œ >> ๋‹ค์‹œ ์„ ์ƒ๋‹˜๊ป˜ ์ „๋‹ฌ.

์ด๋Ÿฐ ๊ณผ์ •์—์„œ ๋ฐ˜์žฅ์ด ๋ฐ”๋กœ Dispatcher Servlet์ด๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์ •์  ์ž์› ์š”์ฒญ(V)๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”์ฒญ(C)์„ ๊ตฌ๋ถ„ํ• ๊นŒ? 

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

 

 

- ๋ฐœ์ „ ๊ณผ์ •

1) ๊ฐ ์š”์ฒญ์— ๋”ฐ๋ฅธ ์„œ๋ธ”๋ฆฟ ๋“ฑ๋ก ๋ฐ ๋งคํ•‘

์›๋ž˜ ๊ณผ๊ฑฐ์—๋Š” ์š”์ฒญ์— ๋”ฐ๋ฅธ ์„œ๋ธ”๋ฆฟ์ด ์กด์žฌํ–ˆ๊ณ , ์ด ์„œ๋ธ”๋ฆฟ์„ ๋ชจ๋‘ web.xml์— url ๋งคํ•‘ํ•˜์—ฌ ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ–ˆ๋‹ค. 

ex) /myurl ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ธ”๋ฆฟ ๋“ฑ๋ก ๋ฐ ๋งคํ•‘    + ๋งŒ์•ฝ ๋‹ค๋ฅธ url์ด๋‹ค? ๊ทธ๋Ÿผ ๋˜ ์ƒˆ๋กœ ๋งคํ•‘ํ•ด์ฃผ์–ด์•ผ ํ•จ. ใ… ใ…กใ…  ๊ท€์ฐฎ์•„!!

<!-- web.xml -->

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <display-name>MyWebApp</display-name>

    <!-- Servlet Configuration -->
    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.example.MyServlet</servlet-class>
    </servlet>

    <!-- Servlet Mapping -->
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/myurl</url-pattern>
    </servlet-mapping>

</web-app>

 

2) Spring MVC์˜ Dispatcher Servlet ๋“ฑ์žฅ & web.xml์— ๋งคํ•‘

์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ํ•ด๊ฒฐํ•œ ๊ฒƒ์ด "dispatcher servlet"์ด๋‹ค. (์–˜๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์„ ํ•ธ๋“ค๋งํ•˜๊ณ , ๊ณตํ†ต ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ , ์š”์ฒญ์„ ๋‚˜๋ˆ ์ฃผ๋Š” ์—ญํ• ์ธ ๊ฒƒ!!!) 

ex) dispatcher๋ฅผ ์„ค์ • ๋ฐ ๋งคํ•‘

// web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <display-name>MySpringApp</display-name>

    <!-- Configuring the Dispatcher Servlet -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-mvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

 

3) ์Šคํ”„๋ง ๋ถ€ํŠธ ๋“ฑ์žฅ & ์ž๋™์œผ๋กœ Dispatcher Servlet ๋“ฑ๋ก

๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” ์ด๋Ÿฌํ•œ "web.xml" ํŒŒ์ผ ์—†์ด๋„ ์ž๋™์œผ๋กœ Dispatcher Servlet์ด ์„ค์ •๋˜๊ฒŒ ๋˜์—ˆ๋‹ค. @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๋ฉ”์ธ ํด๋ž˜์Šค์—์„œ ์ž๋™์œผ๋กœ ์„ค์ •๋œ๋‹ค!! 

 

 

public class DispatcherServlet 
	extends FrameworkServlet {...}

public abstract class FrameworkServlet 
	extends HttpServletBean 
    	implements ApplicationContextAware {...}

public abstract class HttpServletBean 
	extends HttpServlet 
    	implements EnvironmentCapable, EnvironmentAware {...}
        
public abstract class HttpServlet 
	extends GenericServlet {...}

>> ์ƒ์† ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด DispatcherServlet์€ ๊ฒฐ๊ตญ ํƒ€๊ณ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋ฉด HttpServlet์„ ์ƒ์†๋ฐ›๋Š”๋‹ค. 

 

2. Dispatcher Servlet์˜ ๋™์ž‘ ๊ณผ์ •

1) ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ๋ฐ›๋Š”๋‹ค.

- ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ(์›น ์ปจํ…์ŠคํŠธ)์—์„œ ~ ํ•„ํ„ฐ๋“ค์„ ์ง€๋‚˜ ~ ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์š”์ฒญ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. (์‹ค์ œ๋กœ๋Š” ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์š”์ฒญ์„ ์œ„์ž„ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ทธ๋ฆผ์€ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๋„์‹ํ™”ํ•œ ๊ฒƒ)

 

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

- ์ด๋•Œ ๊ฐ€์žฅ ๋จผ์ € ์–ด๋Š ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ, ์ด ์—ญํ• ์„ HandlerMapping์ด ํ•ด์ค€๋‹ค. ๊ทธ๋ž˜์„œ ์Šคํ”„๋ง์€ HandlerMapping ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๋‹ค์–‘ํ•œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋Œ€์ƒ์„ ์ฐพ๋„๋ก ๋˜์–ด์žˆ๋‹ค.

- ์ด HandlerMapping ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด RequestMappingHandlerMapping์ด๋‹ค.

: ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค์—์„œ @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์ด ๋‹ฌ๋ ค์žˆ๋Š” ๋ฉ”์„œ๋“œ์˜ RequestMappingInfo ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์–˜๋ฅผ ํƒ€๊ณ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋‹ค๋ณด๋ฉด AbstractHandlerMapping์ด ๋‚˜์˜ค๋Š”๋ฐ, ์—ฌ๊ธฐ์—์„œ given request์— ๋Œ€ํ•œ Handler๋ฅผ ์ฐพ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค. 

 

- ์—ฌ๊ธฐ์„œ HandlerExecutionChain์œผ๋กœ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค. (์ด์œ ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์š”์ฒญ์„ ๋„˜๊ฒจ์ฃผ๊ธฐ ์ „์— ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ธํ„ฐ์…‰ํ„ฐ ๋“ฑ์„ ํฌํ•จํ•˜๊ธฐ ์œ„ํ•ด์„œ)

 

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

์ด์ œ ์š”์ฒญ์„ ๋ฐ”๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ HandlerAdapter๋ฅผ ํ†ตํ•ด ์œ„์ž„ํ•˜๊ฒŒ ๋œ๋‹ค. 

- ์ด์นœ๊ตฌ๊ฐ€ ๊ฐ ์š”์ฒญ์— ๋”ฐ๋ผ implementation๋˜๊ฒŒ ๋œ๋‹ค. ์–ด๋–ค ์ฝ”๋“œ ๋ฐฉ์‹์ด๋“  ์ƒ๊ด€์—†์ด! 

 

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

: ์š”์ฒญ์„ ์œ„์ž„ํ•œ ์ „/ํ›„์— ๊ณตํ†ต์ ์ธ ์ „/ํ›„์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 

 

5) ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

: ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋“ค์„ ์ง„ํ–‰ํ•˜๊ณ  ์ฒ˜๋ฆฌ ์ดํ›„ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฃผ๋กœ ResponseEntity๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์‘๋‹ต ํŽ˜์ด์ง€๋Š” String์œผ๋กœ View์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. 

 

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

- ๋งŒ์•ฝ ResponseEntity๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค๋ฉด HttpEntityMethodProcessor๊ฐ€ MessageConverter๋ฅผ ์‚ฌ์šฉํ•ด ์‘๋‹ต ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ณ , ์‘๋‹ต ์ƒํƒœ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

- ๋งŒ์•ฝ View๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค๋ฉด ViewResolver๋ฅผ ํ†ตํ•ด View๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

7)  ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์ด ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

- ๋‹ค์‹œ ํ•„ํ„ฐ๋“ค์„ ๊ฑฐ์ณ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜๋œ๋‹ค. 

 

 


 

๋“œ๋””์–ด ๋ญ”๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™๊ธฐ๋„.............. ๋˜ ํ—ค์ณ๋ชจ์—ฌ ํ•˜๋Š” ๊ตฌ๊ฐ„์ด ์˜ค๊ฒ ์ง€!? ใ…Žใ……ใ…Ž 

 

 

์ผ๋‹จ ์˜ค๋Š˜ ๊ธฐ์–ตํ•  ๊ฒƒ์€!

๐ŸŒŸ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ๋ฐ˜์žฅ๊ฐ™์€ ์—ญํ•  ! ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์œ„์ž„ํ•œ๋‹ค.

๊ทธ ๋์—๋Š” HttpServlet์ด ์žˆ๋‹ค! 

 

HandlerMapping์€ ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ• ๊นŒ? ๊ฒฐ์ •

HandlerAdapter๋Š” ์š”์ฒญ์„ ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ„์ž„ํ•ด์ฃผ๋Š” ์—ญํ• 

 

728x90

'Programming > Spring, SpringBoot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JWT  (1) 2024.01.29
HandlerInterceptor & Filter / SecurityFilterChain  (0) 2024.01.27
CustomUserDetailsManager๊ณผ CustomUserDetails ๋งŒ๋“ค๊ธฐ  (1) 2024.01.26
Spring Security... ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค  (0) 2024.01.25
Testing  (1) 2024.01.24

BELATED ARTICLES

more