[Spring] 스프링 프로파일 환경별로 빌드하기

이멀젼씨

·

2021. 6. 21. 15:26

목적

환경별로 스프링 프로파일(application.yml 또는 application.properties)를 설정하기 위함

목차

  1. 환경별 프로파일 구분의 필요성
  2. 프로파일 구분 과정

1. 환경별 프로파일 구분의 필요성

일반적으로 프로파일은 resources폴더 아래에 가져다놓고 빌드를 하게 되면

resources에 속한 모든 파일이 jar에 포함되게 된다.

혹여나 다른 서로 다른 개발환경에서 프로파일을 구분하지 않고 빌드 했을 경우, jar에는 모든 프로파일이 담기게 된다.

누군가 악의을 품고 jar파일을 뜯어서 중요한 정보를 탈취할 수 도 있는 일이다.

2. 프로파일 구분 과정

프로파일의 구분 과정은 크게 2가지로 나뉜다.

  • gradle에서 함께 빌드하고자 하는 프로파일만을 jar에 포함시킨다.
  • 스프링에서 jar에 포함된 프로파일을 활성화하여 사용한다.

환경별 프로파일 디렉토리 설정하기

우선 프로파일이 필요한 환경 별로 디렉토리를 구성해야한다.

개발과 운영에 공통적으로 사용될 속성들은 application.yml에 선언하고, 나머지 각 환경별로 필요한 속성들은 각 디렉터리 밑에 application-{profile}.yml로 지정해두었다.

Gradle sourceSets 설정

gradle에서 sourceSets를 설정해주어야 우리가 원하는 디렉토리의 프로파일만 빌드할 수 있다.

여기서 sourcesSets란 소스 파일의 논리적 그룹을 나타내며, srcDirs속성을 사용하여 디렉터리 경로를 replace하는 것이다.

srcDir메서드를 사용하면 기존 경로에 경로를 추가하는 방식이다.

자세한건 gradle manual을 참조하면 되겠다.

profile이라는 변수를 하나 선언해주고 명령어 실행 시 profile프로퍼티가 존재하지않거나, profile프로퍼티가 dev이면 'dev'를 반환한다.

'dev'가 아닌 경우엔 'prod'를 반환한다.

반환받은 값을 바탕으로 개발환경에서는 resources-dev디렉토리를 빌드하고

"src/main/resources-dev"

운영환경에서는 resources-prod를 빌드한다.

"src/main/resources-prod"

Gradle Profile 프로퍼티 넘겨주기

커맨드라인에서 -P 또는 --project-prop를 통해 루트 프로젝트의 속성을 설정할 수 있다.

intellij에서는 Edit Configuration으로 들어가서 Gradle에 Task를 하나 추가하고 Arguments로 -Pprofile=prod와 같은 형태로 속성을 넘기면 된다.

자세한건 Gradle propertiesEnvirnment options를 참조하면 되겠다.

스프링에서 활성화할 profile 설정하기

스프링에서 활성화 할 수 있는 방법은 3가지가 있다.

추가적으로 intellij에서 Gradle의 bootRun명령어 실행전 작업으로 clean Task를 넣어주어야한다.

prod세팅
prod빌드

운영환경 세팅인 경우엔 prod디렉토리만 빌드되고

dev세팅
dev빌드

개발환경 세팅인 경우 dev디렉토리만 빌드됨을 알 수 있다.