본문 바로가기

STUDY/Spring

Spring Boot | profile설정 ( + 2.4이상 버전 변경내용 추가 )

Spring Profiles는 애플리케이션 설정을 특정 환경에서만 적용되게 하거나, 환경 별(local, test, production 등)로 다르게 적용할 때 사용된다.

properties를 사용하면, 환경별로 각각 다른 파일을 만들어 설정한다

application-dev.properties라는 파일을 만들고, 이 파일은 개발 환경에서만 사용할 설정값을 작성한다.

# application-dev.properties

spring.datasource.url=mysql://[개발환경IP]:3306/[개발DB]
spring.datasource.username=[DB접속 USER NAME]
spring.datasource.password=[DB접속 PASSWORD]

그리고 application-production.properties라는 파일을 따로 작성해 실제 운영서버에 맞는 값을 작성한다..
이렇게 properties를 사용하면 환경별로 각각의 파일을 생성해주어야 한다!

# application-production.properties

spring.datasource.url=mysql://[실제운영서버IP]:3306/[실제DB]
spring.datasource.username=[DB접속 USER NAME]
spring.datasource.password=[DB접속 PASSWORD]

YAML을 사용하면 한 파일로 작성이 가능하다

YAML형식의 장점은 ---를 이용해 파일을 분할할 수 있다는 것. 한 파일로 여러 프로필 설정이 가능하다.

server:
    port: 9000    # 기본 포트 설정
---

spring:
    profiles: development
server:
    port: 9001    # 프로필마다 포트번호 다르게 설정

---

spring:
    profiles: production
server:
    port: 0

활성 프로필 설정

spring-profiles-active를 이용해 기본 활성 프로필을 설정할 수 있고, 아래 예시대로 애플리케이션을 시작할 때 -D옵션으로 활성 프로필을 설정해 실행가능하다.

spring-profiles-active로 활성 프로필 설정

spring:
  profiles:
    active: local # local profile로 실행된다

-D옵션으로 설정

$ java -jar -Dspring.profiles.active=production demo-0.0.1-SNAPSHOT.jar

++ 아니면 OS 환경변수에 SPRING-PROFILES-ACTIVE 설정을 할 수도 있음!

++ 또다른 방법으로는 SpringApplication.setAdditionalProfiles(...)를 애플리케이션이 실행되기 전에 호출하여 활성 프로필을 설정하는 것도 가능하다.

include

spring.profiles.include속성을 이용하면 해당 프로필을 포함해서 실행할 수 있다. 아래처럼 설정하면 prod 프로필로 실행할 때 proddb와 prodmq 프로필도 활성화되어 실행된다. (proddb와 prodmq에 설정된 값을 포함해 실행하게 됨)

spring:
    profiles : prod
    profiles.include :
      - proddb
      - prodmq

+) 참고
Properties & configuration

Profiles


Spring Boot 2.4 버전에서의 profiles 설정

2.4 이상의 버전에서는 작성 방법이 약간 달라진다.

  • spring.profiles가 아닌 spring.config.activate.on-profile로 설정해주어야 한다.
  • spring.profiles.group을 통해 프로필 그룹을 정의할 수 있다. (include대신 group을 사용한다)

spring.profilesspring.config.active.on-profile을 동일하게 사용하면 된다.

# appliation.yml example

spring:
 config:
  activate:
   on-profile: local

 

group을 지정하는 방법도 거의 비슷

 

아래 설정을 예를 들어 설명하자면, spring.profiles.group.[groupname]으로 설정한다.
localdblocalpath도 각각 프로필로 정의한 값들이다. 그리고 실행할 프로필은 [groupname]이 된다.
아래와 같이 설정한 경우에는 -Dspring.profiles.active=local로 활성 프로필을 설정하면,
자동으로 localdblocalpath프로필에 설정된 값이 포함되어 실행된다.

spring:
 profiles:
  group:
   local:
    - localdb
    - localpath

 


프로필을 설정한 후에는 항상 spring.profiles.active설정을 해야한다.

bootRun

gradle bootRun -Dspring.profiles.active=local 

빌드할 때

(테스트 코드 실행 시 프로필 설정이 필요한 경우에만)

gradle build -Dspring.profiles.active=local 

Jar 실행할 때

java -jar -Dspring.profiles.active=local [jar_name].jar