0.๐ถ๋ค์ด๊ฐ๋ฉฐ
Spring boot๋ก ํ๋ก์ ํธ๋ฅผ ์คํํ๋ฉด ์์์ ๋ง๋ค์ด์ง๋ ์ ์ผํ ์๋ฐ ์ฝ๋๋ก ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฐพ์๋ณผ ์ ์์ต๋๋ค.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
์ฌ๊ธฐ์ ๋ถ์ด์๋ ์ด๋ ธํ ์ด์ ์ธ @SpringBootApplication์ด ์ด๋ค ์ญํ ์ ํ๊ณ ์๋์ง ๊ถ๊ธํ์ฌ ์ด์ ๋ํด ์ฐพ์๋ณด์๊ณ , ์ด๋ฅผ ํตํด Spring์ ์ฌ๋ฌ ์ด๋ ธํ ์ด์ ์ ๋ํด ์์๋ณผ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ ๊ทธ ๋ด์ฉ์ ์๊ฐํ๊ณ ์ ํฉ๋๋ค.
@SpringBootApplication์ด ์ด๋ค ์ด๋ ธํ ์ด์ ์ธ์ง ์๊ธฐ ์ํด ์ ์๋ ๊ณณ์ ์ฐพ์๊ฐ ๋ณด์์ต๋๋ค. ์๋ ํจํค์ง์ ์กด์ฌํ๋๊ตฐ์!
package org.springframework.boot.autoconfigure;
@SpringBootApplication ์ด๋ ธํ ์ด์ ์ ์ ์ธ๋ถ๋ง ์ดํด๋ณด๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ๋์ด์์ต๋๋ค.
์ฃผ์ ๊น๊ฒ ๋ด์ผํ ๊ณณ์ ์คํ๋ง ๊ณ ์ ์ด๋ ธํ ์ด์ ์ด๊ณ ์ฌ๊ธฐ์๋ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
์ ์ธ ๊ฐ์ง ์ด๋ ธํ ์ด์ ๊ธฐ๋ฅ์ @SpringBootApplication ํ๋๋ก ํ์ฑํ ์ํฌ ์ ์๋ ๊ฒ์ด์ฃ !
๊ทธ๋ฌ๋ฉด ํ๋ํ๋ ์ข ๋ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. @SpringBootConfiguration
@SpringBootConfiguration
enable registration of extra beans in the context or the import of additional configuration classes. An alternative to Spring’s standard @Configuration that aids configuration detection in your integration tests.
์คํ๋ง์ @Configuration ์ด๋ ธํ ์ด์ ๋ฅผ ๋์ฒดํ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค. ๊ฑฐ์ ๋น์ทํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฃ !
๋ ์ด๋ ธํ ์ด์ ์ ์ฐจ์ด์ ์ผ๋ก๋ @SpringBootConfiguration์ ๊ตฌ์ฑ์ ์๋์ผ๋ก ์ฐพ์ ์ ์๋ค๋ผ๊ณ ํฉ๋๋ค.
์ฐจ์ด์ ์ ๋ํด์๋ ์์ง ์ ๋๋ก ์ดํดํ์ง ๋ชปํ ๊ฒ ๊ฐ์ ์ถํ ๋ ๊ณต๋ถํด๋ณด๊ณ ๋ด์ฉ์ ์กฐ๊ธ ๋ ๋ณด์ํด๋ณด๊ฒ ์ต๋๋ค.
@Configuration ์ด๋ ธํ ์ด์ ?
์ค์ ํด๋์ค์์ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด ๋น์ ๋ฑ๋กํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์ด์ผ ํฉ๋๋ค.
@Cofiguration ์ด๋ ธํ ์ด์ ์ ํด๋์ค์ ๋ถ์ด๋ ๊ฒ์ด๊ณ @Bean ์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ๋ฉ์๋๋ฅผ ์์ฑํด์ฃผ๋ ๊ฒ์ด์ฃ .
@Configuration
public class MyConfig {
@Bean
public MyBean mybean() {
return new MyBean();
}
}
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ฒ๋๋ฉด ์คํ๋ง ์ปจํ ์ด๋๊ฐ @Configuration์ด ๋ถ์ด์๋ MyConfig๋ฅผ ์๋์ผ๋ก ๋น์ผ๋ก ๋ฑ๋กํ๊ณ , ํด๋น ํด๋์ค๋ฅผ ํ์ฑํด์ @Bean์ด ๋ถ์ด์๋ ๋ฉ์๋๋ฅผ ์ฐพ์ ๋น์ ์์ฑํด์ค๋๋ค. ์ด ๋ Bean์ ์ด๋ฆ์ ๋ฉ์๋๋ช ์ด ๋ฉ๋๋ค.
@Configuration์ ์จ์ฃผ์ด์ผ @Bean์ผ๋ก ๋ฑ๋กํ๋ ๋น์ด ์ฑ๊ธํค์ ๋ณด์ฅ ๋ฐ์ ์ ์๋๋ฐ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
2. @EnableAutoConfiguration
@EnableAutoConfiguration
enable Spring Boot’s auto-configuration mechanism
ํด๋น ์ด๋ ธํ ์ด์ ์ ์คํ๋ง ๋ถํธ์ ์๋ ์ค์ ๋ฉ์ปค๋์ฆ์ ํ์ฑํ์์ผ์ค๋๋ค.
์ด๊ฒ ๋ฌด์จ ๋ง์ด์ง..?
Spring Boot์ ๋น ๋ฑ๋ก ๋ฐฉ์์ ๋ ๋จ๊ณ์ ๊ฑธ์ณ์ ์งํ๋๋ค๊ณ ํฉ๋๋ค.
- ComponentScan์ผ๋ก bean์ ๋ฑ๋ก
- EnableAutoConfiguration์ผ๋ก bean์ ๋ฑ๋ก
์ด ๋ 2๋ฒ ๊ณผ์ ์ ๋ํด ์์๋ณด๋ฉด, @EnableAutoConfiguration ์ด๋ ธํ ์ด์ ์ ์คํ๋ง ๋ถํธ๊ฐ ๋ฏธ๋ฆฌ ์ ์ํด๋์ ๋น ์ค์ ๋ค(meta ํ์ผ์ ์กด์ฌ)์ ๋น์ผ๋ก ๋ฑ๋กํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
# Spring Boot์ meta ํ์ผ? -> spring-boot-autoconfigure ํ๋ก์ ํธ์ META-INF ํจํค์ง ์ spring.factories์ ๋ค์ด์์!
3. @ComponentScan
@ComponentScan
enable @Component scan on the package where the application is located
์์ฃผ ๋ณด์ด๋ ์ด๋ ธํ ์ด์ ์ด ๋์๋ค์,, ์์ ํด๋น ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด ๋น ๋ฑ๋ก์ ํ๋ค๊ณ ํ์๋๋ฐ ์ข ๋ ์์๋ด ์๋ค.
์คํ๋ง์ ์ฌ์ฉํ๋ฉด์ ํ์์ ๋ฐ๋ผ @Component, @Service, @Repository, @Controller, @Configuration ๋ฑ๊ณผ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด ๋น์ผ๋ก ๋ฑ๋กํ๊ณ ์ ํฉ๋๋ค.
๊ทผ๋ฐ ๊ทธ๋ฅ ๋ด๊ฐ ๋ง๋ ํด๋์ค์ ์์ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ ์ฐ๋ฉด ์ค์ ํ์ผ์ ๋ฑ๋กํ ๊ฒ๋ ์๋๋ฐ ์ด๋ป๊ฒ ๋น์ผ๋ก ๋ฑ๋กํด์ค๊น?๋ผ๋ ์๋ฌธ์ด ์๊น๋๋ค. ๋ฐ๋ก @ComponentScan์ด ์ค์ ๋ ์์ ์ง์ ๋ถํฐ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ ์ํ๋ ๋๋ค(์ปดํฌ๋ํธ ํด๋์ค๋ค)์ ๋ค ์ฐพ์์ ๋ฑ๋กํด์ค๋๋ค.
์์์ ์ดํด๋ณธ ๊ฒ๊ณผ ๊ฐ์ด @Configuration์์ ์๋์ผ๋ก ๋น์ ๋ฑ๋กํ ์๋ ์์ง๋ง(@Bean ์ฌ์ฉํด์) ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ์๋์ผ๋ก Component๋ค์ Scan ํ์ฌ ๋น์ผ๋ก ๋ฑ๋กํด์ค๋๋ค.
@Configuration
@ComponentScan
public class MyConfig {
// Bean๋ค์ด ์๋์ผ๋ก ๋ฑ๋ก
}
4.๐์ ๋ฆฌ
์ ๋ฆฌํ์๋ฉด @SpringBootApplication์ ํตํด
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
์ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ํ๊บผ๋ฒ์ ์ ๊ณตํด์ค๋ค๊ณ ๋ณผ ์ ์๋๋ฐ ํ์ํ ๋น๋ค์ ๋ฑ๋กํ๋ ๊ฒ์ด ์ฃผ๋ ๊ธฐ๋ฅ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ด๋ จ ๋ด์ฉ์ ์ฐพ๋ค๋ณด๋ ์คํ๋ง ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ํด ์ ์์ง ๋ชปํ๋ ๊ตฌ๋๋ผ๊ณ ๋๋ผ๊ฒ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ถํ ์คํ๋ง ๊ณต๋ถ๋ฅผ ๋ ์งํํด๋ณด๋ฉด์ ๊ธฐํ๊ฐ ๋๋ฉด ๊ด๋ จ ๋ด์ฉ์ ์กฐ๊ธ ๋ ์์ธํ๊ฒ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.