JAVA/gradle

[ Spring boot ] - gradle multi project 생성 방법

algml0703 2023. 1. 10. 09:26
반응형

* intellij idea를 사용하여 기본 gradle project를 생성하였음을 가정하였다.

 gardle multi project 생성하기

1. gradle 기반의 프로젝트를 생성한다. intellij idea를 활용하여 gradle 기반의 기본 프로젝트를 생성한다.

기본적으로 Spring web, Lombok, Spring Data MongoDB를 추가하였다. 이는 각 프로젝트 설정에 따라 달라질 수 있다.

2. 위의 과정을 통해 아래와 같은 폴더 구조를 가진 프로젝트가 생성되는데, 나는 한 프로젝트, 즉 한 디렉토리 안에 여러개의 프로젝트를 지니는 multi project 구조로 생성할 것이기 때문에 src 폴더를 지워주었다.

3. 하위 모듈 생성하기.

최상위 디렉토리에서 마우스 오른쪽 클릭 - new -module을 클릭하면 아래와 같이 나오는데 gradle 기반의 모듈을 생성한다.

총 5가지의 모듈을 생성하였다.

  • board-aggregate : domain entity store 등 데이터베이스 관련 파일
  • board-core : 서버를 실행시키는 부분.
  • board-api : 웹브라우저와 직접적으로 연동하는 컨트롤러 담당하는 부분
  • board-service : 실질적인 service 로직이 들어가는 부분
  • board-exception :  error 처리 관련 모듈 관리하는 부분 하위 모듈 생성 

위와 같이 intellij 의 기능을 활용하여 모듈 생성시 최상위 디렉토리의 settings.gradle 파일에 아래와 같이 추가된 모듈에 대한 설정 코드가 자동으로 추가된 것을 확인할 수 있다.

  • settings.gradle 파일에 하위 모듈 include 코드 자동 추가됨 rootProject.name = 'multi-project-01'
rootProject.name = 'multi-project-01'
include 'board-aggregate'
include 'board-core'
include 'board-api' 
include 'board-service' 
include 'board-exception'

그리고 최상위 디렉토리 경로에서 하위의 build.gradle은 아래와 같이 수정해준다. build.gradle은 최상위 디렉토리 아래와 각 모듈 하위에 build.gradle 파일이 있는데 각 모듈 하위의 build.gradle 파일은 각 모듈에만 설정될 내용을 담을 수 있고, 최상위 디렉토리 하위에는 프로젝트 전반에 대한 설정 내용을 담을 수 있다.

 


Issue

1) 위와 같이 구성 후 controller 클래스를 만들어서 해당 경로로 접근하였는데 계속 찾지 못했다. 서버를 실행시키는 부트에서 api를 만들어 테스트 해봤는데 그 때는 해당 경로로 접속이 가능했다. 다른 모듈에 컨트롤러를 만든 것만 찾지 못했다.

원인 -> 컨트롤러가 생성된 패키지 경로를 인식하지 못해 발생한 문제였다.

해결 -> 서버를 실행시키는 부트 모듈에 아래와 같이 @ComponentScan 어노테이션을 이용해서 패키지 경로를 설정하여 주었다.

 

2) 다른 모듈에 대하여 의존성을 추가할 때 api project와 implementation project로 가져올 때의 차이점은 무엇인가?

이는 추가된 의존성 모듈을 어디까지 공개할 것인지와 관련이 있다. api project를 통해 모듈에 대해 의존성을 추가한 경우 해당 모듈을 사용하는 다른 모듈에서도 종속되는 모듈을 사용할 수 있다. 반면 implementation project를 통해 의존성을 추가한 경우 직접적으로 모듈에 대한 의존성이 명시된 경우에만 접근이 허용된다. 예를 들어 A 모듈이 B 모듈에 의존성을 가지는 상황에서 api 를 사용한 경우에는 제 3의  c 모듈이 a 모듈에 의존성을 가지면 b 모듈에도 접근이 가능하다. 반면 implementation으로 의존성이 주입된 경우에는 c 모듈은 a 모듈에 대해서만 접근이 가능하며, a 모듈이 의존성을 가지는 b 모듈에 대해서는 접근할 수 없다.

 

출처 gradle multi project 생성 

반응형

'JAVA > gradle' 카테고리의 다른 글

[ 설정 ] - 플러그인 디펜던시 차이?  (0) 2024.12.28
gradle.properties 파일 설정하기  (0) 2023.02.18