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 성 기능들이 포함되는 것이 좋습니다.
'IT > Spring' 카테고리의 다른 글
Spring Boot 란 (0) | 2019.12.13 |
---|---|
JWT 로그아웃 처리 (2) | 2019.10.01 |
Spring WebFlux (2) | 2019.07.19 |
Spring Boot + JPA + openjdk 11 Error (Error creating bean with name 'entityManagerFactory') (2) | 2019.01.09 |
Spring Integration - ThreadPoolExecutor with udp-inbound-channel-adapter (0) | 2018.10.16 |