Java Maven 프로젝트에서 환경(dev, prod)에 따라 설정 파일을 분리방법

Java Maven 프로젝트에서 환경(dev, prod)에 따라 설정 파일을 분리하고, 빌드 시 특정 환경을 선택하는 방법은 크게 2가지 단계로 나뉩니다.

  1. Spring Boot의 Profile 기능을 이용한 파일 분리

  2. Maven의 Profile 기능을 이용한 빌드 시점 제어


1. 설정 파일 분리 (src/main/resources)

먼저 설정 파일을 환경별로 생성합니다. 파일 이름 규칙은 application-{profile}.properties입니다.

  • application.properties: 공통 설정 및 활성화할 프로파일 지정

  • application-dev.properties: 개발 환경 설정 (DB 접속 정보 등)

  • application-prod.properties: 운영 환경 설정 (DB 접속 정보 등)

application.properties 내용:

Properties

# Maven 빌드 시점에 결정된 값을 주입받기 위해 @변수명@ 형식을 사용합니다.
spring.profiles.active=@activatedProperties@

2. pom.xml 설정 (Maven Profiles)

pom.xml에 환경별 프로파일을 정의하고, 빌드 시 application.properties에 값을 채워넣을 수 있도록 설정합니다.

Xml

<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. 빌드 방법

Java Maven 프로젝트에서 환경(dev, prod)에 따라 설정 파일을 분리방법

터미널에서 -P 옵션을 사용하여 특정 프로파일로 빌드할 수 있습니다.

dev로 빌드하기 (기본값 설정 시 생략 가능)

Bash

mvn clean package -Pdev
  • 결과: application.properties 내부의 @activatedProperties@가 dev로 치환되어 빌드됩니다.

prod로 빌드하기

Bash

mvn clean package -Pprod
  • 결과: application.properties 내부의 @activatedProperties@가 prod로 치환되어 빌드됩니다.


4. 요약 및 주의사항

  1. 구조: application.properties는 메인 스위치 역할을 하고, 실제 상세 설정은 application-dev.properties 등에 작성합니다.

  2. 치환 기호: Spring Boot 프로젝트의 경우 Maven 필터링 시 ${…} 대신 @…@를 사용하는 것이 권장됩니다. (Spring의 프로퍼티 참조와 충돌 방지)

  3. 확인 방법: 빌드된 .jar 파일 내부의 BOOT-INF/classes/application.properties를 열어 spring.profiles.active=dev로 잘 바뀌어 있는지 확인하면 됩니다.

[참고] 빌드 시점이 아닌 실행 시점에 정하고 싶다면?

만약 빌드는 하나로 하고 실행할 때 결정하고 싶다면, pom.xml 설정 없이 실행 명령어에서 지정할 수도 있습니다.

Bash

java -jar myproject.jar --spring.profiles.active=dev

하지만 질문하신 **”빌드 시 dev로 빌드하는 방법”**에는 위에서 설명한 Maven Profile + Resource Filtering 방식이 가장 적합합니다.