스프링 부트 자동 구성

2023. 3. 4. 07:05·개발/Spring Boot
반응형

스프링 부트의 자동 구성

스프링 부트는 자동 구성(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

 

반응형
'개발/Spring Boot' 카테고리의 다른 글
  • 스프링 부트 액츄에이터
  • 서블릿 컨테이너, 내장 톰캣과 스프링 부트
  • @Value, @ConfigurationProperties, @Profile
  • 외부설정과 프로필
Debin
Debin
공부 기록을 남기며 게시글 리팩토링을 진행하는 블로그입니다.
  • Debin
    리팩토링하는 블로그
    Debin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • DB
        • DB 기초
        • MySQL
        • SQL 튜닝
      • OS
      • Network
      • Git
      • 디지털콘텐츠기획
      • 소프트웨어공학
      • 코딩테스트
        • 프로그래머스
        • 백준
        • 인프런
      • 공부 일지
      • 독서
        • 클린코드
        • 일상 속 사물이 알려주는 웹 API 디자인
        • 토비의 스프링
        • 객체지향의 사실과 오해
        • 자바 잘 읽는 법
      • 기록 및 회고
      • Cloud
        • AWS
      • 개발
        • Java
        • Spring Core
        • Spring MVC
        • Spring DB
        • Spring Boot
        • Spring Security
        • Spring Batch
        • JPA
        • Test
        • Android
      • 대외활동
        • UMC SERVER
        • 카엔프 SW 아카데미
      • 프로젝트
      • Docker
      • Gradle
      • ELK
      • 실무 이야기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

    • 본인 깃허브입니다!
  • 인기 글

  • 태그

    AOP
    스프링
    test
    인덱스
    innodb
    자바
    spring boot
    객체지향
    코딩 #개발자 #노마드북클럽 #노개북
    spring
    운영체제
    도커
    docker
    데이터베이스
    redis
    container
    mysql
    객체
    리눅스
    ORM
    컨테이너
    트랜잭션
    프록시
    spring mvc
    SQL
    JPA
    스프링 부트
    AWS
    토비의 스프링
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
Debin
스프링 부트 자동 구성
상단으로

티스토리툴바