Spring Boot Configuration Processor
스프링 부트 Configuration Processor는 스프링 부트 프로젝트에서 사용되는 어노테이션 프로세서입니다. 이 프로세서는 @ConfigurationProperties 어노테이션으로 마킹된 클래스들을 처리하고, 해당 클래스들의 설정 값을 바인딩하여 사용할 수 있게 해줍니다.
Configuration Processor는 스프링 부트의 자동 구성 기능을 향상시키고, 애플리케이션 설정을 더 쉽게 관리할 수 있게 도와줍니다. 이를 통해 개발자는 application.properties나 application.yml 파일에 작성된 설정 값을 자동으로 매핑하여 사용할 수 있습니다.
이 프로세서는 스프링 부트의 의존성으로 제공되며, 일반적으로 추가적인 설정이 필요하지 않습니다. 하지만 경우에 따라서는 spring-boot-configuration-processor 라이브러리를 추가해야 할 수도 있습니다. 이 라이브러리는 META-INF/spring-configuration-metadat.json 파일을 생성하여 IDE에서 설정 값을 자동완성해주는 기능을 제공합니다.
참고로, Configuration Processor는 스프링 부트 2.2 버전부터 사용 가능한 기능입니다.
메타데이터 란?
메타데이터는 데이터에 대한 데이터를 의미합니다. 즉, 데이터를 설명하거나 데이터에 대한 추가적인 정보를 담고 있는 데이터를 말합니다.
스프링 부트의 Configuration Processor에서 말하는 메타데이터는 설정 값에 대한 정보를 담고 있는 파일입니다.
메타데이터를 사용하는 이유
- 설정 값의 자동 완성
- 메타데이터를 사용하면 IDE에서 설정 값을 자동 완성해주는 기능을 제공할 수 있습니다. 메타데이터 파일에는 설정 값의 프로퍼티 이름, 타입, 설명 등의 정보가 포함되어 있으므로, IDE는 이 정보를 활용하여 개발자에게 올바른 설정 값을 제안하고 완성해줍니다. 이는 개발자가 설정 값을 빠르게 작성하고 올바른 값을 선택할 수 있도록 도와줍니다. - 설정 값의 타입 변환
- 메타데이터를 사용하면 설정 값의 타입 변환을 자동으로 처리할 수 있습니다. 메타데이터 파일에는 설정 값의 타입 정보가 포함되어 있으므로, IDE나 스프링 부트는 설정 값을 올바른 타입으로 변환하여 사용할 수 있습니다. 이는 개발자가 설정 값을 사용할 때 타입 변환에 대해 신경쓰지 않아도 되도록 도와줍니다. - 설정 값의 문서화
- 메타데이터를 사용하면 설정 값에 대한 추가적인 정보를 제공할 수 있습니다. 메타데이터 파일에는 설정 값의 설명, 예시 값 등을 포함할 수 있으므로, 개발자는 이 정보를 참고하여 설정 값을 이해하고 사용할 수 있습니다. 이는 설정 값의 문서화를 향상시키고, 다른 개발자가 프로젝트를 이해하는 데 도움을 줍니다. - 커스텀 설정 값 지원
- 메타데이터를 직접 작성하면 커스텀한 설정 값을 지원할 수 있습니다. 스프링 부트의 Configuration Processor는 자동으로 메타데이터 파일을 생성하지만, 직접 메타데이터 파일을 작성하면 특정한 설정 값에 대한 추가적인 정보를 제공하거나 커스텀한 설정 값을 지원할 수 있습니다.
사용방법
1. 의존성 추가
Maven을 사용하는 경우 pom.xml 파일에 다음과 같이 의존성을 추가합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
Gradle을 사용하는 경우 build.gradle 파일에 다음과 같이 의존성을 추가합니다.
dependencies {
// ...
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
// ...
}
2. 설정 클래스 작성
@ConfigurationProperties 어노테이션을 사용하여 설정 값을 바인딩할 클래스를 작성합니다.
이 클래스는 일반적으로 @Configuration 어노테이션과 함께 사용됩니다.
@Configuration
@ConfigurationProperties(prefix = "daddydontsleep")
public class DaddyDontSleepProperties {
private String name;
private String version;
// ... (getter, setter 생략 또는 롬복)
}
위의 예시에서는 daddydontsleep 프리픽스로 시작하는 설정 값을 DaddyDontSleepProperties 클래스의 필드에 바인딩합니다. 필요한 설정 값에 따라 필드를 추가하고, 해당 필드의 getter와 setter를 작성해야 합니다.
3. 주입 및 사용
설정 값을 사용하는 클래스 작성 설정 값을 사용할 클래스에 DaddyDontSleepProperties를 주입받아 사용합니다.
@Service
public class DaddyService {
private final DaddyDontSleepProperties daddyDontSleepProperties;
public DaddyService(DaddyDontSleepProperties daddyDontSleepProperties) {
this.daddyDontSleepProperties = daddyDontSleepProperties;
}
public void doSomething() {
// daddyDontSleepProperties 사용
String appName = daddyDontSleepProperties.getName();
String appVersion = daddyDontSleepProperties.getVersion();
// ...
}
}
위의 예시에서는 DaddyService 클래스에서 DaddyDontSleepProperties를 주입받아 사용하고 있습니다.
doSomething() 메서드에서는 DaddyDontSleepProperties에서 읽어온 설정 값을 활용하여 원하는 작업을 수행할 수 있습니다.
이렇게 설정 클래스와 값을 사용하는 클래스를 작성하면, Configuration Processor가 설정 값을 자동으로 바인딩해 주고, 주입된 설정 값을 활용할 수 있게 됩니다.
추가적으로, application.properties 또는 application.yml 파일에 설정 값을 작성하면 해당 값들이 자동으로 바인딩됩니다. 예를 들어, daddydontsleep.name=DaddyDontSleep과 같이 작성하면 DaddyDontSleepProperties의 name 필드에 "DaddyDontSleep"이 할당됩니다.
Configuration Processor를 사용하지 않고 설정 값을 가져오는 방법
1. @Value 어노테이션 사용
가장 많이 사용하고있는 방법일겁니다. @Value 어노테이션을 사용하여 설정 값을 가져올 수 있습니다. 이 어노테이션을 필드에 적용하고, `${}`를 사용하여 설정 키를 지정합니다.
@Service
public class DaddyService {
@Value("${daddydontsleep.name}")
private String name;
@Value("${daddydontsleep.version}")
private String version;
// ...
}
2. Environment 객체 사용
이 방법은 저도 글을 작성하기위해 조사하면서 알게된 방법입니다.
스프링의 Environment 객체를 사용하여 설정 값을 가져올 수 도 있습니다.
Environment 객체를 @Autowired를 통해 주입받습니다.
@Service
public class DaddyService {
@Autowired
private Environment env;
public void doSomething() {
String name = env.getProperty("daddydontsleep.name");
String version = env.getProperty("daddydontsleep.version");
// ...
}
}
3. ConfigurationPropertiesScan 어노테이션 사용 (Spring Boot 2.2 이상)
Spring Boot 2.2 버전부터는 ConfigurationPropertiesScan 어노테이션을 사용하여 설정 값을 바인딩할 클래스를 스캔할 수 있습니다.
이를 사용하면 COnfiguration Processor를 사용하지 않고도 설정 값을 자동으로 바인딩할 수 있습니다.
@Configuration
@ConfigurationPropertiesScan("com.tistory.daddydontsleep")
public class AppConfig {
// ...
}
위의 예시에서는 @ConfigurationPropertiesScan 어노테이션을 사용하여 `com.tistory.daddydontsleep` 패키지 내의 설정 클래스들을 스캔하고, 설정 값을 자동으로 바인딩합니다.
지금까지 Configuration Processor, 메타데이터(Metadata), 사용방법, 그 외 방법 등에 대해 알아보았습니다.
끝.
[reference]
https://jake-seo-dev.tistory.com/609#%EC%--%AC%EC%-A%A-%ED%--%--%EB%-A%--%--%EC%-D%B-%EC%-C%A-
https://www.baeldung.com/spring-boot-configuration-metadata
'Spring' 카테고리의 다른 글
[Spring; 스프링] JAR , WAR, EAR 차이점 및 특징 (0) | 2024.02.01 |
---|---|
[Spring; 스프링] Spring MVC 자동구성 제어 / WebMvcConfigurer vs WebMvcConfigurationSupport / Swagger (0) | 2024.01.05 |
[Spring; 스프링] JPA @Transient (0) | 2023.11.13 |
[Spring; 스프링] HttpServletRequest (0) | 2023.11.08 |
[Spring; 스프링] Spring Boot JPA Hibernate 초기화 전략 (0) | 2023.10.25 |