μλ κ΅¬μ± (Auto Configuration)
π κ°μ
- Spring Bootλ ν΄λμ€ν¨μ€ + νκ²½μ€μ μ κ²μ¬ν΄, νμ Beanμ μλ λ±λ‘νλ€.
- μ¬μ©μκ° μ§μ Beanμ μ μνλ©΄ μλ ꡬμ±μ λ¬Όλ¬λλ€(back off)
- λΉνμ±ν/μ μΈ, μμ± νλ, μ¬μ©μ Bean μ μλ‘ μ½κ² 컀μ€ν°λ§μ΄μ§ν μ μλ€.
βπ» νμ€ μμ½
μλ ꡬμ±μ @SpringBootApplication
(λ΄λΆμ @EnableAutoConfiguration
)μ ν΅ν΄, λΌμ΄λΈλ¬λ¦¬ μ‘΄μ¬/μμ±/νκ²½ 쑰건μ λ§μ‘±ν λ μλμΌλ‘ Beanμ λ§λλ κΈ°λ₯μ΄λ€.
π€ μ΄λ»κ² λμ?
- μνΈλ¦¬ ν¬μΈνΈ:
@SpringBootApplication
β@EnableAutoConfiguration
- μλ μ€μ μμ€:
spring-boot-autoconfigure
λͺ¨λμ κ°@AutoConfiguration
ν΄λμ€- Spring Boot 3.x:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
λ₯Ό ν΅ν΄ λ±λ‘
- Spring Boot 3.x:
- νκ° λ‘μ§:
@ConditionalOnClass
,@ConditionalOnMissingBean
,@ConditionalOnProperty
λ± μ‘°κ±΄μ΄ λ§μ‘±λλ©΄ Bean λ±λ‘ - Back-off κ·μΉ: λμΌ νμ
Beanμ μ¬μ©μκ° μ μνλ©΄
@ConditionalOnMissingBean
μ‘°κ±΄μ΄ κΉ¨μ Έ μλ ꡬμ±μ λΉνμ±
π§© μμ£Ό μ°μ΄λ 쑰건λ€
@ConditionalOnClass
: νΉμ ν΄λμ€κ° classpathμ μμ λλ§@ConditionalOnMissingBean
: λμΌ νμ Beanμ΄ μμ λλ§@ConditionalOnProperty
: μμ±(foo.enabled=true
)μ΄ μΌμ‘μ λλ§@ConditionalOnWebApplication
/@ConditionalOnNotWebApplication
@ConditionalOnBean
/@ConditionalOnMissingClass
π§ μμ
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
# application.yml - μμ±μΌλ‘ μλ κ΅¬μ± νλ
server:
port: 8081
spring:
datasource:
url: jdbc:postgresql://...
username: app
password: secret
β οΈ μ£Όμν μ
- ν΄λμ€ν¨μ€ μμ‘΄: μ€νν°κ° λΌλ©΄ μλμΉ μκ² μλ ꡬμ±μ΄ μΌμ§ μ μμ(쑰건 λ‘κ·Έλ‘ νμΈ)
- μ€λ³΅ Bean κ²½ν©: λμΌ νμ λ€μ λ±λ‘ μ μ°μ μμ/Primary νμΈ
- ν
μ€νΈ 컨ν
μ€νΈ:
@SpringBootTest
λ κ΄λ²μ β μ¬λΌμ΄μ€ ν μ€νΈ(@WebMvcTest
,@DataJpaTest
)λ‘ λ²μ μΆμ κΆμ₯
π κ΄λ ¨
- IoC - 컨ν μ΄λκ° μμ±Β·μ£Όμ Β·μλͺ μ£ΌκΈ°λ₯Ό κ΄λ¦¬νλ κΈ°λ° μ리
- DI - μλ λ±λ‘λ Beanμ μμ‘΄μ± μ£Όμ
- external-configuration - νκ²½/νλ‘ν κΈ°λ° μ€μ λΆλ¦¬