maven profile 을 이용하여 운영 환경에 맞게 패키징 하기

개요

local (개발자 개인 PC), development , test, staging, production 등 deploy 환경에 따라 달라져야할 정보들(JDBC URL, logging level, 기타 resource등)을 maven profile 을 이용하여 build 타임에 구성할 수 있다.


maven profile 은 환경마다 빌드를 새로 해야 하는 문제가 있으니 이것보다는 spring profile 을 권장합니다.



Example

  1. test 용 maven project 생성

    mvn -B archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-profile-test -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.1-SNAPSHOT
  2. resources 폴더밑에 deploy 를 위한 profile 폴더 생성

    cd my-profile-test
    mkdir src/main/resources/{local,dev,test,prod}
  3. 예제용 property 파일 추가(dev, test 용)
    1. vi src/main/resources/dev/db.properties

      개발 시스템용 DB 연결정보 예
      db.username=dev
      db.password=dev-pwd
      db.url=dev_db_url
    2. vi src/main/resources/test/db.properties

      test 시스템용 DB 연결정보 예
      db.username=test
      db.password=testPwd
      db.url=test_db_url
  4. pom.xml 에 profile 관련 properties 추가

    <properties>
        <!-- -P 로 명시하지 않을 경우 기본 프로파일 -->
        <env>dev</env>
    </properties>
  5. pom.xml 에 profiles 기술

     <profiles>
    		<profile>
    			<id>dev</id>
    			<properties>
    				<env>dev</env>
    			</properties>
    		</profile>
    		<profile>
    			<id>test</id>
    			<properties>
    				<env>test</env>
    			</properties>
    		</profile>
    		<profile>
    			<id>local</id>
    			<properties>
    				<env>local</env>
    			</properties>
    		</profile>
    		<profile>
    			<id>prod</id>
    			<properties>
    				<env>prod</env>
    			</properties>
    		</profile>
    	</profiles>
  6. pom.xml 의 build element 에 resource 를 찾는 경로를 변경

    <build>
            <resources>
                <resource>
                    <directory>src/main/resources/${env}</directory>
                </resource>
            </resources>
            <testResources>
                <testResource>
                    <directory>src/test/resources/${env}</directory>
                </testResource>
            </testResources>
    </build>
  7. mvn package -P 프로파일명 으로 패키징

    ## 명시하지 않을 경우 dev 가 기본 profile로 적용
    mvn clean package
     
    ## local deploy
    mvn clean package -P local
     
    ## 테스트용 deploy
    mvn clean package -P test
    ## production용 
    mvn clean package -P prod
  8. target 의 출력물(.war) 을 열어서 deploy 환경에 맞는 db.properties 가 패키징 되었는지 확인해 본다.