본문 바로가기
IT/Spring

Maven 멀티 모듈 방식 설정 (with eclipse)

by 최고영회 2019. 7. 25.
728x90
반응형
SMALL

Maven 멀티 모듈 방식

현재 우리는 웹 프로젝트들을 개별로 생성하여 개발 합니다.

대부분의 프로젝트에서 동일한 dependency(Spring, mysql-connector 등)와 소스코드(CommonUtil.java,  LocaleResolver 등)를 사용하는 경우가 많습니다.

만약 새로운 하나의 프로젝트를 개발해야 하는 상황에서 사용자 웹, 관리자 웹, 모바일 웹... 을 만들어야 하는 상황이 온다면 어떻게 해야 할까요?

mysql-connector의 버그가 발견되어 모두 변경해야 한다면?

Maven 에서는 하나의 프로젝트 안에서 모듈이란 단위로 다루어지도록 할 수 있고 이를 위해 pom을 상속할 수 있는 기술을 제공 합니다.


멀티 모듈 방식으로 프로젝트를 구성하는 방법에 대해 알아 봅니다.

최상단 프로젝트 생성

Mavent Project 를 생성하는데 Packaging 을 pom으로 설정 합니다.
Main 프로젝트는 소스코드가 필요 없으며 (자동으로 생성되는 src 는 삭제) pom 상속을 통해 코드의 중복, 설정의 중복을 줄일 수 있게 해 줍니다.
실제 각각의 프로젝트는 개별적으로 구성되며 그것을 단지 하나의 pom 파일로 묶어주는 형태를 가지게 됩니다.

 

Maven Module 생성

이제 필요한 개별 프로젝트를 생성 합니다.
Main Project 인 Portal > 마우스 우클릭 > New > Other > Maven Module 선택

Parent Project 가 portal 로 설정된 것을 볼 수 있습니다.


추가하는 프로젝트는 packaging 을 jar 또는 war 로 설정하면 됩니다.

이렇게 생성된 하위 프로젝트의 pom.xml 을 보면 아래와 같이 parent 구문을 볼 수 있습니다.
이것이 pom 상속 입니다.

<parent> 
  <groupId>com.pnpsecure</groupId> 
  ... 
</parent>

그리고 다른 프로젝트(ex. common)를 사용하고자 할 경우 dependency 를 추가 해 주면 됩니다.

Spring Boot Project를 starter 로 추가하고 pom.xml 을 살펴보면 <parent> 를 볼 수 있습니다.
Spring Boot 자체가 CoC 패러다임(설정보다 관례)을 추구하기 때문에 관례 상 주로 사용하는 pattern 들을 정의 해 두고 그걸 상속받는 개념인거죠.


이렇게 approve(결재), user(사용자), manager(관리자), common(공통) 프로젝트를 생성하면
최종적으로 아래와 같이 프로젝트가 구성 됩니다.

 

Build

이제 portal 에서 build 해 봅니다.
상호 dependency를 가지고 있을 수 있기 때문에 reactor 가 build 순서를 자동으로 계산하여 build 해 줍니다.
만약 서브 프로젝트 중 특정 프로젝트만 java version을 다르게 하고 싶다거나 다른 build 옵션을 주고 싶으 경우에는 개별 프로젝트에 있는 pom.xml에 설정 해 주면 됩니다.

주의사항

user, manager, approve 에서 공통으로 필요한 로직이 common 에 들어있게 되는데 자칫 common 이 너무 커져버릴 수 있으며 common 으로 인해 상호 의존성이 강해질 가능성도 있습니다.
때문에 common 에는 공통으로 사용되는 B/L 또는 일반적인 util 성 기능들이 포함되는 것이 좋습니다.

728x90
반응형
LIST