๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring/Spring Boot

@EnableWebMvc ๋Š” ์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•˜์ž

by Soono991 2023. 5. 31.

๐Ÿ’ก ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ resourceHandler์— ๋Œ€ํ•ด ๊ฒช์—ˆ๋˜ ์ด์Šˆ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

์ƒํ™ฉ์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

 

์Šคํ”„๋ง ๋ถ€ํŠธ + ํƒ€์ž„๋ฆฌํ”„๋กœ ๊ฐœ๋ฐœ์„ ์ž˜ ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ํ†ฐ์บฃ AJP ์„ค์ •์„ ํ•ด์•ผ ํ•ด์„œ @Configuration๊ณผ @EnableWebMvc๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •์„ ํ•œ ํ›„์— ๊ฐ‘์ž๊ธฐ ์ •์  Web Resource๋“ค์ด ๋ชจ๋‘ 404 Not Found ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์•„๋ž˜๋Š” ๋ฌธ์ œ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

@Configuration
@EnableWebMvc
@RequiredArgsConstructor
public class SpringServletConfig implements WebMvcConfigurer {

    private final TomcatAjpProperties tomcatAjpProperties;

    @Bean
    public ServletWebServerFactory servletContainer() throws UnknownHostException {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
        };

        if (tomcatAjpProperties.enabled()) {
            Connector ajpConnector = new Connector(tomcatAjpProperties.protocol());
            ajpConnector.setPort(tomcatAjpProperties.port());
            ajpConnector.setSecure(tomcatAjpProperties.secure());
            ajpConnector.setAllowTrace(tomcatAjpProperties.allowTrace());
            ajpConnector.setScheme(tomcatAjpProperties.scheme());
            ((AbstractAjpProtocol<?>) ajpConnector.getProtocolHandler()).setSecretRequired(false);
            ((AbstractAjpProtocol<?>) ajpConnector.getProtocolHandler()).setAddress(InetAddress.getByName("0.0.0.0"));
            tomcat.addAdditionalTomcatConnectors(ajpConnector);
        }

        return tomcat;
    }

}

 

์ด์ œ๊นŒ์ง€ ํ•™์Šตํ–ˆ๋˜ ๋‚ด์šฉ์œผ๋กœ๋Š” ์ •์  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์„ค์ •์€ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •ํ•ด ์ฃผ๋ฉฐ, WebProperties์— ์ •์  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

ํ•˜์ง€๋งŒ ์ด๋ฒˆ ์ด์Šˆ์— ๋Œ€ํ•œ ๋ฒ”์ธ์ด์ž ์˜ค๋Š˜ ์ •๋ฆฌํ•  ๋‚ด์šฉ์ธ @EnableWebMvc ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ์ œ๊ฐ€ ์•Œ๊ณ  ์žˆ๋˜ ๋‚ด์šฉ์ด ํ‹€๋ ค์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋จผ์ € MVC ์„ค์ •์€ ์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

1. @Configuration + WebMvcConfigurer 
2. @Configuration + @EnableWebMvc + WebMvcConfigurer 

 

์ด๋ฒˆ ์ด์Šˆ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋ ค๋ฉด ์œ„ 2๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„์•ผ ํ•˜๋ฉฐ, ์ด์ œ 2๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์ฐจ์ด๋ฅผ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๊ณต์‹ ๋ฌธ์„œ์— ๊ฐ€๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์„ค์ •์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ธํ„ฐ์…‰ํ„ฐ, ํฌ๋งคํ„ฐ, ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ๋“ฑ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด @EnableWebMvc ์• ๋…ธํ…Œ์ด์…˜ ์—†์ด @Configuration + WebMvcConfigurer๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ˜๋Œ€๋กœ ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์—†์ด ๋ชจ๋“  ์„ค์ •์„ ์ œ์–ดํ•˜๋ ค๋ฉด @EnableWebMvc ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ด์™€ ๊ด€๋ จํ•ด์„œ ๋ฐฑ๊ธฐ์„  ๋‹˜์˜ ์ธํ”„๋Ÿฐ Q&A์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜:&nbsp;https://www.inflearn.com/questions/33417/enablewebmvc-%EC%97%86%EC%9D%B4%EB%A1%9C-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8

 

 

์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด @EnableWebMvc ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด WebMvcAutoConfiguration์ด ๋“ฑ๋ก๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

@EnableWebMvc ์ ์šฉ

 

@EnableWebMvc ์ ์šฉ X

@EnableWebMvc ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด WebMvcAutoConfiguration์ด ๋™์ž‘ํ•˜์—ฌ ๊ธฐ๋ณธ ์ •์  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ resourceHandler๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ์ฒ˜์Œ์— ์•Œ๊ณ  ์žˆ๋˜ ๋‚ด์šฉ์€ @EnableWebMvc ์• ๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์ •ํ•ด ์ฃผ์—ˆ์„ ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ๋‚ด์šฉ์ด ๋˜๊ณ , @EnableWebMvc๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ์Šคํ”„๋ง ๋ถ€ํŠธ ์ž๋™ ์„ค์ •์ด ์ ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ๋๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์˜ค๋Š˜ ํฌ์ŠคํŒ… ์ด์Šˆ๋Š” resourceHandler ๋ถ€๋ถ„์ด์—ˆ์ง€๋งŒ ์ด ์™ธ์—๋„ View Resolver ๋“ฑ ์Šคํ”„๋ง ๋ถ€ํŠธ ์ž๋™ ์„ค์ •์— ์˜ํ•ด ๋“ฑ๋ก๋˜๋Š” Bean๋“ค์ด ์žˆ์œผ๋‹ˆ ์ด ๋ถ€๋ถ„์€ WebMvcConfigurer์ด ์–ด๋–ค Bean๋“ค์„ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

์ •๋ฆฌํ•˜๋ฉด

์Šคํ”„๋ง ๋ถ€ํŠธ ์ž๋™ ์„ค์ •์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ถ”๊ฐ€๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” @Configuration + WebMvcConfigurer

์Šคํ”„๋ง ๋ถ€ํŠธ ์ž๋™ ์„ค์ • ๋Œ€์‹  ์ง์ ‘ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” @Configuration + @EnableWebMvc + WebMvcConfigurer

๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

์ฐธ๊ณ  ์ž๋ฃŒ

 

๋Œ“๊ธ€