[SPRING] 환경별 application.properties 관리
현재 재직중인 회사의 프로젝트는 dev, stg, default등 여러 속성의 application-properties파일을 관리중입니다.
물론 회사마다 다르겠지만 이전 직장에서는 이런 방식으로 관리하고 있지 않기때문에 환경별로 설정이 상이할때 어떻게 관리를 해야할까 궁금했습니다.
이렇게 환경별로 설정파일을 나누어놓고 환경에 맞게 설정정보를 읽어온다면 편리하게 관리 가능한 방법이라고
생각했습니다~
그냥 은근슬쩍 알고 넘어가기에는 궁금증을 참을 수 없어 환경별로 설정파일을 관리하는 방법에 대해 알아보았고
그 결과를 글로 정리합니다!
Project Metadata
- Project : Gradle Project
- Language : Java 11
- Framework : Spring Boot: 2.5.x
application.x 작성규칙
Spring은 특정 규칙의 네이밍을 인식하여 설정파일을 읽어온다.
기본적으로는 아래와 같다.
- application.properties
- application.yml
추가로 특정 규칙으로 파일을 만들면 인식이 가능하다.
문서를 빌리자면
Spring Boot will automatically load the properties in an application.properties
file for all profiles, and the ones in profile-specific .properties files
only for the specified profile.
For example, we can configure different data sources for dev
and production profiles by using two files named application-dev.properties
and application-production.properties:
즉 아래와 같은 네이밍이라면 스프링이 인식한다.
- application-{profile}.properties
- application-{profile}.yml
환경별 properties파일 생성
default, dev 두개의 환경으로 구성했습니다.(아무 설정 하지않으면 application-properties을 읽는다)
각 profile 별로 실행 포트를 구분하여 실습을 진행하겠습니다.
# application.properties
server.port=8081
# application-dev.properties
server.port=8082
profile 설정 방법
1. profile.active 속성을 통한 분리
application.properties에 profile.active속성을 입력하여 환경설정을 할 수 있습니다.
기본(default)은 application.properties
## application.properties ##
## profile을 dev로 설정한다. ##
spring.profiles.active=dev
active를 dev로 설정하고 서버를 기동하면 dev에 설정한 8082포트로 서버가 시작되는걸 확인할 수 있습니다.
2. jar 파일 실행 시 옵션 추가
프로젝트 빌드 후 생성된 x.jar파일을 실행할때 환경변수를 추가하여 profile 설정이 가능하다.
# 예시
java -jar -Dspring.profiles.active=dev ./{파일명}.jar
# 윈도우에서 해보신다면 ""을 추가해야합니다.
java -jar "-Dspring.profiles.active=dev" ./{파일명}.jar
선택적 빌드 하기
알아보다 보니 빌드할때 목표 환경의 properties파일만 빌드 되도록 하는 방법도 존재했다!
아무래도 사용하지 않는 설정파일들도 함께 서버로 올라가는것보다 실제 환경과 같은 설정파일만 올라가는 것이 보안측면에서 좋다고 생각된다.
방법을 살펴보면
1. build.gradle 수정
#build.gradle#
sourceSets {
ext.profile = (!project.hasProperty('profile') || !profile) ? 'local' : profile
println "current profile : ${profile}"
main {
java {
srcDir "src/main/java"
}
resources {
srcDirs "src/main/resources", "src/main/resources-${profile}"
}
}
}
profile 값을 읽어 조건에 따라 빌드될 설정파일을 선택한다.
- profile 데이터가 없다면 : application.properties, application-local.properties
- profile 데이터가 있다면 : application.properties, application-{property}.properties
실습!
참조
https://www.baeldung.com/spring-profiles