본문 바로가기
스프링 관련/토비의 스프링 부트 - 이해와 원리

섹션 8. 외부 설정을 이용한 자동 구성

by 문자메일 2024. 6. 6.

Environment 추상화와 프로퍼티

 

해당 섹션에서는 외부 설정을 활용하는 스프링 부트의 자동 구성을 살펴본다.

자동 구성은 왜 필요한가?

-> 스프링 부트가 우리를 대신해서 어떤 기술의 인프라스트럭처 빈의 Configuration 클래스를 미리 다 만들어 놓은 것이다.

그 기술을 사용하는데 필요로 하는 빈 인스턴스를 생성하는 빈 구성정보 클래스들을 만들어놓고 이걸 가져다 사용하라고 하는 것이다. 

근데 Spring Boot가 뽑아 놓은 Configuration 클래스만 150개 가까이 되고, 그 전체 목록이 .imports로 끝나는 파일에 들어있다고 이야기를 했었다.

.imports에 들어있는 모든 Bean을 무조건 다 적용하는 것은 아니고, 이것은 일단 후보로 로딩이 되고 @Conditional 이라는 Spring에 빈 구성 정보를 등록할까 말까 결정하는 체크방식에 의해서 하나씩 검증을 거쳐서 최종적으로 현재 애플리케이션에 적용할 빈 구성 정보를 결정한다.

=> 구성정보 configuration 리스트 정보만 로딩한다는 의미인듯, .imports 파일에 적힌 클래스 정보는 실제 에플리케이션에 의존성 등록되어 있다면, 뒷 단계에서 체크해서 Bean으로 등록됨

 

첫 번째는 일반적으로 클래스가 존재하는가 이걸 가지고 먼저 체크한다.

Configuration 클래스 레밸에서 Boot가 제공하는 스타터라든지 아니면 어떤 라이브러리를 사용하겠다고 Dependency를 등록한 경우에 그에 따르는 클래스들이 클래스 path에 잡히게 되고, 이런 클래스가 존재한다면 이 구성 정보를 사용하겠다.

이것을 체크하는 과정이 첫 번째 Conditional 체크 과정이다.

=> 아래 프로젝트 종속성에 @ConditionalMyOnClass("org.apache.catalina.startup.Tomcat")에 해당하는 클래스가 있으므로 Configuration 클래스는 Bean 자동구성 항목에 추가되는 듯 하다.

다만 메소드에 붙은 Bean은 자동구성 항목에 추가 할 지 @Conditional 조건 추가로 확인한다.

 

이후 사용자가 직접 등록한 Bean이 있다면 사용자 생성 Bean이 등록되고, 아니면 자동 구성으로 세팅되어 있는 Bean 구성 정보가 등록이 된다.

 

 

 

 

자동 구성에 Environment 프로퍼티 적용

Properties 우선순위

EnviromentVariable > ApplicationProperties  

 

1. ApplicationProperties

 

2. EnvironmentVariable

 

3. SystemProperty

댓글