본문 바로가기

프로그래밍 회고록/Java & Spring

SpringBoot 2.4.1 이후 문법 변화에 따른 환경분리를 위한 설정파일 작성법

728x90
반응형

환경분리


프로젝트를 진행하다 보면 로컬환경과 개발환경 그리고 운영환경의 설정을 서로 다르게 가져가야할 경우가 존재한다.

그런경우 .properties파일이나 .yml파일에서 서로 다른 설정에 따른 파일을 만들어 가져가는것이 일반적으로 Spring에서 활용하는 환경분리 방법이다.

 

기존의 방법


SpringBoot 2.4이전에는 spring.profiles 옵션을 활용해서

application-local.yml

spring:
	profiles:local
    ...

 

application-develop.yml

spring:
	profiles:develop
    ...

profiles의 변수명이 다름을 주목하자.

다음과 같이 서로다른 파일을 가져가서 실행시에 실행변수에 어떤 환경인지 넘겨주며 실행했었다.

그러나 SpringBoot 2.4.1 이후로는 spring.profiles 설정이 deprecated 되었고 서술해 어플리케이션을 실행하면 오류를 발생시킨다.

 

새로운 방법


새로운 방법의 흐름은 다음과 같다.

1. 새로운 문법에 따라 properties혹은 yml파일을 작성한다.

2. application을 실행할때 run-time에 사용될 환경변수를 넣어준다.

 

1. 새로운 문법에 따라 properties혹은 yml파일을 작성한다.


각 파일에서 spring.config.activate.on-profile 이라는 옵션을 설정해주고 설정이름을 원하는대로 넣어주자,
필자같은 경우는 local과 develop으로 나누었다.

application.yml

spring:
  profiles:
    default: local
...

실행변수에서 설정을 넣을때 원하는 환경변수명을 설정하는데 그것이 없을때 local로 실행하겠다는 뜻으로 읽으면 된다.

 

application-local.yml

spring:
  config:
    activate:
      on-profile: local
....

application-dev.ym

spring:
  config:
    activate:
      on-profile: develop
....

 

개인적으로 이전 버전보다 독해하기 편해졌다.
spring.profiles라고 적혀있으면 단지 profiles라고만 추상적으로 적혀있어 문맥이 이해가 안되었으나,


spring.config.activate.on-profile를 읽는다면 "이 스프링파일 설정 켜(activate) 프로파일이 OO 일때" 라고 읽히며
이해가 쏙쏙 된다!

 

2. application을 실행할때 run-time에 사용될 환경변수를 넣어준다.


IntelliJ IDE에서는 다음과 같다.

2.1 Edit Configuration 클릭

 

2.2.1 실행변수를 입력한다.

 

2.2.2 아래 Active profiles에 입력해도 된다.

 

2.3  유닛테스트

다음과 같이 Local이라는 변수명이 입력되어 테스트를 통과했다.

 

 

여담으로 명명을 반드시 application-local.yml 과 같이 가져가지 않아도 된다.

spring:
  config:
    import: auth.yml, local.yml, dev.yml
...

다음과 같이 import로 사용할 파일들을 선언해주면 원하는대로 명명이 가능하더라~!

728x90