티스토리 뷰

프로젝트를 진행하다 보면 관리자 웹 사이트, 사용자 웹 사이트, 모바일 웹 사이트 등을 각각 개발하게 되는데 이때 사이트 별로 웹 프로젝트를 생성하여 개발을 하는 경우가 있다.


위와 같은 방식으로 프로젝트를 구성하게 되면 어떤 문제가 발생할 수 있을까? 

중복 소스가 발생할 수 있고, 개발 공수도 많이 들어가게 된다. 가장 큰 문제는 중복 코드로 인하여 유지 보수가 엄청나게 힘들어 질 수 있다는 것이다.


이같은 문제를 해소하기 위해 대게 공통으로 사용할 프로젝트를 생성한 후 각각의 프로젝트가 공통 프로젝트를 참조하는 식의 구성으로 개발을 진행하게 된다.


오늘 포스팅은 메이븐 멀티 모듈 생성 후 이클립스 톰켓 플러그인을 통해 웹 애플리케이션 서버를 구동하는 방법에 대해서 정리할 것이다.


나는 다음과 같이 메이븐 멀티 모듈을 구성할 것이다.

스프링 프레임워크 기반으로 웹 프로젝트를 구성하며 레이어 아키텍트를 기반으로 web에 의존이 강한 콘트롤러 레이어는 admin과 user 모듈로 생성하고, 비즈니스 계층에 해당하는 서비스와 DAO 레이어는 comm 모듈로 생성할 것이다.

이와 같이 모듈을 구성하게 되면 이후에 모바일 웹 사이트가 새로 생성이 되었을 때 새로운 mobile 이라는 모듈을 만들어 주고, 이미 개발되어 있고 비즈니스 로직이 담겨져 있는 comm 모듈을 참조 하면 되기 때문이다.

comm : service layer, DAO layer

admin : controller layer

user : controller layer


  • 메이븐 멀티 모듈 생성 방법

먼저 root 메이븐 프로젝트를 생성해야 한다.

New Maven Project > Create a simple project 체크 > group id, artifact id 입력

packaging은 pom 으로 지정 후 Finish

생성된 mavenMultiModule 프로젝트를 확인해 보면 src 디렉토리가 존재하는데 root 메이븐 프로젝트는 서브 모듈 디렉토리만 관리하므로 삭제한다.


이제 root 메이븐 프로젝트에 모듈을 추가할 것이다.


comm 모듈 추가

root 메이븐 프로젝트 선택 후 오른쪽 마우스를 클릭하면 다음과 같은 메뉴가 나올 것이고, New Maven Module Project를 클릭한다.

New Maven Module Project 클릭 후 나오는 화면에서 Create a simple project 체크 후 Finish 한다.


comm은 admin과 user 프로젝트에 공통 소스를 제공하는 모듈이기 때문에 Packaging을 jar로 지정 후 생성하면 된다.



admin 모듈 추가

위에서 생성한 comm과 동일한 방법으로 생성을 한다. 다만, admin은 웹 프로젝트로 생성을 해야 하기 때문에 Packaging은 war로 지정한 후 생성해야 한다.



user 프로젝트도 admin과 같은 방법으로 모듈을 생성하면 되니 생략한다.

자. 여기까지가 멀티 모듈을 생성하는 방법이었다.


root 모듈의 pom.xml을 열어보면 modules 엘리머트에 추가한 모듈 정보가 보일 것이다.

<modules>

<module>comm</module>

<module>admin</module>

<module>user</module>

</modules>


서브 모듈의 pom.xml 은 다음과 같이 parent 엘리먼트가 정의되어 있다.

<parent>

<groupId>com.maven</groupId>

<artifactId>mavenMultiModule</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>


다음은 완성된 메이븐 멀티 모듈 프로젝트 구성이다. 이클립스의 Package Explorer에서 봤을 때에는 4개의 프로젝트가 생성되어 보여지는 것 같지만 실제 mavenMultiModule 프로젝트 한 개만 생성되어 있는 것이다.


이와 같이 메이븐 멀티 모듈 프로젝트로 구성을 하면 형상 관리 시스템으로 버전 관리를 할 때에도 하나의 프로젝트만 관리하면 되기 때문에 편리하다.


  • 다이나믹 웹 프로젝트에 comm 공통 프로젝트 의존성 추가 방법

admin 프로젝트에서 comm 프로젝트의 jar파일을 의존성 라이브러리에 추가하기 위해서는 다음과 같이 dependency를 추가해 주면 된다. (admin 서브 프로젝트의 pom.xml)

<dependencies>

        <dependency>

                <groupId>com.kyu.comm</groupId>

               <artifactId>comm</artifactId>

               <version>1.0.0</version>

        </dependency>

</dependencies>


위에서 comm 라이브러리의 version 정보를 제외시킬 수 있는 방법이 있는데 top level의 pom.xml 에 다음과 같이 정의해 주면 admin에 추가한 version 정보는 생략해도 된다.

<dependencyManagement>

        <dependencies>

                <dependency>

                       <groupId>com.kyu.comm</groupId>

                       <artifactId>comm</artifactId>

                       <version>1.0.0</version>

                       <type>jar</type>

                       <scope>compile</scope>

                </dependency>

        </dependencies>

</dependencyManagement>


  • 이클립스 톰켓 플러그인을 통해 웹 애플리케이선 구동

대게 위와 같은 구조로 프로젝트를 구성한 후 빌드를 하게 되면 comm 모듈이 jar로 패키징 되어 admin과  user 프로젝트의 WEB-INF/lib 디렉토리에 배포가 되고 WAS를 구동하게 되는데 이와 같이 maven을 이용하여 매번 패키징 후 WAS를 띄운다는 것은 번거롭기도 하고, 귀찮다.


위의 번거로움을 덜기 위한 방법으로 몇 가지 설정을 통해 웹 애플리케이션을 구동하는 방법에 대해서 알아본다.


admin 프로젝트 > Java Build Path의 Libraries 탭에서 다음과 같이 comm 프로젝트의 classes 디렉토리 경로를 추가해 준다.



Deployment Assembly 이동 > Add > Java Build Path Entries 선택한 후 다음과 같이 설정한다.


여기까지다.

comm 프로젝트의 클래스 패스를 admin, user 프로젝트에 추가해 주기만 하면 maven으로 패키징 절차 없이 바로 웹 애플리케이션을 띄울 수 있다.


아직 메이븐 멀티 모듈 프로젝트 구성을 실무에 적용해 보지는 못했지만 차후에 신규 프로젝트 개발 시 꼭 적용하고 경험해 봐야 겠다.



TAG
,
댓글
댓글쓰기 폼