본문 바로가기

Spring

Spring Boot 외부 설정 @Value, @ConfigurationProperties

728x90
반응형

스프링 부트 프로퍼티 파일은 설정이나 기타 정적인 값을 키값 형식으로 관리한다. 

이것을 이용하면 복잡한 XML설정을 하나의 파일로 관리할 수 있다. 

 

YAML 파일을 이용하면 깊이에 따라 관계를 구분 짓기 때문에 List, Set, Map  등 다양한 바인딩형 매핑이 가능하다. 

 

매핑 방식 중 유용하게 사용되는 @Value와 @ConfigurationProperties를 비교해본다.

처음 배우는 스프링부트2 

유연한 바인딩: 프로퍼티 값을 객체에 바인딩할 때 Camel표기법으로 선언하고 프로퍼티 키는 카멜, 케밥 등 다양한 표기법으로 선언해서 바인딩할 수 있다.

메타데이터 지원: 프로퍼티 키에 대한 정보를 메타데이터 파일로 제공한다. 이름, 타입, 디폴트값 등 힌트가 되는 정보를 얻을 수 있다. 

SpEL(Spring Expression Language, 스프링 표현언어) 평가: SpEL은 런타임에 객체 참ㅁ조에 대해 질의하고 조작하는 기능을 지원하는 언어다. @Value만 사용 가능하다.

 

@Value


프로퍼티 키를 사용해서 특정 값을 호출할 수 있다. 

application.yml

property:
  test:
    name: hiProperty

propertyList : a,b,c

PropertyTest.java

@SpringBootTest
public class PropertyTest {

    @Value("${property.test.name}")
    private String propertyTestName;

    @Value("${propertyList}")
    private List<String> propertyList;

    @Value("#{'${propertyList}'.split(',')}")
    private List<String> proList;


    @Test
    public void getPropertyName() {
        assertThat(propertyTestName, is("hiProperty"));
        assertThat(propertyList.size(), is(3));
        assertThat(propertyList.get(0), is("a"));
        assertThat(proList.size(), is(3));
        assertThat(proList.get(1), is("b"));
    }
}

propertyList를 리스트로 직접 받을 수도 있고 split해서 사용할 수도 있다.

단일 값 매핑과 배열, List 매핑 모두 가능하다.

 

@ConfigurationProperties


property 키값의 prefix가 같을 경우 그것을 묶어서 Bean 으로 등록할 수 있다. 

country:
  list:
    - name : Korea
      capital : Seoul
    - name : Japan
      capital : Tokyo
    - name : China
      capital : Beijing

@Getter
@Setter
@ToString
@Component
@ConfigurationProperties(prefix = "country")
public class CountryProperty {

    private List<Country> list;

    @Getter
    @Setter
    @ToString
    public static class Country {
        private String name;
        private String capital;
    }

}

@ConfigurationProperties를 추가하면 메타데이터를 생성해 자동완성 기능을 가능하게 해주는 의존성을 추가해야한다.

implementation group: 'org.springframework.boot', name: 'spring-boot-configuration-processor', version: '2.6.3'

configuration-processor 의존성을 추가해준다. 

 

testImplementation 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

테스트에서 사용하면 test에도 추가해줘야 한다.

 


@SpringBootTest
public class PropertyTest {


    @Autowired
    CountryProperty property;

    @Test
    public void getConfigurationProperty() {
        assertThat(property.getList().size(), is(3));
        assertThat(property.getList().get(0).getName(), is("Korea"));
    }
}

테스트를 진행하면 성공한다.

 

728x90
반응형