SPRING

[SPRING] 환경별 application.properties 관리

steadyMan 2022. 12. 24. 21:31

현재 재직중인 회사의 프로젝트는 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

실습!

설정에 맞추어 디렉토리 변경
build할때 profile데이터를 전달한다.
default, stg만 빌드되었다.

참조 

https://www.baeldung.com/spring-profiles

https://garyj.tistory.com/9

https://umbum.dev/1039