[SpringBoot] application.properties에 환경변수 설정하기 (@ConfigurationProperties)
application.properties 파일에 환경변수를 설정하고 코드에서 값을 가져오는 방법을 알아보겠습니다.
의존성은 다음과 같습니다.
dependencies {
...
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
먼저 application.properties에 설정 값들을 추가합니다.
@ConfigurationProperties 어노테이션이 핵심입니다. application.properties 파일에서 키 값이 "my"인 설정값을 추가했기 때문에 @ConfigurationProperties에도 키 값을 "my"로 설정해주고, @ConstructorBinding과 롬복의 @RequiredArgsConstructor를 활용해서 생성자 주입방식으로 설정 값을 MyConfig 클래스에 주입 해줍니다.
main이 있는 클래스에서 @ConfigurationPropertiesScan 어노테이션으로 ConfigurationProperties들을 스캔해서 빈으로 등록될 수 있도록 하고, 위와 같이 final필드와 @RequiredArgsConstructor를 활용해서 생성자 주입방식으로 MyConfig클래스를 사용하거나 간단하게 @Autowired로 주입받아서 설정값을 받아오면 됩니다.
+추가
만약 DB의 username, password나 api의 키 값과 같은 설정 값을 따로 분리해서 .gitignore에 추가하고 싶다면
"application-(원하는이름).properties" 파일을 만들어서 기존과 같이 환경변수를 저장하고 기존 application.properties파일에 "spring.profile.include=(원하는이름)"을 통해서 include 해준 후에 .gitignore에 분리한 파일명을 추가하면 됩니다.
이걸로도 만족하지 못하고 더 안전하게 보관하고 싶다면? 스프링 부트에서도 지원하는 hashicorp사의 Vault 같은 서비스를 이용해서 아예 다른 서버에다가 값들을 암호화시켜서 보관하는 방식도 가능합니다.