[SpringBoot] properties값 클래스로 매핑하기

Spring Boot로 개발을 하다 보면 application.properties에 설정값을 저장하여

사용하는 경우를 볼 수 있다.

간단하게 예시로 들어보면

# Config Class
config.test1=test
config.test2=111
config.test3=1.5
public Class ConfigSetting {

    @Value(${config.test1})
    private String test1

    @Value(${config.test2})
    private int test2

    @Value(${config.test3})
    private double test3

    //..... Config 설정
}

이러한 방법으로 application.properties의 설정값을 가져와서 사용할 수 있다.

그러나 이러한 설정값이 계속 늘어날수록 Class 변수는 수도 없이 많아지며

가독성 또한 떨어질 수 있다. 그리고 이와 같은 설정값을 여러 군대에서 사용한다면

또 하나씩 변수 선언해 주는 것도 번거로운 일이라 볼 수 있다.

이럴 때 할 수 있는 게 properties값으로 클래스와 매핑을 시켜 하나의 클래스로 관리하는 것이다.

이것 또한 간단한 예시로 알아보자

# Config Class
config.test1=test
config.test2=111
config.test3=1.5
config.testMap.test1=testMap
config.testMap.test2=222
config.testMap.test3=3.0

위와 같은 properties값이 있다고 가정하고 아래와 같은 클래스를 만들어보자.

@ConfigurationProperties(prefix = "config")
@Data
@Component
public class Config {
    private String test1;

    private int test2;

    private double test3;

    private Map < String, Object > testMap;
}

※ 이제 여기서 @EnableConfigurationProperties를 사용하여 @ConfigurationProperties 사용을 명시해 주어야 하지만 Spring Boot 공식 문서에 의하면 모든 프로젝트에 자동으로 @EnableConfigurationProperties가 포함되어 있다고 한다. 그러므로 따로 등록해 줄 필요가 없다

이제 스프링 부트를 다시 실행시켜 보며 해당 클래스의 값을 봐보겠다.

@RequiredArgsConstructor
@RestController
public class TestController {

    private final Config config;

    @GetMapping("/")
    public String root_test() throws Exception {
        System.out.println(config);
        return "Hello World";
    }
}
Config(test1=test, test2=111, test3=1.5, testMap={test1=testMap, test2=222, test3=3.0})

매핑이 정상적으로 잘 되어있는 걸 확인할 수 있다.

이제 설정값을 보다 쉽게 관리할 수 있게 되었다.

다른 글 읽어보기 ⬇️