도메인 관점

예를 들어, 유저가 책을 주문하는 서비스의 경우 모듈을 유저, 책, 주문과 같은 형식으로 나누어 모듈을 분리한다.

도메인을 기준으로 나누는 것으로 DDD가 떠올랐다.

백엔드 개발 관점

첫 번째는 아키텍처를 기준으로 분리하는 것이다. 

예시로는 계층형 아키텍처를 사용할 경우 컨트롤러, 서비스, 레포지토리(+도메인)를 각각 다른 모듈로 분리한다.

두 번째는 관련된 서버(api 서버, 배치 서버 등)를 기준으로 분리하는 것이다.

예시로는 컨트롤러+서비스(api 서버), 레포지토리+도메인(db 서버), 배치 서버 등 관련된 서버를 기준으로 모듈을 분리한다.

이 중에서도 사이드 프로젝트에서 보통 많이 쓰는 구성은 백엔드 개발 관점에서 관련된 서버를 기준으로 분리하는 방식이었고

필자도 해당 방식을 택했다.

module-api (컨트롤러+서비스)

module-domain (레포지토리+엔티티)

module-infrastructure (외부 api)

module-batch (배치 서버)

plugins {
    kotlin("jvm") version "1.9.21"
}
 
allprojects {
    group = "org"
    version = "1.0-SNAPSHOT"
 
    repositories {
        mavenCentral()
    }
}
 
subprojects {
    apply {
        plugin("org.jetbrains.kotlin.jvm")
    }
 
    java.sourceCompatibility = JavaVersion.VERSION_17
    java.targetCompatibility = JavaVersion.VERSION_17
 
    dependencies {
        implementation("org.jetbrains.kotlin:kotlin-reflect")
        testImplementation(kotlin("test"))
    }
 
    tasks.test {
        useJUnitPlatform()
    }
}
  • allprojects : 현재 모듈과 하위 모듈에 적용
  • subprojects : 하위모듈에만 적용됨
url: https://velog.io/@devmizz/Spring-%EB%A9%80%ED%8B%B0-%EB%AA%A8%EB%93%88%EC%9D%98-%EA%B5%AC%ED%98%841-%EB%AA%A8%EB%93%88-%EC%83%9D%EC%84%B1-%EB%B0%8F-%EA%B4%80%EA%B3%84-%EC%84%A4%EC%A0%95
title: "[Spring] 멀티 모듈의 구현(1) - 모듈 생성 및 관계 설정(1)"
description: "모듈을 본격적으로 만들어보자!"
host: velog.io
favicon: https://static.velog.io/favicons/favicon-32x32.png
image: https://velog.velcdn.com/images/devmizz/post/13804b25-e878-4dd1-8630-665c0554f4e7/image.png