μžλ™ ꡬ성 (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λ₯Ό 톡해 등둝
  • 평가 둜직: @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 - ν™˜κ²½/ν”„λ‘œν•„ 기반 μ„€μ • 뢄리