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에 정의 가능