EnvironmentPostProcessor랑 PropertySourceLocator 을 이용해서
기동 시점에 필요한 property 정보를 넘겨야 하는 일이 있었다.
그래서 spring이 구동될때 언제 어떤 정보가 있는지가
중요해서 정리 보았다.
Spring Boot/Cloud의 설정 적용 순서 (핵심만)
- bootstrap.yml (Spring Cloud가 있을 때만, 부트스트랩 컨텍스트에서 먼저 읽음)
- PropertySourceLocator(외부에서 값을 받아와 환경에 추가할 수 있음, 부트스트랩 단계)
- EnvironmentPostProcessor(application.yml 적용 전, 환경 가공)
- application.yml/properties(일반적인 설정)
- ApplicationContext 생성, @Bean 등등
1. SpringApplication 생성
2. ApplicationRunListeners 실행
└ ApplicationStartingEvent 발생
3. prepareEnvironment()
└ EnvironmentPostProcessor 실행 (1차, Main Context)
→ META-INF/spring.factories에 등록된 클래스
→ 예: AnyEnvironmentPostProcessor (1차 실행)
4. ConfigDataEnvironmentPostProcessor 실행
└ application.yml, profile 등 config data 로드
5. Spring Cloud: BootstrapApplicationListener 작동
└ bootstrap context 생성 (내부적으로 SpringApplication 또 만듦)
└ 이 과정에서 EnvironmentPostProcessor 다시 실행 (2차, Bootstrap Context)
→ 예: AnyEnvironmentPostProcessor (2차 실행)
└ PropertySourceLocator 실행
→ 예: AnyPropertySourceLocator.locate()
→ 외부 설정 서버에서 PropertySource 받아옴
└ 받은 PropertySource를 원래(main) context에 merge
6. main context 구성 재개
└ 받은 property를 포함해 Environment 구성됨
7. ApplicationContext 초기화, ApplicationRunner 실행 등...
'DEVELOP > Backend' 카테고리의 다른 글
| @Mock vs @Spy vs @InjectMock vs @MockBean (0) | 2025.11.21 |
|---|---|
| Spring AOP (2) | 2025.07.14 |
| LLM Application 개발 이란? (0) | 2023.12.07 |
| LangChain 이란? (2) | 2023.12.04 |
| jsonString의 다형성 (feat. Gson) (0) | 2022.04.05 |