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로 패키징이 된다.