Java Maven 프로젝트에서 환경(dev, prod)에 따라 설정 파일을 분리하고, 빌드 시 특정 환경을 선택하는 방법은 크게 2가지 단계로 나뉩니다.
-
Spring Boot의 Profile 기능을 이용한 파일 분리
-
Maven의 Profile 기능을 이용한 빌드 시점 제어
1. 설정 파일 분리 (src/main/resources)
먼저 설정 파일을 환경별로 생성합니다. 파일 이름 규칙은 application-{profile}.properties입니다.
-
application.properties: 공통 설정 및 활성화할 프로파일 지정
-
application-dev.properties: 개발 환경 설정 (DB 접속 정보 등)
-
application-prod.properties: 운영 환경 설정 (DB 접속 정보 등)
application.properties 내용:
# Maven 빌드 시점에 결정된 값을 주입받기 위해 @변수명@ 형식을 사용합니다.
spring.profiles.active=@activatedProperties@
2. pom.xml 설정 (Maven Profiles)
pom.xml에 환경별 프로파일을 정의하고, 빌드 시 application.properties에 값을 채워넣을 수 있도록 설정합니다.
<profiles>
<!-- 개발 환경 -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- 기본값을 dev로 설정 -->
</activation>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
</profile>
<!-- 운영 환경 -->
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> <!-- @activatedProperties@ 를 실제 값으로 치환함 -->
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3. 빌드 방법

터미널에서 -P 옵션을 사용하여 특정 프로파일로 빌드할 수 있습니다.
dev로 빌드하기 (기본값 설정 시 생략 가능)
mvn clean package -Pdev
-
결과: application.properties 내부의 @activatedProperties@가 dev로 치환되어 빌드됩니다.
prod로 빌드하기
mvn clean package -Pprod
-
결과: application.properties 내부의 @activatedProperties@가 prod로 치환되어 빌드됩니다.
4. 요약 및 주의사항
-
구조: application.properties는 메인 스위치 역할을 하고, 실제 상세 설정은 application-dev.properties 등에 작성합니다.
-
치환 기호: Spring Boot 프로젝트의 경우 Maven 필터링 시 ${…} 대신 @…@를 사용하는 것이 권장됩니다. (Spring의 프로퍼티 참조와 충돌 방지)
-
확인 방법: 빌드된 .jar 파일 내부의 BOOT-INF/classes/application.properties를 열어 spring.profiles.active=dev로 잘 바뀌어 있는지 확인하면 됩니다.
[참고] 빌드 시점이 아닌 실행 시점에 정하고 싶다면?
만약 빌드는 하나로 하고 실행할 때 결정하고 싶다면, pom.xml 설정 없이 실행 명령어에서 지정할 수도 있습니다.
java -jar myproject.jar --spring.profiles.active=dev
하지만 질문하신 **”빌드 시 dev로 빌드하는 방법”**에는 위에서 설명한 Maven Profile + Resource Filtering 방식이 가장 적합합니다.