멀티모듈이란?
하나의 프로젝트를 여러개의 독립적인 모듈로 분리하여 구성하는 방식으로 여러 모듈간 의존성 관리를 할 수 있다.
Ex)
login 모듈(로그인 관련 api)은 auth와 common 모듈을 포함한다.
board 모듈(게시판 관련 api)은 auth와 common 모듈을 포함한다.
auth 모듈(authentication 관련 설정) Oautn, jwt 관련 라이브러리를 포함한다.
위와같이 모듈을 분리함으로써 auth가 필요 없는 모듈은 auth를 가져가지 않고 추후 다수의 개발자가 개발 시 보다 용이한 버전관리를 할 수 있다.
프로젝트 우클릭 -> New -> Module
module-common, module-normal-board, modue-main 추가
기존의 src 제거
ps . 모듈 이름 오타남.
modue-noraml-board -> module-normal-baord
settings.gradle(intelij에서 자동으로 작성해줌)
rootProject.name = 'portfolio_was'
include 'module-common'
include 'modue-normal-board'
include 'module-main'
build.gradle(프로젝트 최상위)
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
}
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
// 모든 모듈에 적용되는 사항
subprojects {
apply plugin: "org.springframework.boot"
apply plugin: "io.spring.dependency-management"
apply plugin: "java"
group = 'com.portfolio'
version = '0.0.1-SNAPSHOT'
// 라이브러리 및 프레임워크 저장소
repositories {
mavenCentral()
}
configurations {
compileOnly {
// 롬복 관련 설정
extendsFrom annotationProcessor
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// OpenAPI의 swager 기능 사용하기 위해
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.5.0'
}
tasks.named('test') {
useJUnitPlatform()
}
}
module-normal-board의 build.gradle
// 빌드 시 bootJar로 생성하지않음
bootJar { enabled = false }
// 다른 모듈의 라이브러리 형태가 될 것이기 때문에 jar 형태로 진행
jar { enabled = true }
dependencies {
// common 모듈에 의존
implementation project(":module-common")
}
module-common의 build.gradle
bootJar { enabled = false }
jar { enabled = true }
dependencies {
}
module-main의 build.gradle
dependencies {
// 이미 board에 포함된 의존성임으로 추가하지 않음
// implementation project(":module-common")
implementation project(":module-normal-board")
}
module-main 의 main 함수 추가
PortfolioWasApplication.java
package com.portfoio;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication(scanBasePackages = "com.portfoio")
public class PortfolioWasApplication {
public static void main(String[] args) {
SpringApplication.run(PortfolioWasApplication.class, args);
}
}
구동 확인
모듈 의존성 적용 확인
module-common에 TestController.java 추가
OpenAPI 접속
- http://localhost:8080/swagger-ui/index.html
main 모듈에 없는 Controller 적용 확인
https://github.com/Kmmanki/portfolio_was
'웹 정리 > 웹 포트폴리오 만들기' 카테고리의 다른 글
WAS 5차 (JPA, Swagger 설정을 사용한 게시물 등록) (0) | 2024.07.26 |
---|---|
WAS 4차 (ELK, Logback, Jenkins를 사용한 배치 컨트롤 및 로그수집)_긴급 (0) | 2024.06.13 |
WAS 3차 (docker maria DB 세팅) (0) | 2024.06.01 |
WAS 1차 (프로젝트 생성 및 라이브러리 추가) (0) | 2024.05.08 |
WAS 0차 (구성) (0) | 2024.05.07 |