다시 웹, 백엔드로/스프링

외부 설정 사용 - @ConfigurationProperties

EnoughTT 2023. 9. 12. 13:08

외부 설정 사용 - @ConfigurationProperties

 

Type-safe Configuration Properties

스프링은 외부 설정의 묶음 정보를 개체로 변환하는 기능을 제공함, 타입 안전한 설정 속성

객체를 사용하면 타입을 사용할 수 있음, 잘못된 타입 입력 방지 등 활용할 수 있는 부분들이 많아짐

설정 정보 그 자체도 타입을 가지게 됨

 

  • 외부 설정을 주입 받을 객체를 생성, 각 필드의 외부 설정의 키 값에 맞춰서 준비
  • @ConfigurationProperties 어노테이션이 있으면 외부 설정을 주입 받는 객체라는 뜻
  • 기본 주입 방식은 자바빈 프로퍼티 방식

 

  • @EnableConfigurationProperties(MyDataSourcePropertiesV1.class)
    • 스프링에게 사용할 @ConfigurationProperties 을 지정해주어야 함
    • private final MyDataSourcePropertiesV1 properties 설정 속성을 생성자를 통해 주입 받아 사용

 

출력

 

ConfigurationProperties 를 사용하면 타입 안전한 설정 속성을 사용 할 수 있음

 

실행

  • 숫자가 들어와야하는데 문자가 들어와 오류 발생
  • ConfigurationProperties 으로 만든 외부 데이터는 타입에 대해서 믿고 사용할 수 있음

 

 

표기법 변환

maxConnection 은 표기법이 다름 스프링은 캐밥 표기법을 자바 낙타 표기법으로 자동으로 변환 시켜줌

 

@ConfigurationPropertiesScan

@ConfigurationProperties 를 하나하나 직접 등록 할 때는 @EnableConfigurationProperties 를 사용

@ConfigurationProperties 를 특정 범위로 자동 등록 할 때는  @ConfigurationPropertiesScan 을 사용

 

 

 

문제점

MyDataSourcePropertiesV1 은 스프링 빈으로 등록됨, 하지만 Setter 를 가지고 있기 때문에 값을 변경하는 문제가 발생됨, 이럴때 Setter 를 제거하고 대신에 생성자를 사용하면 중간에 데이터를 변경하는 실수를 근본적으로 방지할 수 있음

 

 

 

 

 

 

 

 

 

feat. 스프링부트 - 핵심 원리와 활용 (김영한)

'다시 웹, 백엔드로 > 스프링' 카테고리의 다른 글

@ConfigurationProperties 검증  (0) 2023.10.30
외부설정사용 - @ConfigurationProperties 생성자  (1) 2023.10.22
외부 설정 사용 - @Value  (0) 2023.09.12
외부설정 사용 - 1  (0) 2023.09.07
우선순위  (0) 2023.09.05