Java / / 2022. 10. 21. 15:48

[Spring] Profiles - 환경 구분(dev / prod / local)

반응형

 

✔ 개요

서비스를 운영하다 보면 운영, 개발, 로컬에 세팅을 다르게 해주어야 할 경우가 많다.

만약 하나의 properties를 사용하게 되면 현재 서버에 해당하는 properties로 직접 개발자가 매번 변경해야 한다.

이럴 경우 properties의 수정 누락으로 에러가 발생하는 경우가 빈번하다.

또한 환경변수 변경은 Git을 통한 형상관리도 할 수 없다는 단점도 존재한다.

그래서 스프링 프로젝트를 개발할 때는 환경변수를 사용하기보다 스프링의 프로파일(Profile) 기능을 사용하는 것이 좋다.

 

 

따라서 명시적으로 런타임 환경을 구분할 수 있는 Spring Boot Profiles를 사용한다.

  • 런타임 환경을 구분할 수 있는 Profiles를 제공한다.
  • Activated 된 profile에 따라서 자동적으로 파일을 읽어서, 소스상에 명시적으로 구분된 properties 사용한다.
  • 순서 : application.properties => (activated 된) application-profile.properties를 로딩

프로파일을 사용하면 런타임시에 활성화되는 프로파일에 따라 서로 다른 빈, 구성 클래스, 구성 속성 들이 적용 또는 무시될수록 할 수 있다. 앞서 예시로 든 로컬﹒개발﹒배포서버의 설정의 경우, 개발 프로파일을 활성화시키면 개발 서버에서 사용하는 DB를 연결하게 되고 배포 프로파일을 활성화시키면 배포 서버의 DB를 연결하는 등 간편하게 환경 설정을 할 수 있다.

 

✔ Profile 속성 정의

프로파일에 특정한 속성을 정의하려면 각각의 환경의 속성들만을 포함하는 별도의 .yml, .properties 파일을 만들어야 한다. 이때 파일의 이름은 application-{프로파일 이름}.ymlapplication-{프로파일 이름}.properties 의 형식으로 생성을 하여야 한다.

 


 

 세팅

  • Profile별 application-{profile}.properties 파일 생성 후 작성해 준다.
    • application-prod.properties
#예시
#path
upload_thumbnail = /upload/event/thumbnail/
upload_quill = /upload/event/quill/
upload_popup = /upload/promotion/popup/

 


 JAR 구동방법

스프링 부트는 우선 기본적으로 application.yml 파일 내 모든 property를 로드한 후에 활성화(active)된 profile 들에 대한 .yml 파일에 대해서만 property를 로드한다. 활성화시킬 프로파일은 1개 이상일 수가 있으며 활성화시키는 방법은 여러 방법이 존재한다. 아래는 프로파일을 active 하는 방법에 대해 살펴보겠다.

java -jar -Dspring.profiles.active={profile} fileName.jar &
#java -jar -Dspring.profiles.active=prod test.jar &

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유