Spring/etc

[Spring] 스프링부트 spring.factories 파일

  • -

 

org.springframework.boot:spring-boot-{module}.jar 파일을 들여다보면 

META-INF 폴더하위에 spring.factories 파일이 존재한다.

해당 파일이 하는 역할이 무엇인지, 내용들은 어떤 걸 의미하는지 알아보자. 

 

spring.factories 

Spring Boot는 spring.factories 파일을 통해 특정 클래스들을 자동으로 로드할 수 있다.
JAR 파일 내부의 META-INF/spring.factories 경로에 위치하며, SpringFactoriesLoader가 읽어 들이는 방식으로 동작한다.

 

주요 역할

  • 자동 설정(Auto-Configuration)
    • org.springframework.boot.autoconfigure.EnableAutoConfiguration 키에 등록된 클래스들이 자동 설정
    • 다만, Spring Boot 2.7 이후부터는 spring.factories 대신 
      META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일을 사용하도록 변경
  • 확장 포인트 제공
    • 리스너 등록(ApplicationListener, ApplicationContextInitializer)
    • FailureAnalyzer, ConditionEvaluator, EnvironmentPostProcessor 등

확장 포인트

확장 포인트 설명
org.springframework.context.ApplicationListener Spring 애플리케이션 이벤트 리스너 등록
org.springframework.context.ApplicationContextInitializer ApplicationContext 초기화 시 실행되는 클래스 등록
org.springframework.boot.diagnostics.FailureAnalyzer 애플리케이션 실행 중 발생하는 예외를 분석하고 친절한 메시지를 제공
org.springframework.boot.env.EnvironmentPostProcessor Environment 객체가 로드된 후 환경을 추가적으로 수정
org.springframework.boot.autoconfigure.AutoConfigurationImportListener @EnableAutoConfiguration 동작을 감시하는 리스너
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter 자동 설정(Auto-Configuration) 클래스를 필터링하는 역할
org.springframework.boot.CommandLineRunner 애플리케이션이 실행된 후 추가적인 로직을 실행
org.springframework.boot.ApplicationRunner CommandLineRunner와 유사하지만 ApplicationArguments를 지원
org.springframework.boot.web.servlet.ServletContextInitializer 서블릿 컨텍스트 초기화 작업을 수행
org.springframework.boot.web.servlet.ServletListenerRegistrationBean 서블릿 리스너를 등록

 

BootstrapConfiguration

추가적으로, 해당 파일의 내용을 조사하게 된 이유 중에 하나인 

org.springframework.cloud.bootstrap.BootstrapConfiguration 확장 포인트에 대한 내용을 정리해 보자. 

 

BootstrapConfiguration은 Spring Cloud에서 설정을 bootstrap 단계에서 먼저 로드하는 용도로 사용 
기본적으로 Spring Boot는 application.yml 설정을 Environment에 로드한 뒤, @Configuration 클래스들을 초기화한다.

다만, Spring Cloud 환경에서는 Spring Cloud Config Server, Service Discovery, 암호화 설정 등을 더 먼저 로드해야 할 수도 있다. 
이럴 때 spring.factories의 org.springframework.cloud.bootstrap.BootstrapConfiguration을 사용하면 된다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.