03. 여러 모듈로 프로젝트 구성

0. 왜 여러 개의 모듈로 구성되어 있나요?

웹 사이트에는 일반적으로 여러 기능이 있습니다.

허용 가능한 웹 사이트를 예로 들어도 다음 항목이 기본적으로 지원됩니다.

사용자 생성/삭제/수정
게시판 생성/삭제/수정
관리자 관리

하나의 프로젝트에서 이러한 모든 기능을 관리하는 것은 생각만 해도 복잡할 것입니다.

물론 기능이 적다면 간단하고 쉽게 개발할 수 있다.

하지만 서비스 규모가 커진다면? 체납 이런!
원한다 해도 전통적인 방식으로 개발할 수밖에 없다.

왜? 서비스의 규모는 현재 급속도로 성장하고 있지만 이를 전환하는 데 드는 기회 비용은 없습니다.

그러나 하나의 패키지에서 모두 관리하는 것은 매우 복잡합니다.

그러나 각 모듈을 개별적으로 단일 프로젝트로 빌드하면 불필요하게 리소스가 소모됩니다.

그래서 하나의 프로젝트 내에서 여러 모듈로 구성된 다중 모듈 프로젝트로 구성할 계획입니다.

1. 기본 프로젝트 구성


일반적으로 프로젝트의 src/ 디렉토리 아래에 구현됩니다.

2. 모듈 생성

프로젝트 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 (새로 만들기) > (모듈) 버튼을 클릭하여 모듈을 생성합니다.



2-1 모듈 생성 결과

사용자 이름이 지정된 소스 디렉토리가 생성되고 루트 프로젝트(아파트) settings.gradle에서 ‘사용자’ 포함자동으로 입력됩니다.

* 미입력시 수동으로 ‘{모듈 이름}’ 포함그냥 입력


3. 여러 모듈 설정

3-1 build.gradle 설정

루트 프로젝트(app)의 build.gradle을 다음과 같이 수정합니다.

사용자 모듈을 별도의 실행 가능한 JAR 파일이 아닌 의존성으로 사용하기 때문에,
bootJar 옵션 잘못된항아리 옵션 진실설정되었습니다
plugins {
	id 'java'
	id 'org.springframework.boot' version '3.0.4'
	id 'io.spring.dependency-management' version '1.1.0'
}

group = 'kr.co.dglee'
version = '0.0.1-SNAPSHOT'

sourceCompatibility = '17'
targetCompatibility = '17'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'

	implementation project(':user')
}

tasks.named('test') {
	useJUnitPlatform()
}

// 하위 모듈 공통 셋팅
subprojects {
	apply plugin: 'java'
	apply plugin: 'org.springframework.boot'
	apply plugin: 'io.spring.dependency-management'

	group = 'kr.co.dglee'
	version = '0.0.1-SNAPSHOT'

	compileJava.options.encoding = 'UTF-8'

	sourceCompatibility = '17'
	targetCompatibility = '17'

	repositories {
		mavenCentral()
	}

	dependencies {
		implementation 'org.springframework.boot:spring-boot-starter-web'
		testImplementation 'org.springframework.boot:spring-boot-starter-test'
	}
}

project(":user") {
	bootJar { enabled = false}
	jar { enabled = true}

	dependencies {
	}
}


사용자 프로젝트를 앱 프로젝트로 가져왔는지 확인합니다.

3-2 주요 응용 프로그램 설정

사용자 모듈의 패키지 구조는 다음과 같습니다.
kr.co.dglee.user 보지마.
앞으로는 user 외에 admin, board 등이 추가될 수 있으니 @ComponentScan의 pakcage를 설정하여 kr.co.dglee로 시작하는 모든 패키지를 찾도록 한다.


3-3 테스트 컨트롤러 및 메서드 작성

문자열 useradd를 반환하는 /users/add 테스트 메서드를 만듭니다.


4. 멀티 모듈 확인

응용 프로그램을 실행하고 http://localhost:8080/users/add에 액세스하여 useradd라는 문자열이 표시되면 성공한 것입니다.



끝…

이 프레임워크가 완성되었습니다.
그 외 Lombok, JPA, querydsl 등은 추후에 올릴 예정입니다.

회사에서 일하면서 이 프로젝트가 부족했나, 아니면 했으면 좋았을까? 우리는 우리가 하는 일에 집중할 것입니다.

안 해본 것들도 해보고 싶고, 내 지식으로 좀 더 트렌드에 맞는 것들을 배우고 싶다.