들어가기 전에
저번에 라이브러리를 다시 제작하는 이유와 개발을 할 때 중점으로 고려해야할 사항들에 대해서 소개를 하였습니다.
이번에 멀티모듈을 어떻게 적용을 했는지에 대해 설명을 드리도록 하겠습니다.
1. 멀티모듈 적용
멀티모듈을 적용하려한 이유는 각 기능들을 관심사 별로 분리하고자 하기 위함입니다. 많은 Class들과 비슷한 기능들에 대해서 묶어서 관리하는 것이 개발 생산적인 측면에서 유리하다고 생각했기 때문에 멀티모듈을 적용할까 했었는데.. 이는 사실 2가지의 어려움이 생기게 되었습니다.. 일단 멀티 모듈 적용을 하고자 했던 예시는 설명드리겠지만 어려움에 대해서 설명을 드리자면
다른 Spring 라이브러리들 중 멀티모듈을 적용한 예시를 보면 그에 더 많은 기능과 코드들이 있었습니다. 굳이 멀티모듈을 적용을 해야될까 라는 의문점이 들었습니다.
다른 하나는 subProjects(모듈들)에 대해서 같이 빌드를 해줘야 하는데 그 방법에 대한 어려움도 있지만, 결국에는 각 모듈에 대해서 배포를 각각 해야되는데 각 모듈을 분리해서 배포할만큼의 필요성이 없다고 판단이 되었습니다.
1.1 모듈 생성
일단 프로젝트를 생성하게 되면 기본적인 프로젝트 구조로 이루어져 있습니다.
멀티모듈을 적용하기 위해 src 폴더는 삭제를 합니다. src 폴더를 지운 뒤에 각 모듈을 만들도록 하겠습니다.
모듈 생성을 하는 방법은 프로젝트에서 New Module을 통해 생성하시면 됩니다.
최종적인 모듈들을 생성한 구조입니다.
저의 경우에는 admin-board-api, admin-board-commons, admin-board-core, admin-board-view 이렇게 4개의 모듈로 나누었습니다.
1.2 Project build.gradle 설정
아래의 코드로 build.gradle을 1차적으로 설정하였습니다.
각 모듈들의 의존관계는 각 모듈의 build.gradle에 설정할 예정입니다.
중점으로 생각할 부분들만 짚어보면 bootJar는 enable=false로 설정하였습니다. 라이브러리를 제작하기 때문에 굳이 BootJar option을 true로 할 이유가 없었습니다. 사실 모든 모듈들이 bootJar Option값을 true로 설정할 이유가 없습니다.
subprojects는 전체 서브 모듈 에 해당되는 설정을 담을 수 있습니다. 즉 admin-board-api, admin-board-commons, admin-board-core, admin-board-view 에 대한 설정을 하였습니다.
plugins {
id 'java'
id 'java-library'
id 'org.springframework.boot' version '3.0.6'
id 'io.spring.dependency-management' version '1.1.0'
}
bootJar.enabled = false
subprojects {
group = 'com.twentiethcenturygangsta'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
}
repositories {
mavenCentral()
}
1.3 각 모듈 build.gradle 설정
각 모듈들의 의존관계에 대해 설정하였습니다. 아래의 예시는 admin-board-api 모듈의 build.gradle 입니다. 일단 크게 추가할 사항은 없기 때문에 기본적인 사항에 대해서만 작성하였습니다.
admin-board-core와 admin-board-commons 모듈만을 의존하기 때문에 dependencies에 등록하였습니다.
또한 bootJar 옵션을 true로 설정할 경우 실행가능한 jar를 만들려 하기 때문에 main()이 필요한데 이 부분은 라이브러리 특성상 필요하지 않기 때문에 false로 옵션을 설정합니다.
dependencies {
implementation project(':admin-board-core')
implementation project(':admin-board-commons')
}
bootJar.enabled = false
jar.enabled = true
'Spring' 카테고리의 다른 글
AdminBoard 라이브러리 만들기 - 1 (0) | 2023.05.07 |
---|---|
Redis로 캐싱하기 (0) | 2023.02.16 |