jigumulmi/
	├── admin/
	│   ├── src/
	│   │   ├── main/
	│   │   ├── test/
	│   ├── build.gradle
	├── core/
	│   ├── src/
	│   │   ├── main/
	│   │   ├── test/
	│   │   ├── testFixtures/
	│   ├── build.gradle
	├── monitor/
	├── build.gradle
	├── gradle.properties
	├── settings.gradle

모듈 의존관계

모듈 의존관계

상황

src/
├── main/
│   └── java/com/jigumulmi/
│       ├── admin/
│       │   ├── banner/
│       │   ├── member/
│       │   └── place/
│       ├── aws/
│       ├── banner/
│       ├── common/
│       ├── config/
│       ├── member/
│       ├── place/
│       └── JigumulmiApplication.java
│   └── resources/
└── test/
    └── java/com/jigumulmi/
        ├── admin/
        │   ├── banner/
        │   └── place/
        ├── common/
        ├── config/security/
        ├── member/
        ├── place/
    └── resources/

모듈 구조 설계

모듈 격리 수준

<aside> ⚙

사용자 기능을 담당하는 core와 관리자 기능을 담당하는 admin 모듈로 분리할 때, 격리 수준을 어느 정도로 할 것인지

</aside>

  1. 완전한 격리: 컴파일할 때 서로를 인식하지 못해 import 불가능
    1. 엔티티까지 admin 용으로 분리하여 완전 격리를 시도해보았는데,
    2. 매니저 계층에서 이루어지는 JPA Entity → DTO 변환 작업 로직을 admin 모듈에도 전부 재작성이 필요하여 보류
  2. 느슨한 격리: admin은 core에 존재하는 utils 객체, JPA 엔티티 등 공통 자원 사용 가능

코드 계층 반영 여부

<aside> ⚙

core 모듈 내에서 api, domain, storage 등 모듈 격리 여부

</aside>

모듈 분리 Gradle 설정

<aside> 💡

멀티모듈 구조는 루트 모듈 안에 서브 모듈들이 존재하는 형태이다

</aside>

plugins {
		// 루트에 적용할 플러그인 지정
	  id 'java'
	  id 'org.springframework.boot' apply false
	  id 'io.spring.dependency-management' apply false
}

java {
		// java 플러그인 설정 (버전 등)
	  sourceCompatibility = project.findProperty("javaVersion")
}

allprojects {
		// 루트 모듈 포함 모든 모듈의 공통 설정
		// 프로젝트 그룹명, 버전 등
    group = project.findProperty("projectGroup")
    version = project.findProperty("applicationVersion") + '-SNAPSHOT'

    repositories {
        mavenCentral()
    }
}

subprojects {
		// 루트 모듈 제외 서브 모듈들의 공통 설정
		// 플로그인, 의존성, 태스크 등
}
pluginManagement {  // 공통 플러그인 버전 관리 (gradle.properties 활용)
    plugins {
        id 'org.springframework.boot' version "${springBootVersion}"
        id 'io.spring.dependency-management' version "${springDependencyManagementVersion}"
    }
}

rootProject.name = 'jigumulmi'

// 서브 모듈 등록
include(
        "core",
        "admin"
)
// 공통 설정값 응집
// .gradle 파일에서 사용

applicationVersion=0.0.1

projectGroup=com.jigumulmi

javaVersion=21

springBootVersion=3.2.4
springDependencyManagementVersion=1.1.4