─━ IT ━─

"개발할 땐 로컬 DB, 배포할 땐 운영 DB!" ⚙️ Maven 프로파일(Profile)로 변신하는 pom.xml

DKel 2025. 9. 29. 09:35
반응형

"로컬에서 개발할 때는 H2 같은 내장 DB를 쓰고, 테스트 서버에 배포할 때는 테스트용 Oracle DB에 붙어야 하고, 실제 운영 서버에서는 운영 MariaDB를 써야 하는데... 그때마다 pom.xml 파일을 계속 고쳐야 하나요?"

이렇게 서로 다른 환경(개발, 테스트, 운영) 에 따라 빌드 구성을 다르게 해야 하는 경우는 매우 흔합니다. 데이터베이스 접속 정보, 로그 레벨, 포함해야 할 의존성 등이 환경마다 달라지기 때문이죠. 이 문제를 우아하게 해결하기 위해 메이븐(Maven)은 프로파일(Profile) 이라는 강력한 기능을 제공합니다.


프로파일이란? 상황에 따라 갈아끼우는 '설정 세트'

프로파일은 특정 조건에서만 활성화되는 별도의 설정 묶음입니다. pom.xml 파일 안에 여러 개의 프로파일을 미리 정의해두고, 빌드 시 원하는 프로파일을 선택하여 그 안에 정의된 설정으로 기존 설정을 덮어쓰거나 추가할 수 있습니다.

가장 좋은 비유는 자동차의 드라이브 모드입니다. 🚗

  • Comfort 모드 (기본 프로파일): 평상시의 주행 모드입니다.
  • Eco 모드 (dev 프로파일): 연비를 최우선으로 생각하는 모드. 개발 환경에서는 빠른 빌드를 위해 불필요한 플러그인을 비활성화할 수 있습니다.
  • Sport 모드 (prod 프로파일): 성능을 최대로 끌어올리는 모드. 운영 환경에서는 소스 코드를 압축(Uglify)하고, 무거운 통합 테스트를 모두 실행하는 등 더 엄격한 빌드 설정을 적용할 수 있습니다.

운전자는 상황에 맞게 버튼 하나로 자동차의 성격을 바꾸듯이, 개발자는 명령어 하나로 빌드의 성격을 바꿀 수 있습니다.


직접 사용해보기: dev와 prod 프로파일 만들기

pom.xml 안에 <profiles> 태그를 사용하여 각 환경에 맞는 설정을 정의할 수 있습니다.

XML
 
<project>
  ...
  <properties>
    <db.url>jdbc:h2:mem:testdb</db.url> <log.level>DEBUG</log.level>
  </properties>

  <profiles>
    <profile>
      <id>dev</id>
      <activation>
        <activeByDefault>true</activeByDefault> </activation>
    </profile>

    <profile>
      <id>prod</id>
      <properties>
        <db.url>jdbc:mariadb://prod.db.server:3306/maindb</db.url>
        <log.level>INFO</log.level>
      </properties>
      <dependencies>
        <dependency>
          <groupId>com.example</groupId>
          <artifactId>monitoring-agent</artifactId>
          <version>1.2.3</version>
        </dependency>
      </dependencies>
    </profile>
  </profiles>
  ...
</project>

프로파일 활성화하기

이제 빌드할 때 -P 옵션을 사용하여 원하는 프로파일을 간단하게 활성화할 수 있습니다.

  • 개발 환경 빌드 (기본 프로파일 사용): mvn clean install (이 경우, activeByDefault가 true인 dev 프로파일이 활성화되어 db.url은 H2를 가리킵니다.)
  • 운영 환경 빌드 (prod 프로파일 활성화): mvn clean install -P prod (이제 -P prod 옵션 때문에 prod 프로파일이 활성화되어, db.url은 운영 MariaDB를 가리키고, monitoring-agent 의존성이 추가된 채로 빌드됩니다.)

이 외에도 특정 파일의 존재 여부나 OS 종류에 따라 프로파일이 자동으로 활성화되도록 하는 등 매우 정교한 설정도 가능합니다.


마치며

Maven 프로파일은 하나의 pom.xml 파일만으로 여러 환경에 대응할 수 있게 해주는 매우 실용적이고 강력한 기능입니다. 더 이상 환경별로 pom_dev.xml, pom_prod.xml 같은 파일을 여러 개 만들어 관리하거나, 배포 직전에 주석을 풀고 잠그는 위험한 수작업을 할 필요가 없습니다.

프로파일을 통해 빌드 설정을 중앙에서 깔끔하게 관리하는 것은, 프로젝트의 유지보수성을 높이고 "실수로 개발 DB 정보를 운영 서버에 배포하는" 끔찍한 재앙을 막는 현명한 개발자의 습관입니다. 👷‍♂️

반응형