본문 바로가기

Spring Boot

[Spring Boot] @Value와 @ConfigurationProperties 차이점

728x90

Spring Boot에서 애플리케이션 설정 값을 외부에서 주입받아 사용하는 방법 중 두 가지 주요 방법은 @Value@ConfigurationProperties입니다. 이 두 가지 방법의 사용법과 차이점을 설명하겠습니다.

@Value 사용법

@Value 애노테이션은 주로 개별 속성 값을 주입받을 때 사용됩니다. 주입하려는 속성 값을 애플리케이션 설정 파일(application.properties 또는 application.yml)에서 정의한 후, 해당 값을 주입받을 필드에 @Value 애노테이션을 사용합니다.

  1. application.properties 또는 application.yml 파일에 설정 값 정의:
# application.properties
app.name=MyApp
app.version=1.0.0
# application.yml
app:
  name: MyApp
  version: 1.0.0
  1. @Value 애노테이션을 사용하여 값 주입:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class AppConfig {

    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    // Getters
    public String getAppName() {
        return appName;
    }

    public String getAppVersion() {
        return appVersion;
    }
}

@ConfigurationProperties 사용법

@ConfigurationProperties 애노테이션은 그룹화된 속성 값을 주입받을 때 사용됩니다. 이를 통해 특정 접두사로 시작하는 모든 설정 값을 객체로 매핑할 수 있습니다. 주로 설정 값을 한 번에 여러 개 주입받아야 할 때 유용합니다.

사용법

  1. application.properties 또는 application.yml 파일에 설정 값 정의:
# application.properties
app.name=MyApp
app.version=1.0.0
app.description=This is my application
# application.yml
app:
  name: MyApp
  version: 1.0.0
  description: This is my application
  1. @ConfigurationProperties 애노테이션을 사용하여 값 주입:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "app")
public class AppProperties {

    private String name;
    private String version;
    private String description;

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}
  1. @EnableConfigurationProperties 애노테이션을 사용하여 활성화:
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class AppConfig {
}

차이점

특성 @Value @ ConfigurationProperties
용도 개별 속성 값을 주입받을 때 사용 그룹화된 속성 값을 객체로 매핑할 때 사용
설정 방식 단일 속성을 주입받기 위해 ${} 구문 사용 접두사(prefix)를 사용하여 관련된 속성들을 객체로 매핑
타입 변환 주입받을 때 타입 변환이 자동으로 수행되지 않음 자동으로 타입 변환 수행
유연성 간단한 값 주입에 적합 복잡한 설정 값을 주입받을 때 더 유용
바인딩 방식 SpEL (Spring Expression Language) 사용 표준 바인딩 방식 사용

 

 

@ConfigurationProperties 를 등록하려고 하면 아래의 문구가 나오는데 의존성을 주입해주면 사라진다.

 

Spring Boot Configuration Annotation Processor not found in classpath

dependencies {
    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}

 

 

이 두 가지 방법을 적절히 활용하면 Spring Boot 애플리케이션의 설정 값을 효과적으로 관리할 수 있습니다. @Value는 간단한 설정에, @ConfigurationProperties는 복잡한 설정에 적합합니다.