์คํ๋ง ๋ถํธ์์ ์ฆ์ ์น ๊ฐ๋ฐ์ ์์ํ ์ ์๋ ์ด์ - AutoConfiguration
spring-boot-starter-web ์์กด์ฑ์ ์ถ๊ฐํ์ฌ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ์ฆ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
@RestController
public class UserController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
์๋ฌด๋ฐ ์ค์ ์์ด ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด GET /hello ์์ฒญ์ ๋ํ ํธ๋ค๋ฌ๋ฅผ ๊ตฌํํ์ฌ ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ (@SpringBootApplication)์ ์คํํ๋ฉด ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ค.
์คํ๋ง ๋ถํธ์ ๊ธฐ๋ณธ ์ค์
์ด๋ ์คํ๋ง ๋ถํธ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์ค์ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ ์ค์ ์ spring-boot-autoconfigure ๋ชจ๋์ META-INF/spring.factories์ ์ ์๋์ด ์๋ค.
๊ทธ ์ค์์๋ ์น MVC์ ๋ํ ๊ธฐ๋ณธ ์ค์ ์ WebMvcAutoConfiguration์ด๋ค.
WebMvcAutoConfiguration
// Defined as a nested config to ensure WebMvcConfigurer is not read when not
// on the classpath
@Configuration(proxyBeanMethods = false)
@Import(EnableWebMvcConfiguration.class)
@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })
@Order(0)
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {
...
์ด ํด๋์ค์ ๋ด์ฉ์ ์ดํด๋ณด๋ฉด ๊ธฐ์กด์ ์คํ๋ง ๋ถํธ๋ฅผ ์ฌ์ฉํ์ง ์๋, ์คํ๋ง MVC ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ ์ง์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ ๊ฒ๋ค์ด ์คํ๋ง ๋ถํธ์ ์ปจ๋ฒค์ ์ ์ํด ๋ฏธ๋ฆฌ ์ค์ ๋์ด ์์์ ์ ์ ์๋ค.
WebMvcProperties
@ConfigurationProperties(prefix = "spring.mvc")
public class WebMvcProperties {
WebMvcProperties๋ application.properties์์ ์ฌ์ฉํ์ฌ ์น MVC์ ๋ํด ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ ํ๋กํผํฐ๊ฐ ์ ์๋์ด ์๋ ํด๋์ค์ด๋ค.
@ConfigurationProperties์ prefix = "spring.mvc"๋ application.properties์์ ์ด๋ฆ์ด spring.mvc.*์ธ ํ๋กํผํฐ์ ๋ํด ๋ฐ์ธ๋ฉํ๋ค๋ ์๋ฏธ์ด๋ค.
์น MVC ๊ธฐ๋ฅ ํ์ฅ
์คํ๋ง ๋ถํธ๊ฐ ์ ๊ณตํ๋ MVC ๊ธฐ๋ฅ์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด์ ์ปจ๋ฒํฐ ์ถ๊ฐ, ์ธํฐ์ ํฐ ์ถ๊ฐ์ ๊ฐ์ ์ถ๊ฐ์ ์ธ ์ค์ ์ ํ๊ณ ์ ํ ๋๋ WebMvcConfigurer๋ฅผ ๊ตฌํํ๋ ์ค์ ํ์ผ์ ๋ง๋ ๋ค.
@Configuration
public class WebConfig implements WebMvcConfigurer {
}
์ด ํด๋์ค์์ ์ถ๊ฐํ๊ณ ์ ํ๋ ์ค์ ์ ๋ง๋ WebMvcConfigurer์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.
References
์ธํ๋ฐ - ๋ฐฑ๊ธฐ์ ๋์ ์คํ๋ง ๋ถํธ ๊ฐ๋ ๊ณผ ํ์ฉ
๋๊ธ