Maven 입문 | 그밖에 | 환경 별, 설정 파일 분리하기

프로그램을 개발하다보면 다양한 설정파일들을 관리하게 된다. JDBC 설정 정보, logging 설정 정보 기타 resource 등이 있을 것이다. 이런 설정 파일들은 테스트, 운영 등의 단계별로 서로 다른 설정을 가질 수 밖에 없는데, 패키지시에 매번 설정 파일을 다르게 설정 파일을 변경을 해야 한다면 여간 번거로운 상황이 될것이다.

이는 maven의 profile 을 이용하여 package build 시에 다르게 구성을 할 수 있다.

환경 별 리소스 폴더 구분한다.

메인 소스에 환경 별 리소스 폴더를 만들고 각 환경에 맞는 설정 파일을 생성한다.

  • src/main/resources-${env}

예를 들면, 환경 별로 테스트, 운영이 있는 경우라면 아래와 비슷하게 구성할 수 있을 것이다.

  • 개발 테스트 서버 환경
    • src/main/resources-dev
    • src/main/resources-dev/jdbc.properties
      jdbc.driverClassName=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://127.0.0.1/database
      jdbc.username=root
      jdbc.password=1234
      
  • 실제 운영 서버 환경
    • src/main/resources-real
    • src/main/resources-real/jdbc.properties
      jdbc.driverClassName=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://192.168.0.1/database
      jdbc.username=admin
      jdbc.password=1111
      

pom.xml에 build 추가 설정한다.

maven pom.xml 에서 build 에 resource 를 환경에 맞는는 찾는 경로는

다음은 선택된 profile 에 맞는 리소스 폴더를 classpath 에 넣는 작업이다. 기본즉으로 src/main/resources 는 들어가고 부가적으로 환경 별 리소스 폴더를 넣으면 된다. 아래 내용을 pom.xml 의 build 부분에 추가한다.

<build>
    <resources>
         <resource>
            <directory>src/main/resources</directory>
         </resource>
         <resource>
             <directory>src/main/resources-${env}</directory>
        </resource>
     </resources>
</build>

pom.xml 에 profile 추가 설정한다.

이제 maven profile 설정을 통해, 빌드 단계에서 원하는 리소스 폴더를 classpath 에 추가하는 작업을 진행할 것이다.

우선, pom.xml 에 아래와 같이 profile 을 추가한다.

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
         </activation>
      <properties>
          <env>dev</env>
      </properties>
    </profile>
    <profile>
        <id>real</id>
        <properties>
            <env>real</env>
        </properties>
    </profile>
</profiles>
  • dev profile에 설정된 <activeByDefault>은 패키지시에 특별한 명령어가 없다면 기본 프로파일이 된다.

pom.xml 에 기본 profile 설정한다.

maven 시에 기본 profile을 지정한다. 방법은 아래 두가지가 있다.

properties에 env을 추가한다.

<properties>
    <!-- -P 로 명시하지 않을 경우 기본 프로파일 -->
    <env>dev</env>
</properties>

또는, 해당 profile에 activation를 추가한다.

 <profile>
    <id>dev</id>
     <activation>
         <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
          <env>dev</env>
      </properties>
</profile>

위 설정을 하지 않으면 src/main/resources-${env}에 있는 설정 파일을 패키지에 포함이 되지 않는다.

mvn package -P 프로파일명 으로 패키징한다.

이렇게 설정된 profile 을 maven 명령어에서 P옵션으로 같이 선택할 수 있다.

mvn clean package -P dev

mvn package 명령어를 실행 시에 -P를 추가를 하지 않을 경우에는 기본 profile로 패키징이 된다.

참조




최종 수정 : 2021-08-27