mj@home:~$

Maven Profile 활용

안녕하세요. 저희 친절한 멘토님께서 Maven Profile 활용법에 대해 알려주셨는데요. 저희 조에서 Maven Profile을 어떻게 사용했는지 공유하고자 합니다.

저희는 사용자가 이미지를 업로드했을 때 지정된 경로에 이미지 파일을 저장하도록 하였는데요. 로컬에서 개발할 때와 알파 서버에 배포하였을 때 경로를 다르게 설정하기 위해 Maven Profile을 사용하였습니다.

프로필 정의

local(개발용), alpha(배포용) 프로필 설정

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <profiles>
    <profile>
      <id>local</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <env>local</env>
      </properties>
    </profile>

    <profile>
      <id>alpha</id>
      <properties>
        <env>alpha</env>
      </properties>
    </profile>
  </profiles>
  ...
</project>

여기서 사용하는 프로필에 따라 <env>...</env> 값이 다르게 설정되는 것을 볼 수 있습니다. 이 값은 빌드시 어떤 Resource 경로를 참조할 건지 결정하는데 사용됩니다.

리소스 정의

아래 설정에서 env 값을 어떻게 사용하는지 볼 수 있습니다. 프로필이 local일 때는 resources-local 디렉토리를 추가로 참조합니다. alpha일 때는 resources-alpha를 참조합니다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <build>
  	...
    <resources>
      <!-- 공통 리소스 -->
      <resource>
        <directory>src/main/resources</directory>
      </resource>
      <!-- 프로필별 리소스 -->
      <resource>
        <directory>src/main/resources-${env}</directory>
      </resource>
    <resources>
    ...
  </build>
  ...
</project>

이클립스에서 보면 아래와 같은 구조입니다. image

resource-local/image-config.properties에는 로컬의 이미지 경로가 저장되어 있습니다. resource-alpha/image-config.properties에는 서버의 이미지 경로가 저장되어 있습니다.

이클립스에서 프로필 선택

프로필을 설정하면 프로젝트 우클릭 > Maven > Select Maven Profiles에서 프로필 선택이 가능합니다. 저희의 경우 local이 <activeByDefault>true</activeByDefault>로 설정되었기 때문에 자동으로 선택되어 있습니다.

image

배포시 프로필 설정

알파 서버에 배포할 때는 alpha 프로필을 선택해야 합니다. mvn package 명령어 실행시 -P 옵션으로 프로필을 지정할 수 있습니다.

> mvn package -P alpha

뭔가 진보한 방식인 것 같지만 여전히 고민이 남아있습니다. 저희는 개발할 때도 알파 DB에 붙어서 하기 때문에 로컬에서 테스트를 하면 존재하지 않는 이미지 정보가 알파 서버에 저장됩니다. 멘토님은 이걸 쓰레기 데이터라고 하셨는데 저희는 매번 이걸 치워야하는 번거로움이 있습니다. 혹시 다른 조에서 더 좋은 방법으로 개발하고 있다면 공유부탁드립니다 ㅎㅎ