๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌ,
ํ์ํ ๋งํผ์ ๊ธฐ๋ฅ๋ง ์ฌ์ ์ํ์ฌ ์ฌ์ฉํ๊ธฐ
โท์คํ๋ง๋ถํธ์ ํต์ฌ์์
- โ ์คํํฐ : ํน์ ๋ชจ๋ ์ฌ์ฉ์ ๊ด๋ จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฌถ์ด์ ๋ง์น ํจํค์ง์ฒ๋ผ ์ ๊ณต.
- โก์๋์ค์ : ๋น ์ค์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํจ
- โข์ก์ถ์์ดํฐ : ์คํ๋ง๋ถํธ๋ก ๊ฐ๋ฐ๋ ์์คํ ์ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํจ
โ
โถ์์กด์ฑ๊ด๋ฆฌ
- ์คํํฐ์ ์๋ฆฌ : (๋ฉ์ด๋ธ)์คํํฐ์ ์๋ POMํ์ผ์ ์์ ๊ตฌ์กฐ. <paremt>์๋ฆฌ๋จผํธ ์ฌ์ฉ.
- ํ๋กํผํฐ ์ฌ์ ์
- ๋ฉ์ด๋ธ(pom.xml)
<dependencies>
<!-- ๋ค๋ฅธ ์์กด์ฑ๋ค -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.4</version> <!-- ์คํ๋ง ๋ถํธ ์คํํฐ์ ๋ฒ์ ์ง์ -->
</dependency>
<!-- ๋ค๋ฅธ ์์กด์ฑ๋ค -->
</dependencies>
- ๊ทธ๋ ์ด๋ค(build.gradle)
dependencies {
// ๋ค๋ฅธ ์์กด์ฑ๋ค
implementation 'org.springframework.boot:spring-boot-starter-web:2.5.4' // ์คํ๋ง ๋ถํธ ์คํํฐ์ ๋ฒ์ ์ง์
// ๋ค๋ฅธ ์์กด์ฑ๋ค
}
โถ์๋์ค์
โท์๋์ค์ ์ด๋
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๋ค๊ณ ๋ฐ๋ก ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์๋. โ ์คํ๋ง ์ค์ ํ์ผ์ ๋น ๋ฑ๋ก โก์์กด์ฑ ์ฃผ์ ๋ ์ ์ ํ ์ฒ๋ฆฌํด์ผํจ => ์๋์ผ๋ก ํด์ฃผ๋ ๊ฒ
- ๋ณต์กํ ์ค์ ๋ค์ ๋์ ํด์ฃผ๋ ๊ฒ : ๋ฉ์ธํด๋์ค ์์ ์ค์ ๋ @SpringBootApplication
- public @interface SpringBootApplication
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented ()
@Inherited ()
@SpringBootConfiguration ()
@EnableAutoConfiguration ()
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
โท์ค์ ์ ๋ํ ์ด์
- @SpringBootConfiguration : ๊ธฐ์กด์ ํ๊ฒฝ์ค์ ๋น ํด๋์ค๋ฅผ ํํํ๊ธฐ ์ํด
- @EnableAutoConfiguration : ์๋์ค์ ๊ด๋ จ ์ ๋ํ ์ด์ . ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ์์ .
- @ComponentScan : ์คํ๋ง ์ปจํ ์ด๋ ์ด๊ธฐํ ๊ด๋ จ ์ ๋ํ ์ด์ . ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ.
(@Configuration, @Repository, @Service, @Controler, @RestController๊ฐ ๋ถ์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฎ๊น)
โโ
โท์คํ๋ง๋น ์ ๋ํ ์ด์ ์ ์ฉ์์
- โ @ComponentScan(์ฌ์ฉ์ ๋ฑ๋ก ๋น)
- โผ
- โก @EnableAutoConfiguration(์๋์ค์ ์ ์ํ ๋น)
โโ
โท์น ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ จ ์ ๋ํ ์ด์
- public class WebMvcAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {...}
- @Configuration : ์ด ํด๋์ค๊ฐ ์คํ๋ฆฐ ๋น ์ค์ ํด๋์ค์์ ์๋ฏธํจ. @ComponentScan์ด ์ฒ๋ฆฌ๋ ๋ ์์ ๋ฟ๋ง ์๋๋ผ ์ด ํด๋์ค์ @Bean์ผ๋ก ์ค์ ๋ ๋ชจ๋ ๋น๋ค๋ ์ด๊ธฐํ๋จ
- @ConditionalOnWebApplication : ์น ์ ํ๋ฆฌ์ผ์ด์ ํ์ ์ด ์ด๋ป๊ฒ ์ค์ ๋์ด์๋์ง ํ์ธํจ
(type : NONE/REACTIVE/SERVLET)
- @ConditionalOnClass : (์กฐ๊ฑด)ํด๋์คํจ์ค์ ํน์ ํด๋์ค๊ฐ ์กด์ฌํ ๋, ํ์ฌ ์ค์ ํด๋์ค๋ฅผ ์ ์ฉ
- @ConditionalOnMissingBean : (์กฐ๊ฑด) ํน์ ํด๋์ค ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋, ํ์ฌ ์ค์ ํด๋์ค๋ฅผ ์ ์ฉ
- @AutoConfigureOrder : ์๋์ค์ ํด๋์ค๋ค์ ์ฐ์ ์์๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉํจ
- @AutoConfigureAfter : ํ์ฌ์ ์๋์ค์ ํด๋์ค๊ฐ ๋ค๋ฅธ ์๋์ค์ ํด๋์ค ๋ค์์ ์ ์ฉ๋๋๋ก ์ง์
โโ
โท์๋์ค์ ์ฌ์ ์
- ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ํ์ ์ ๋น์ด ๋ ๊ฐ๊ฐ ๋ฑ๋ก๋์ด ์ถฉ๋์ด ๋ฐ์ → ์ด์ ์ ์์ฑ๋ ๋น์ ์๋กญ๊ฒ ์์ฑํ ๋น์ด ๋ฎ์ด์ธ ์ ์๋๋ก ์ค์ ํ์ผ ์์
spring.main.allow-bean-definition-overriding=false (๊ธฐ๋ณธ๊ฐ)
spring.main.allow-bean-definition-overriding=true (๋ฎ์ด์ฐ๊ธฐ)
- ๊ทธ๋ฌ๋ ์๋์ค์ ๋น์ด ์ ์ฉ๋จ. ์ด์ : ์คํ๋ง๋ถํธ์ ๋น ๋ฑ๋ก ์์ ๋๋ฌธ.
- ์คํ๋ง๋ถํธ์ ๋น ๋ฑ๋ก ์์ โ @ComponentScan (์ฌ์ฉ์ ๋ฑ๋ก ๋น) → โก @EnableAutoConfiguration (์๋์ค์ ์ ์ํ ๋น)
- ์๋์ค์ ๋น์ด ์๋ ์๋กญ๊ฒ ์ ์ํ ๋น์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ → @Conditional ์ฌ์ฉํ๊ธฐ(if๋ฌธ)
- @ConditionalOnMissingBean : ๋ฑ๋กํ๋ ค๋ ๋น์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ์๋ง ํ์ฌ์ ๋น ๋ฑ๋ก์ ์ฒ๋ฆฌํ๋๋ก ํจ. @EnableAutoConfiguration์ด ๋์ํ๋ ์์ ์๋ ์ด๋ฏธ ๋ฑ๋ก๋ ๋น์ ์ฌ์ฉํ๊ณ , ์๋กญ๊ฒ ๋น์ ์์ฑํ์ง ์์.
โ
'๐ฅ๏ธ ๋ฐฑ์๋ > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.5 ์คํ๋ง๋ฐ์ดํฐ JPA (0) | 2023.11.23 |
---|---|
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.4 JPA API (0) | 2023.11.23 |
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.3 ํ ์คํธ, ๋ก๊น , ๋น๋ (1) | 2023.11.23 |
[๋ณด์] ์ฟ ํค์ ์ธ์ ๊ทธ๋ฆฌ๊ณ JWT (1) | 2023.11.23 |
[์คํ๋ง๋ถํธ ํต์คํํธ] ch.1 ์คํ๋ง๋ถํธ ๋ฑ์ฅ ๋ฐ ํต์คํํธ (0) | 2023.11.20 |