Cloud Native Java 따라하기 2
by Jeongjin Kim
앞선 Cloud Native Java 포스트에서는 스프링 프레임워크에서 어떻게 설정 값을들 객체와 매핑하여 사용할 수 있는지 설정했다. 스프링부트에서는 어떻게 쓸 수 있는지 알아보자.
스프링 부트 방식의 설정
설정정보의 우선순위
- 명령행 인자
- java:comp/env에 있는 JNDI 속성
- System.getProperties()로 읽어오는 속성
- 운영체제의 환경 변수
- jar 외부에 존재하는 application.properties파일이나application.yml파일에 정의된 속성
- jar 내부에 존재하는 application.properties파일이나application.yml파일에 정의된 속성
- @Configuration이 붙은 클래스에- @PropertySource로 지정된 곳에 있는 속성
- SpringApplication.getDefaultProperties()로 읽어올 수 있는 기본값
특정 프로파일이 활성화되어 있으면 프로파일 이름을 기준으로 src/main/resources/application-활성프로파일이름.properties 파일에 있는 속성 정보를 자동으로 일어올 수 있다.
클래스 패스에 SnakeYAML 라이브러리가 있으면 자동으로 YAML 파일에서도 properties 파일과 같은 방식으로 속성정보를 가져올 수 있다.
$CONFIGURATION_PROJECT 라는 환경변수를 사용하거나 -Dconfiguration.projectname 옵션을 추가해서 스프링부트 애플리케이션을 실행하면 소스코드에서 configuration.projectName 이라는 키로 설정값을 읽어올 수 있다.
프로젝트에서 스프링부트를 사용할 수 있도록 pom.xml 을 변경하자. parent에 spring-boot-starter-parent 를 선언했다. 이걸 이용하면 하위 의존성 추가할때 버전을 귀찮게 맞춰야 하는 일을 덜 수 있다. 추가적으로 편의를 위해 lombok 을 의존성에 넣었다.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cothe</groupId>
    <artifactId>springConfigurer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>
SpringbootConfigApplication.java
package cothe;
@EnableConfigurationProperties // 스프링에게 설정정보를 @ConfigurationProperties 가 붙은 POJO 에 매핑하라고 알려줌
@SpringBootApplication
@Slf4j
public class SpringbootConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootConfigApplication.class);
    }
    @Autowired
    public SpringbootConfigApplication(ConfigurationProjectProperties cp){
        log.info("configurationProjectProperties.projectName = {}", cp.getProjectName());
    }
}
@Component // configuration 으로 시작하는 설정값은 @ConfigurationProperties("configuration") 이 붙은 빈에 매핑됨
@ConfigurationProperties("configuration")
@Getter
@Setter
class ConfigurationProjectProperties{
    private String projectName; // configuration.projectName 으로 지정된 설정값이 할당 됨
}
src/main/resources/ 에 application.yml 파일을 추가해서 아래 내용을 넣는다.
configuration:
  projectName: Spring Boot Project
애플리케이션을 실행하면 새로 추가한 설정파일 정보가 POJO 객체에 매핑된 것을 확인 할 수 있다.

요약해보면 @EnableConfigurationProperties 애노테이션을 붙여서 스프링에게 설정정보를 매핑할 수 있도록 준비 시킨다. 매핑될 클래스는 @ConfigurationProperties 애노테이션으로 지정하는데 이에 대한 값으로 prefix 값을 줄 수 있다. 이 prefix와 일치하는 설정 중 POJO 클래스에 매핑 가능한 필드를 찾아서 매핑한다.
Subscribe via RSS
