멀티 모듈 프로젝트 셋팅 순서

coldrice99·2024년 12월 3일
0
post-thumbnail

1. 프로젝트 기본 셋업

1.1. Gradle 멀티 모듈 프로젝트 생성

  1. 루트 프로젝트 생성:

    • Gradle 기반의 프로젝트를 생성한다.
    • 프로젝트 이름은 팀 프로젝트 이름에 맞게 설정한다.
  2. Gradle 설정 파일 생성:

    • settings.gradle 파일에서 멀티 모듈을 정의한다.
    • 하위 모듈의 경로를 지정.

settings.gradle 예시:

rootProject.name = 'waiting-system'

include 'libs:core'
include 'libs:database'
include 'libs:s3-client'
include 'libs:queue-client'
include 'api:user-api'
include 'api:boss-api'
include 'api:admin-api'
  1. 디렉토리 구조 생성:
    • libs/api/ 디렉토리를 만들고, 각각 모듈 디렉토리를 생성한다.

최종 디렉토리 구조:

waiting-system/
├── build.gradle
├── settings.gradle
├── libs/
│   ├── core/
│   ├── database/
│   ├── s3-client/
│   └── queue-client/
└── api/
    ├── user-api/
    ├── boss-api/
    └── admin-api/

2. 각 모듈별 초기화

2.1. Core 모듈 초기화

  1. libs/core 디렉토리로 이동:

    • Gradle 초기화 명령 실행 (gradle init).
  2. build.gradle 파일 작성:

    • Core 모듈에 필요한 의존성(Spring Web, Validation 등)을 추가.

libs/core/build.gradle:

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

2.2. Database 모듈 초기화

  1. libs/database 디렉토리로 이동:

    • Gradle 초기화 명령 실행.
  2. build.gradle 파일 작성:

    • JPA 및 Core 모듈 의존성을 추가.

libs/database/build.gradle:

dependencies {
    implementation project(':libs:core') // Core 모듈 의존
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

2.3. S3-Client 모듈 초기화

  1. libs/s3-client 디렉토리로 이동:

    • Gradle 초기화 명령 실행.
  2. build.gradle 파일 작성:

    • Core 모듈과 S3 관련 의존성을 추가.

libs/s3-client/build.gradle:

dependencies {
    implementation project(':libs:core')
    implementation 'com.amazonaws:aws-java-sdk-s3'
}

2.4. Queue-Client 모듈 초기화

  1. libs/queue-client 디렉토리로 이동:

    • Gradle 초기화 명령 실행.
  2. build.gradle 파일 작성:

    • Core 모듈과 메시지 큐 관련 의존성을 추가.

libs/queue-client/build.gradle:

dependencies {
    implementation project(':libs:core')
    implementation 'org.springframework.boot:spring-boot-starter-amqp' // RabbitMQ 예시
}

2.5. API 모듈 초기화 (User, Boss, Admin)

  1. 각 API 모듈 디렉토리 초기화:

    • api/user-api, api/boss-api, api/admin-api 각각 초기화.
  2. build.gradle 파일 작성:

    • Core 모듈과 필요한 라이브러리 의존성을 추가.

api/user-api/build.gradle:

dependencies {
    implementation project(':libs:core') // 공통 기능
    implementation project(':libs:database') // 데이터베이스
    implementation project(':libs:s3-client') // 파일 저장
    implementation project(':libs:queue-client') // 메시지 큐
}

3. 공통 빌드 설정

3.1. 루트 프로젝트 build.gradle 설정

  1. 공통 의존성 버전 관리:
    • build.gradle에서 플러그인 및 공통 의존성 버전을 설정.

build.gradle:

plugins {
    id 'org.springframework.boot' version '3.1.0' apply false
    id 'io.spring.dependency-management' version '1.1.3' apply false
    id 'java'
}

allprojects {
    group = 'com.example'
    version = '1.0.0'

    repositories {
        mavenCentral()
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'io.spring.dependency-management'

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

4. 프로젝트 초기 테스트

  1. Gradle 빌드 확인:

    • 최상위 디렉토리에서 ./gradlew build를 실행해 빌드가 정상적으로 작동하는지 확인.
  2. 모듈 간 의존성 확인:

    • 각 모듈에서 ./gradlew dependencies를 실행해 의존성이 제대로 연결되었는지 점검.
  3. Spring Boot 애플리케이션 실행:

    • API 모듈 중 하나(예: user-api)에 @SpringBootApplication을 추가해 애플리케이션이 정상적으로 실행되는지 확인.

5. 초기 설계의 유의점

  1. 모듈 경량화:

    • 각 모듈은 역할에 맞는 기능만 포함해야 하며, 필요 이상으로 의존성을 추가하지 않는다.
  2. 의존성 주의:

    • Core 모듈에서만 Spring Web을 의존하도록 설정하고, 다른 모듈에서 직접 사용하지 않도록 제한.
  3. 테스트 전략 수립:

    • Core, Database, API 모듈 각각의 단위 테스트와 통합 테스트를 별도로 작성한다.
  4. 유지보수 고려:

    • 라이브러리(S3, Queue 등)는 API 모듈에서 직접 구현하지 않고, 공통 모듈을 활용해 재사용성을 높인다.
profile
서두르지 않으나 쉬지 않고

0개의 댓글