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

Spring/Spring Quick Start

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๊ณ„

Spring Quick Start(์ฑ…)์˜ Day4 class03 ์„ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์•„์ฃผ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!


<web-app>
    <filter>
        <filter-name>characterEncoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>EUC-KR</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncoding</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>


    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- <servlet-name>์„ ๋”ด dispatcher-servlet.xml์ด "๋ทฐ" ์„ค์ • ํŒŒ์ผ -->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

โ‘  ์„œ๋ฒ„๋ฅผ ์ฒ˜์Œ์œผ๋กœ ๊ตฌ๋™ํ•˜๋ฉด web.xml ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ตฌ๋™๋œ๋‹ค.

โ‘ก ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” web.xml ๋“ฑ๋ก๋œ ContextLoaderListener ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ(pre loading)ํ•œ๋‹ค. ์ด๋•Œ ContextLoaderListener ๊ฐ์ฒด๋Š” src/main/resources ํด๋”์— ์žˆ๋Š” applicationContext.xml ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜์—ฌ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™ํ•˜๋Š”๋ฐ, ์ด๋ฅผ 'Root ์ปจํ…Œ์ด๋„ˆ'๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋•Œ ServiceImpl ํด๋ž˜์Šค(@Service)๋‚˜ DAO ๊ฐ์ฒด(@Repository)๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ž ๊น, ์™œ ์ˆœ์„œ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋ ๊นŒ?

์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •์—์„œ @Autowired๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๊ทธ ๋นˆ๋“ค์ด ์—†์œผ๋ฉด ์•ˆ๋˜๊ฒ ์ง€?

๋น„์ฆˆ๋‹ˆ์Šค ์ปดํฌ๋„ŒํŠธ๋“ค ์ฆ‰ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ๋จผ์ € ์˜ฌ๋ผ๊ฐ€ ์žˆ์–ด์•ผ ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ์ด ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์–ด

 

โ‘ข ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ".do" ์š”์ฒญ์„ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๋ฉด web.xml์— ๋“ฑ๋ก๋œ ๋Œ€๋กœ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” DispatcherServlet ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  /WEB-INF/config ํด๋”์— ์žˆ๋Š” presentation-layer.xml ํŒŒ์ผ ๋˜๋Š” dispatcher-servlet.xml ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜์—ฌ ๋‘๋ฒˆ์งธ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™ํ•œ๋‹ค. ์ด ๋‘ ๋ฒˆ์งธ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Controller ๊ฐ์ฒด(@Controller)๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ ์•ž์„œ์„œ Root ์ปจํ…Œ์ด๋„ˆ(๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ)๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ Controller์—์„œ ์ฐธ์กฐํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์ด ์ด์™€ ๊ด€๋ จ๋œ ๊ทธ๋ฆผ์ด๋‹ค.

 

๋ถ„๋ช…ํžˆ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‘ ๊ฐœ๊ฐ€ ๊ตฌ๋™๋œ๋‹ค.

ContextLoaderListener์™€ DispatcherServlet์ด XmlWebApplicationContext๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ๋‘ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ• ๊ณผ ๊ฐ€๋Šฅ์ด ๋‹ค๋ฅธ ๊ฒƒ์ด๋‹ค.