본문 바로가기
자바,스프링 - Java,Spring Framework

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

by devscb 2024. 11. 13.
반응형

spring profile이란

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

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

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

@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 파일을 만든 후, 파일구조를 보면 아래와 같습니다.

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

server:
  port: 8090

spring profile

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

server:
  port: 8080

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

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

server.port:8080

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

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

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

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

 

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

기타 설정 값

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

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

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

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'
728x90
반응형

댓글