[Spring Boot+Gradle + intelliJ+ logback] 개발 운영 프로필 분리 설정


현재 내가 세팅한 개발환경은  spring boot 2.7.14, java 11, gradle, intelliJ이다.


build.gradle 설정

plugins {
	id 'java'
	id 'war'
	id 'org.springframework.boot' version '2.7.14'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.boot'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '11'
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
	implementation 'javax.servlet:jstl'
}


기존에 spring, maven 환경에서 인텔리제이 구매 후 spring boot, gradle로 세팅하고 있는데 여러모로 편리하고 좋은 점이  많은 것 같다. 인텔리제이 진작 살걸... 휴..

개발과 운영 profile 분리

 
resoruces-env 폴더를 만들고 그 아래에 로컬(local) 폴더와 운영(prod) 폴더를 생성해 주자.
각 폴더 아래에는 application.properties와 logback-spring.xml을 생성한다.
 
원래 있던 application.properties 파일에는 공통적인 설정을 넣어주고 로컬, 운영 세팅에는 db정보나 리소소 경로 등을 넣어줄 것이다.
 
테스트를 해봐야 하니 각 properties파일에 같은 이름의 변수를 하나씩 넣어주었다.
로컬 프로퍼티에는 env.name=local
운영 프로퍼티에는 env.name=prod

build.gradle 추가 설정

ext.profile = (!project.hasProperty('profile') || !profile) ? 'local' : profile

sourceSets {
	main {
		resources {
			srcDirs "src/main/resources", "src/main/resources-env/${profile}"
		}
	}
}

gradle 파일에 해당 내용을 추가한다.
이렇게 하면 실행할 때 설정한 변수에 따라 프로필별 로 사용할 resource 폴더가 추가 세팅이 된다.

tasks {
	processResources {
		duplicatesStrategy = org.gradle.api.file.DuplicatesStrategy.INCLUDE
	}
}

실행할때 중복에러 메세지가 난다면 이 내용을 추가해주자.
이렇게 하면 동시에 프로필 파일을 사용해 에러가 발생해도 방지해 줄 수 있다.
 
 
이제 준비가 끝났으니 테스트해볼 차례.

테스트용 컨트롤러를 하나 만들어서 properties에 설정한 env.name 값을 불러와 모델(model)에 담았다.
@Value 어노테이션을 이용하면 properties 파일에 세팅한 내용을 변수로 가지고 올 수 있다.

이렇게 모델에 담은 값은 jsp를 하나 만들어 브라우저에서 확인이 가능하게 만들었다.

Gradle 설정하기

[run]-[Edit Configuration] 메뉴에서 +를 누른 후 gradle을 생성한다.

gradle 이름(Name)을 로컬과 운영이 구분이 갈 수 있도록 작성한다.
실행(Run) 설정에는 bootRun -Pprofile=local, 환경 변수(Environment variables)에는 SPRING_PROFILES_ACTIVE=local을  적어주자.
 

운영용 gradle을 하나 더 만든다.
실행(Run) 설정에는 bootRun -Pprofile=prod, 환경 변수(Environment variables)에는 SPRING_PROFILES_ACTIVE=prod를 적어준다.
 

자! 그럼 gradle bootRun!!

gradle을 실행해보면 불러오는 프로퍼티에 따라 다른 변수가 담기는 것을 확인할 수 있다.
또한 콘솔창을 확인하면 logback 설정에 따라 각기 다르게 로그 메세지가 찍히는 것 또한 알 수 있다.
이렇게 해서 간단하게 개발, 운영 환경별로 프로필 설정하는 방법을 알아보았다.