Skip to main content

Maven Profile로 환경별 설정 관리하기

Maven의 Profile 기능은 빌드 환경별로 다른 설정을 분기 처리할 수 있는 강력한 도구입니다. 운영 환경(prod)과 개발 환경(dev)을 분리하거나, 테스트 시에만 특정 설정을 활성화하고 싶을 때 매우 유용합니다.


🔧 Profile이란?

Profile은 pom.xml 또는 settings.xml 내부에 정의되며, 특정 조건에서만 적용되는 설정 블록입니다. 이를 통해 다음과 같은 작업을 분기할 수 있습니다:

  • 빌드 플러그인 설정 변경
  • 다른 의존성 적용
  • 다른 속성(property) 사용
  • 다른 리소스 디렉터리 사용

📦 기본 구조

<profiles>
<profile>
<id>dev</id>
<properties>
<env.name>development</env.name>
</properties>
</profile>

<profile>
<id>prod</id>
<properties>
<env.name>production</env.name>
</properties>
</profile>
</profiles>

실행 예시:

mvn clean install -Pdev

🧪 활용 예시 1: 환경별 property 분기

<profiles>
<profile>
<id>dev</id>
<properties>
<db.url>jdbc:h2:mem:testdb</db.url>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<db.url>jdbc:mysql://prod-host/db</db.url>
</properties>
</profile>
</profiles>
<configuration>
<url>${db.url}</url>
</configuration>

🧪 활용 예시 2: 특정 플러그인 실행 분기

<profiles>
<profile>
<id>test-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.8</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
mvn verify -Ptest-coverage

🔄 자동 활성화: <activation>

Maven의 <activation> 요소를 사용하면 명시적 -P 옵션 없이도 특정 조건에 따라 Profile을 자동 활성화할 수 있습니다.

1. 기본 활성화 (activeByDefault)

<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
  • Maven 실행 시 기본 활성화되는 프로파일을 지정합니다.
  • 주로 개발 환경(local dev)에 사용됩니다.

2. 운영체제 기준 활성화

<activation>
<os>
<name>Linux</name>
<family>unix</family>
</os>
</activation>
  • name, family, arch, version 등으로 세부 지정 가능
  • 예: 특정 OS에서만 활성화되는 환경 구성

3. JDK 버전 기준 활성화

<activation>
<jdk>11</jdk>
</activation>
  • 현재 JDK가 지정된 값일 때만 활성화
  • 범위 지정도 가능: <jdk>[11,17)</jdk> → 11 이상 17 미만

4. 환경변수 기준 활성화

<activation>
<property>
<name>env.BUILD_ENV</name>
<value>prod</value>
</property>
</activation>
  • OS 환경 변수 또는 시스템 프로퍼티를 기반으로 활성화
  • Maven 실행 시 -Denv.BUILD_ENV=prod로 설정 가능

5. 파일 존재 여부로 활성화

<activation>
<file>
<exists>config/dev.properties</exists>
</file>
</activation>
  • 특정 파일이 존재할 경우 자동 활성화
  • 또는 <missing> 태그로 존재하지 않을 때 조건도 지정 가능
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>

또는 조건부 자동 활성화:

<activation>
<os>
<name>Linux</name>
</os>
</activation>

✍️ 요약

  • mvn install -Pprod 와 같이 환경별 프로파일을 분리해 유지보수가 쉬워짐
  • 설정 충돌 없이 다양한 빌드 요구사항을 대응 가능
  • pom.xml 또는 ~/.m2/settings.xml에 정의 가능

🔗 참고 링크

Reference