개발/Spring Boot

스프링 부트 자동 구성

Debin 2023. 3. 4.
반응형

스프링 부트의 자동 구성

스프링 부트는 자동 구성(Auto Configuration)이라는 기능을 제공해서,

DataSource, TransactionManger과 같은 일반적으로 자주 사용하는 수많은 빈들을 자동으로 등록해준다.

자동 구성 덕분에 개발자는 반복적이고 복잡한 빈 등록과 설정을 최소화 하고 애플리케이션 개발을 빠르게 시작할 수 있다.

 

스프링 부트는 spring-boot-autoconfigure라는 프로젝트 안에서 수 많은 자동 구성을 제공한다.

spring data jpa repository 자동 구성 빈

  • @AutoConfiguration: 자동 구성을 사용하려면 이 애노테이션을 등록해야 한다. 이 애노테이션을 살펴보면 메타 애노테이션으로 @Configuration을 가지고 있으므로 빈을 등록하는 자바 설정 파일로 사용할 수 있다. after의 의미는 자동 구성이 실행되는 순서를 지정한 것이다.
  • @ConditionalXxxx: IF문과 유사한 기능을 제공한다. 자동 구성의 핵심이다.
  • @Import: 스프링에서 자바 설정을 추가할 때 사용한다.

@Conditional

같은 소스 코드인데 특정 상황일 때만 특정 빈들을 등록해서 사용하도록 도와주는 기능이 바로 @Conditional이다.

이 기능을 사용하려면 Condition 인터페이스를 구현해서 사용해야 한다.

스프링은 이미 수많은 @Conditional 시리즈를 제공하고 있다. 몇가지만 살펴보자.

 

  • @ConditionalClass: 클래스가 있는 경우에만 동작한다.
  • @ConditionalOnProperty: 환경 정보가 있는 경우에만 동작한다.
  • @ConditionalOnResource: 리소스가 있는 경우에만 동작한다.
  • @ConditionalOnWebApplication: 웹 애플리케이션인 경우 동작한다.

@AutoConfiguration

스프링 부트가 제공하는 자동 구성 기능을 적용할 때 사용하는 애노테이션이다.

자동 구성 대상 지정

스프링 부트 자동 구성을 적용하려면, 다음 파일에 자동 구성 대상을 꼭 지정해주어야 한다.

그래야만 스프링 부트가 파일을 읽어서 스프링 부트 자동 구성으로 사용한다.

 src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

위 파일에 자동 구성 클래스의 패키지를 포함해서 지정해야 한다.

ImportSelector

@EnableAutoConfiguration 애노테이션이 붙어있어야 자동 구성을 활성화된다.

@SpringBootApplication은 메타 애노테이션으로 @EnableAutoConfiguration를 가지고 있다.

@EnableAutoConfiguration

그러면 여기에서 AutoConfigurationImportSelector가 보이는데 이는 ImportSelector의 구현체다.

@Import(ImportSelector)를 사용하면 코드로 프로그래밍해서 설정으로 사용할 대상을 동적으로 지정할 수 있다.

 

AutoConfigurationImportSelector는 ImportSelector의 구현체이므로 설정 정보를 동적으로 선택할 수 있다.

실제로 이 코드는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 경로의 파일을 확인한다. 그리고 파일을 읽어서 설정 정보로 선택한다.

 

코드를 좀 더 살펴보았다.

AutoConfigurationImportSelector 메서드 getCandidateConfigurations

그럼 ImportCandidates 클래스의 정적 메서드 load가 보인다. 들어가서 살펴보자.

위 메서드를 우리의 실습에 대입해보면 여기서 아래 경로에 있는 파일을 찾아서 자동 구성을 지정할 클래스의 이름을 리턴할 수 있게 해준다.

 src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

빈 등록 후 설정 정보 세팅

이렇게 스프링 빈의 자동 등록을 살펴보았다. 그럼 빈을 등록할 때 설정 정보는 어떻게 입력해야 할까??

이는 아래 포스팅에서 나오는 @ConfigurationProperties를 사용한 것이다.

https://devdebin.tistory.com/276

 

@Value, @ConfigurationProperties, @Profile

@Value @Value를 사용하면 외부 설정값을 편리하게 주입받을 수 있다. 물론 @Value도 내부에서 Environment를 사용한다. @Slf4j @Configuration public class MyDataSourceValueConfig { @Value("${my.datasource.url}") private String ur

devdebin.tistory.com

@ConfigurationProperties를 사용하면 빈 후처리기를 통해서 스프링 빈으로 등록 후 설정 값을 주입해준다고 한다.

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

참고 자료

https://www.inflearn.com/course/%ED%86%A0%EB%B9%84-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%9D%B4%ED%95%B4%EC%99%80%EC%9B%90%EB%A6%AC/dashboard

 

토비의 스프링 부트 - 이해와 원리 - 인프런 | 강의

스프링 부트의 핵심 기능을 직접 만들어보면서 스프링 부트의 동작 원리를 이해하고, 이를 통해 스프링 부트를 잘 학습하고 사용하는 방법을 배우는 강의입니다. 스프링 부트가 사용하는 스프

www.inflearn.com

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%ED%95%B5%EC%8B%AC%EC%9B%90%EB%A6%AC-%ED%99%9C%EC%9A%A9/dashboard

 

스프링 부트 - 핵심 원리와 활용 - 인프런 | 강의

실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형

댓글