0%

spring profile, 스프링 profile, spring 환경별 구성 다르게 하기, spring 설정방법, spring.profiles.active

spring profile이란

스프링 프로파일(Spring Profile)은 스프링 프레임워크에서 애플리케이션의 환경 설정을 구분하기 위한 기능입니다.

프로파일은 애플리케이션을 실행할 때 선택할 수 있습니다.
예를 들어, 개발 환경에서는 “dev” 프로파일을 선택하고,
운영 환경에서는 “prod” 프로파일을 선택할 수 있습니다.

예를 들어, 동일한 로직을 수행하는 스프링 app을 운영/개발 환경에 각각 배포하여,
각각 운영/개발 db에 접속하고자 하는 경우, 아래와 같은 구조로 deploy 할 수 있습니다.

spring-profile

@startuml component 운영환경 { component B as "spring app.jar" { component D as "dev profile" component E as "prod profile" #yellow } }

component 운영DB
component 개발DB

B -d-> “운영DB” : 접속

component 개발환경 {
component C as “spring app.jar” {
component F as “dev profile” #yellow
component G as “prod profile”
}
}

C -d-> “개발DB” : 접속

footer “https://devscb.tistory.com

@enduml

1. spring profile 사용하기 : profile만들기

spring profile을 사용하기 위해서는 src/main/resources에 application-xxx.yml파일을 만들어 주면됩니다.
xxx는 profile에 대한 이름입니다.

만일 -xxx를 안 붙인 application.yml을 만들면,
이 설정파일에 적힌 설정값이 default로 설정됩니다.

만일 운영/개발환경을 분리하고자 할 경우, 보통
application-prd.yml (운영환경)과
application-dev.yml (개발환경) 으로 명명하여 각각 파일을 만듭니다.

profile 파일을 만든 후, 파일구조를 보면 아래와 같습니다.
spring profile

설정값의 예시로, prod와 dev에서 각각 구동되는 포트를 변경하도록 해보겠습니다.
먼저, application-prd.yml에 아래와 같이 8090번 포트로 구동하도록 설정해봅니다.

1
2
server:
port: 8090

spring profile

그 다음,
application-dev.yml에는 아래와 같이 8080번 포트로 구동하도록 설정해봅니다.

1
2
server:
port: 8080

주의 사항으로, yml파일은 depth가 증가할 때마다 띄어쓰기 두번을 입력해줘야 합니다.
(탭 안됨)
그리고 값을 입력할 때에는 : 뒤에 한칸을 띄어서 써주도록 합니다.

몇몇 버전에서는 yml대신 properties라는 확장자를 사용하는데,
(application.properties)
이럴 때에는 아래와 같이 depth 없이 .으로 계층을 표현합니다.

1
server.port:8080

2. spring profile 사용하기 : profile불러오기

앞서 설정한 profile을 사용해보겠습니다.
springboot를 시작할때, 아래와 같이 -Dspring.profiles.active를 추가로 써주면 됩니다.

1
java -jar app.jar -Dspring.profiles.active=dev

만일, eclipse를 쓰신다면 아래와 같이 프로젝트 우클릭 > run configuration > arguments의
VM arguments에 -Dspring.profiles.active=dev 를 써준 후,
apply 및 RUN을 해주시면 됩니다.
spring profile
spring profile

spring.profiles.active=prd 옵션을 넣을 때에는 8090번포트로 접속이 되고,
spring.profiles.active=dev 옵션을 넣어 실행할 때에는 8080번포트로 접속이 되는것을 확인할 수 있습니다.
spring profile

기타 설정 값

server.port 뿐만이 아니라, 여러 설정값을 입력할 수도 있습니다.
개발자가 설정값을 만들수도 있기도 한데, 이 부분은 나중에 기회가 되면 다뤄보도록 하겠습니다.

기본적으로 설정할 수 있는 설정값들은 아래 페이지를 참고하시면 확인할 수 있습니다.
https://docs.spring.io/spring-boot/appendix/application-properties/index.html

내용이 너무 많으나, 제가 사용하고 있는 설정값을 주석(##)과 함께 일부 공유드립니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server:
port: 80 ## 서버 구동하는 포트
error:
include-stacktrace: never # 에러페이지에서 stacktrace출력
include-exception: false #응답에 exception 표시여부
whitelabel:
enabled: false # WhiteLable Error Page 표시여부

spring:
application:
name: application-test #application 이름
codec:
max-in-memory-size: -1 # 입력 스트림 버퍼할 수 있는 바이트 수. 이 설정은 자동 구성된 WebFlux 서버 및 WebClient 인스턴스에만 적용됨. 용됩니다. 대부분의 코덱은 기본적으로 256K로 제한
web:
resources:
add-mappings: false # 핸들러가 없을 경우, resource경로로 판단
autoconfigure:
exclude: # autoconfigure 제외할 항목들
- 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration'
- 'org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration'