@Value & @ConfigurationProperties

Daniel·2023년 7월 11일
0

Back-End

목록 보기
21/48

두 어노테이션 모두 Spring Framework 애플리케이션에서 속성의(.yml, .properties)의 구성 및 바인딩을 위해 사용되는 어노테이션 입니다. 두 어노테이션의 차이에 대해 알아보려고 합니다.

@Value

  • 개별 속성 값을 특정 필드 또는 생성자 매개 변수에 주입하는 데 사용됩니다.
  • 고급 값 분석 및 조작을 위해 SpEL(Spring Expression Language)을 지원합니다.
  • 유연하며 @Component로 주석이 지정되지 않은 것을 포함하여 모든 관리 빈에서 사용할 수 있습니다.
  • 적은 수의 속성이나 단일 값을 주입하는 데 적합합니다.
user:
	name: Daniel
	age: 31
public class User {
	
	@Value("${user.name}")
	private String name; // Daniel
	
	@Value("${user.age}")
	private int age; // 31
	
}
  • 장점:

    • 개별 속성 값을 주입하기 위한 간단하고 간결한 구문.
    • SpEL을 사용한 동적 표현 평가를 지원합니다.
  • 단점:

    • 여러 속성을 주입할 때 장황하고 반복될 수 있습니다.
    • 복잡한 구성 개체에 대한 형식 안전성 및 유효성 검사가 부족합니다.(Ex. 중첩구조)

@ ConfigurationProperties

  • 관련 속성 그룹을 전용 구성 클래스에 바인딩하는 데 사용됩니다.
  • 계층적 속성 구조를 지원하며 속성을 접두사로 매핑할 수 있습니다.
  • 구성 개체에 대한 형식 안전성 및 유효성 검사를 제공합니다.
  • 추가 주석을 통해 속성 기본값, 변환 및 유효성 검사와 같은 기능을 지원합니다.
  • @ConfigurationPropertiesScan 및 구성 클래스로 적절한 설정이 필요합니다.
dependencies {
	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
}

// ...

tasks.named('compileJava') {  
	inputs.files(tasks.named('processResources'))  
}
@SpringBootApplication  
@ConfigurationPropertiesScan(basePackages = "")
public class SburRestDemoApplication {  
  
	public static void main(String[] args) {  
		SpringApplication.run(SburRestDemoApplication.class, args);  
	}  
  
}

매개변수로 패키지를 지정하지 않으면 기본으로 어노테이션이 붙은 패키지와 하위 패키지 대상으로 스캔을 진행한다.

@Bean
@ConfigurationProperties("example")
class example {
	private String name;
	private String age;
}
@SpringBootApplication  
public class SburRestDemoApplication {  
  
	public static void main(String[] args) {  
		SpringApplication.run(SburRestDemoApplication.class, args);  
	}  
  
}
  • 장점:

    • 관련 속성의 중앙 집중식 관리 및 바인딩을 가능하게 합니다.
    • 형식 안전성, 유효성 검사 및 계층적 속성 구조를 지원합니다.
    • 대규모 속성 집합을 보다 쉽게 ​​관리하고 구성할 수 있습니다.
  • 단점:

    • @Value에 비해 더 많은 초기 설정 및 구성이 필요합니다.
    • 간단한 사용 사례에는 필요하지 않을 수 있는 전용 구성 클래스 생성이 필요합니다.

전반적으로 @Value는 특히 동적 평가가 필요한 경우 몇 가지 개별 속성 값을 주입하는 데 적합합니다. 반면에 @ConfigurationProperties는 더 큰 관련 속성 집합을 관리하고 형식 안전성, 유효성 검사 및 계층 구조를 제공하는 데 적합합니다.

profile
응애 나 애기 개발자

0개의 댓글