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
Spring Boot 2.4 버전에서의 profiles 설정
2.4 이상의 버전에서는 작성 방법이 약간 달라진다.
spring.profiles
가 아닌spring.config.activate.on-profile
로 설정해주어야 한다.spring.profiles.group
을 통해 프로필 그룹을 정의할 수 있다. (include대신 group을 사용한다)
spring.profiles
와 spring.config.active.on-profile
을 동일하게 사용하면 된다.
# appliation.yml example
spring:
config:
activate:
on-profile: local
group
을 지정하는 방법도 거의 비슷
아래 설정을 예를 들어 설명하자면, spring.profiles.group.[groupname]
으로 설정한다.localdb
와 localpath
도 각각 프로필로 정의한 값들이다. 그리고 실행할 프로필은 [groupname]
이 된다.
아래와 같이 설정한 경우에는 -Dspring.profiles.active=local
로 활성 프로필을 설정하면,
자동으로 localdb
와 localpath
프로필에 설정된 값이 포함되어 실행된다.
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
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | @ConfigurationProperties 알아보기 (0) | 2021.04.15 |
---|---|
Spring Boot | JPA 사용해보기 (1) + H2데이터베이스 설치 (0) | 2021.04.06 |
Spring Boot | Exception만들기 (0) | 2021.03.29 |
Spring Boot | Spring Security @PreAuthorize사용하기 (0) | 2021.03.26 |
Spring Boot | REST API 파일 업로드 / 다운로드 (1) | 2021.03.23 |