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

섹션 7 조건부 자동 구성

by 문자메일 2024. 6. 3.

스타터와 Jetty 서버 구성 추가

 

 

 

@Conditional과 Condition

 

@Conditional 학습테스트

 

커스텀 @Conditional

 

 

자동 구성 정보 대체하기

=> 자동 구성 정보라는게 이제는 대충 어떤 뜻인지 알겠음, 사용자 구성 정보 Bean들은 스프링 부트 프로젝트 실행 이후 사용자가 직접 만든 로직을 가지고 있는 클래스를 말하고, 이건 컴포넌트 스캔 이라는 방식으로 등록됨. 

자동 구성 정보 는 사용자가 직접 만든 클래스(빈)이 아니라, 스프링 프로젝트에 기존에 이미 만들어져 있는 클래스(빈, 아마 대부분 인프라 스트럭처 빈)들을 말하는 것이였고, 이 빈들은 '자동 구성 정보'(Auto Configuration) 방식으로 스프링 컨테이너에 등록이 된다는 것!

 

애플리케이션의 로직을 담당하는 빈들은 사용자 구성 정보 방식으로 등록하고 주로 컴포넌트 스캔에 의해서 등록을 시킨다.

일정한 패키지 밑에다가 빈 클래스들을 몰아넣는다.

 

그리고 주로 기술과 관련된 빈들은 스프링 부트의 자동 구성 동작 방식에 의해서 자동으로 등록되게 만든다.

그래서 개발자들이 이 기술과 관련된 빈 들을 신경 쓰지 않고 빠르게 개발할 수 있다.

자동 구성 정보(Auto Configuration)은 어떤 방식으로 동작하느냐, 아무것도 하지 않아도 기본적으로 스프링 부트, 그리고 강의에서 지금까지 흉내 내서 작업하고  있는 시스템에서는 MyAutoConfiguration이라는 annotation 이름과 일치하는 import라는 파일에 빈 등록 정보로 등록할 후보가 될 configuration 파일의 목록이 들어 있다.

그래서 이 파일에(MyAutoConfiguration.imports) 있는 모든 Configuration 클래스들을 다 찾아와서 이거를 후보로 선정해 놓고, 그 다음에 각 Configuration 클래스에 달려 있는 @Conditional Annotation을 보고 이 빈을 등록할 것인가 말 것인가 이걸 결정한다.

 

 

위 이미지에서 처럼 스프링에서 자동 구성 정보로 만들어주는 인프라 스트럭처 빈을, 사용자가 직접 만들어서 등록하려면 위 이미지 2개 참조한 로직으로 설정이 가능하다.

사용자 구성 정보 영역에 인프라 스트럭처 빈을 만들고, 해당하는 빈과 동일한 이름의 빈을 자동 구성 영역에 @ConditionalOnMissingBean 어노테이션을 붙여서 사용자가 만든 빈이 없으면 해당 스프링 자동 구성 빈을 사용하도록 설정이 가능하다.

 

 

 

 

 

댓글