외부속성(.yml, .properties)의 속성들에 접근하기 위해 아래의 어노테이션을 많이 사용한다.
두 어노테이션의 차이점을 알아보자

@Configurationproperties

  • 외부 구성 속성을 Java 개체에 바인딩하는 안전한 방법입니다.
  • 일반적으로 관련 속성 그룹을 단일 개체에 바인딩하는 데 사용됩니다.
  • 전용 구성 속성 클래스를 만들고 클래스 수준에서 @ConfigurationProperties 주석을 사용해야 합니다.
  • 접두사 및 중첩 개체를 사용하여 속성을 계층적으로 바인딩할 수 있습니다.
  • Spring의 ConversionService를 통해 유효성 검사 및 데이터 변환을 지원합니다.
  • 애플리케이션 구성 파일(application.properties 또는 application.yml), 환경 변수 또는 명령줄 인수와 같은 다양한 외부 소스에서 속성을 정의할 수 있는 Spring Boot와 함께 자주 사용됩니다.

Example

database.url=jdbc:mysql://localhost:8080/mydb
database.username=admin
database.password=secret
@ConfigurationProperties(prefix = "database")
public class DatabaseProperties {
    private String url;
    private String username;
    private String password;
    
    // Getters and setters
}

바인딩 된 객체를 빈으로 등록해 사용하는 방법

  1. 기본 애플리케이션 클래스에 주석을 포함하는 방법
@SpringBootApplication
@EnableConfigurationProperties(DatabaseProperties.class)
public class MyAppApplication {
    // Main method and other code
}
  1. 바인딩된 DatabaseProperties 객체에 @Component 를 붙여 사용하는 방법
    여러 객체가 있다면 이 방법이 좀 더 좋을 것 같다.

@Value

  • 단일 속성 값을 필드 또는 메서드 매개 변수에 직접 주입하는 데 사용됩니다.
  • 관련된 속성의 그룹보다는 특정 속성 값을 주입하는 데 적합합니다.
  • @Value("${property.name}")와 같은 SpEL(Spring Expression Language) 구문을 사용하여 속성에 액세스할 수 있습니다.
  • 계층적 바인딩이나 중첩 개체는 지원하지 않습니다. 각 속성은 @Value로 개별적으로 주석을 달아야 합니다.
  • @ConfigurationProperties에 비해 유효성 검사 및 데이터 변환 측면에서 유연성이 떨어집니다.
  • Spring Boot뿐만 아니라 모든 Spring 애플리케이션에서 사용할 수 있습니다.

Example

database.url=jdbc:mysql://localhost:8080/mydb
database.username=admin
database.password=secret
@Component
public class DatabaseProperties {
	
	@Value("${database.url}")
    private String url;
    
	@Value("${database.username}")
    private String username;
    
    @Value("${database.password}")
    private String password;
    
    // Getters and setters
}

Note

@ConfigurationProperties는 관련 속성 및 계층적 바인딩 그룹을 처리할 때 선호되는 반면 @Value는 개별 속성 값을 필드 또는 메서드 매개 변수에 직접 주입하는 데 유용하다. 두 주석 중 상황에 따라 적절한 어노테이션을 선택해 사용해보자!

profile
응애 나 애기 개발자

0개의 댓글