개요
Spring Modulith를 사용하면 잘 구주화된 Spring boot 애플리케이션을 구축할 수 있고, 도메인 기반의 애플리케이션 모듈을 찾고 작업할 수 있도록 가이드 해준다.
DDD를 위한 구조적인 코드 검증 및 문서화.
모듈식 모놀리스 아키텍처는 단순성과 유지관리 용이성의 장점.

Spring Boot Structuring Code
Spring Boot does not require any specific code layout to work. However, there ar some best practices that help.
| If you wich to enforce a structure based on domains, take a look at Spring Modulith. |
Locating the Main Appcation Class
애플리케이션 클래스는 다른 클래스 위의 루트 패키지에 배치하는 것을 추천한다.
예제에서도 도메인 가반으로 패키지를 분리하도록 되어있습니다.
com
+- example
+- myapplication
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
Spring Boot Reference Documentation
This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration, and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly spe
docs.spring.io
Spring-petclinic Example
스프링 petclinic 예제에서도 도메인 기반으로 패키지를 분리되어있다.

Spring Modulith 적용
dependency 추가
dependencies {
// spring modulith
implementation 'org.springframework.modulith:spring-modulith-starter-core'
}
dependencyManagement {
imports {
mavenBom "org.springframework.modulith:spring-modulith-bom:#{springModulithVersion}"
}
}
Code 작성 가이드
- 도메인 기준으로 패키지를 분리한다.
- 외부 모듈과 연동할 기능만 공개하고 나머지는 모두 Encapsulation.
- 모듈간 순환 참조 금지
- 모듈안에 서브 모듈 참조 금지
Unit Test로 검증 가능
class ModularityTests {
ApplicationModules modules = ApplicationModules.of(Application.class);
@Test
void verifiesModularStructure() {
modules.verify();
}
@Test
void createModuleDocumentation() {
new Documenter(modules).writeDocumentation();
}
}
참고
https://docs.spring.io/spring-modulith/reference/1.1/
'dev > spring' 카테고리의 다른 글
| [Spring] Spring Framework CDS(Class Data Sharing) (Project Leyden) (0) | 2024.06.06 |
|---|---|
| REST Assured로 API 테스트하기 (0) | 2024.06.03 |
| Spring Framework - Runtime efficiency with String (today and tomorrow) (0) | 2024.06.02 |
| Ehcache Annotations for Spring (0) | 2010.08.05 |
| HiddenHttpMethodFilter (0) | 2010.06.24 |