2010 Jul 29

- by
Changwoo Park

Java Spring

와우 war overlay

이 글은 maven-war-plugin의 war overlay를 설명하는 글이다.

War overlay

maven-war-plugin에서 war overlay라는 게 있다. 기존에는 웹 어플리케이션을 각 모듈별로 프로젝트를 나눌 수가 없었다. 솔루션 SI프로젝트에서 war overlay가 유용한 경우는 많다. 내가 생각하는 이점은 다음과 같다.

  • jsp등의 web resource들의 버전관리 : 동일한 코드인데도 불구하고 web resource들을 각 사이트마다 관리해야 하는 문제가 종종 생긴다. 이 것은 매우 고달프고 어느순간 달라지기 시작하여 팀 전체의 에너지를 갉아먹기 시작한다. java 코드는 모듈별로 굉장히 잘 관리할 방법을 제공하는데 web resource는 왜 제공하지 않는지 그동안 매우 불만스러웠다.
  • 사이트마다의 설정관리 : 일반적으로 프로젝트는 3개의 환경이 필요하다. 운영환경(production), 개발환경(development), 테스트환경(test)이 필요하다. java등의 일반적인 리소스의 경우 운영환경과 테스트환경은 maven에서 아주 잘 지원한다. 개발환경도 maven profile과 filter를 이용하면 만족할 만큼 커버가 된다.

언제부터 지원했는지는 모르겠지만 war overlay라는 설정이 있다는 것을 발견했다. 이제 각 환경에 대한 설정도 관리하고 web resource의 중복도 최소화 할 수 있다.

자 이제 설정하는 법을 살펴보자.

준비

먼저 프로젝트 구조 부터 잡는다. 다음과 같이 나눈다.

image

  • parent 프로젝트는 공통적인 maven 설정을 관리하기 위해 만든다. 만약 parent프로젝트없이 설정하고 싶으시면 mixin 컨셉을 지원하는 maven3를 시도해보시는 것도 괜찮아 보인다.
  • base 프로젝트는 공통코드이다. java, web resources들을 넣는다.
  • site1, site2 프로젝트는 실제 사이트 코드이다. 해당 사이트만 해당되는 코드들을 넣는다.

Maven 설정

parent

<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="linked/base.resources"/>
<wb-resource deploy-path="/" source-path="linked/base.webapp"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp"/>

update

물론 Git을 사용하면 이 기능은 전혀 필요없다. 그리고 실제로 다른 도구(eclipse, m2eclipse)가 완벽하게 받혀주지 않아서 문제가 종종발생한다. eclipse 문제가 더 생기기 때문에 좀 괴롭다. 코드가 중복되는 것과 어느 것이 더 나쁜지 알 수 없을 정도씩이나 되는 문제가 생긴다. 그냥 Git을 사용하길... 앞으로는 Git만 써야겠다라고 결심하게 만든 실험이 됐음.