스프링부트 메이븐 멀티모듈 프로젝트 관리 방법
이번 포스팅에서는 스프링부트 메이븐 멀티 모듈 프로젝트를 생성하고 사용하는 방법을 정리해 보려고 합니다.
개요
여러 개의 스프링부트 프로젝트를 개발하다보면 각 프로젝트마다 클래스를 공통적으로 사용하는 경우들이 있을 겁니다.
이런 경우, 각 프로젝트마다 공통적으로 사용하는 클래스를 각각 만들어 사용하게 되면, 프로젝트 관리 상 굉장히 비효율적이겠죠?
공통 클래스를 별도의 공통 모듈로 만들어서 각 프로젝트에서 사용할 수 있도록 해 주면 좋을 것 같은데 이럴 때 멀티 모듈 프로젝트로 관리해 주면 됩니다.
그럼 Eclipse에서 멀티 모듈 프로젝트를 생성하는 방법을 알아볼까요?
아래 그림과 같이, 이름이 Multi인 최상위 Maven 프로젝트 아래, 2개의 하위 프로젝트가 있는 구조를 만들어 볼 겁니다. 하위 프로젝트를 이제부터는 모듈이라고 부르겠습니다.
각 모듈의 이름은 CommonModule, Module1 이라고 할텐데, CommonModule의 클래스를 Module1에서 공통으로 사용하는 구조로 만들려고 하는거라서 편의상 이름을 이렇게 붙였습니다.
상위 프로젝트 생성
이름이 Multi인 상위 프로젝트는 다음과 같이 생성하면 됩니다.
- File –> New –> Maven Project 실행
- Next 버튼 클릭
- Finish 버튼 클릭
아래와 같이 프로젝트가 생성됩니다.
- pom.xml 파일 수정
아래의 내용을 추가합니다.
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version> <!-- 사용하는 버전에 따라 표기 -->
<relativePath/>
</parent>
- Maven -> Update Project 실행
하위 모듈 생성
그럼 이제 하위모듈을 생성해 보겠습니다.
- Project Explorer에서 Multi Project 마우스 오른쪽 버튼 클릭 –> New –> Other –> Maven –> Maven Module 클릭
- Next 버튼 클릭
- Finish 버튼 클릭
또 다른 모듈인 Module1도 동일하게 생성해 줍니다.
완료되면 다음과 같이 정상적으로 2개의 모듈이 추가된 걸 볼 수 있습니다.
- pom.xml 파일 수정
각 모듈의 pom.xml 파일에 아래의 내용을 추가합니다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.project-lombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
- Maven -> Update Project 실행
프로젝트 실행
이제 멀티 모듈 프로젝트 생성이 완료되었으니, 코드를 작성해 보도록 하겠습니다.
SpringBoot를 실행할 Main 클래스가 필요합니다.
CommonModuleApplication이라는 이름의 클래스를 생성하고 코드를 작성합니다.
package com.epozen.commonmodule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CommonModuleApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(CommonModuleApplication.class, args);
}
}
이제 다른 모듈에서 사용할 공통 클래스를 하나 만들어 보겠습니다.
CommonContoller라는 Controller 클래스를 생성하여 코드를 작성합니다.
package com.epozen.commonmodule;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CommonController {
@GetMapping("/test")
public String msg(@RequestParam String param) {
return param;
}
}
한번 실행해 볼까요?
이제 이렇게 만들어진 클래스를 다른 하위 모듈에서 사용하도록 코드를 추가해 보겠습니다.
module1 모듈에서 이 클래스를 참조하도록 코드를 작성합니다.
위에서 했던 것처럼 Main Class를 생성하여 작성한 다음, CommonModule의 CommonController의 메소드를 호출하여 실행하는 SubController 클래스를 생성하여 코드를 작성합니다.
package com.epozen.module1;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.epozen.commonmodule.CommonController;
@RestController
public class SubController {
@GetMapping("/module")
public String msg(@RequestParam String param) {
CommonController commonController = new CommonController();
commonController.msg(param);
return param;
}
}
그런데 CommonModule의 CommonController 클래스를 찾을 수 없어 코드에 빨간 줄들이 보이게 될 겁니다.
CommonController 클래스를 사용할 수 있도록 다음과 같이 진행합니다.
-
CommonModule의 jar 추출
Project Explorer에서 CommonModule Project 마우스 오른쪽 버튼 클릭 –> Run As –> Maven install 클릭 -
CommonModule 의 dependency 추가
Module1의 pom.xml을 열어서 다음과 같이 추가합니다.
<dependency>
<groupId>com.epozen</groupId>
<artifactId>commonmodule</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
이제, 코드의 빨간 줄들이 다 사라지고 실행할 준비가 되었습니다. 그럼 실행해 볼까요?
잘 실행되었네요.
Maven 멀티 모듈 프로젝트를 생성해 보고, 어떻게 사용하면 되는지 알아보았습니다.
Reference
- https://codegear.tistory.com/23
- https://flowlog.tistory.com/73