Spring Modulith

겔로그·2023년 9월 10일
0

이번 글에서는 Modular Monolithic Architecture를 지원하는 Spring Boot의 새로운 라이브러리 Spring Modulith에 대해 알아보는 시간을 가져보겠습니다.

Spring Modulith를 사용하기전 필요한 선행지식

Spring Modulith를 알아보기 이전에, 먼저 알아야하는 선행 지식을 공유드리겠습니다.

1. Modular Monolithic Architecture

Modular Monolithic Architecture를 읽어보고 오시면 해당 아키텍처의 사용 배경에 대해 이해하실 수 있습니다.

2. DDD (Domain-Driven Development)

로직을 모듈로 분리하는 과정에서 대표적으로 어떻게 분리할 것인가에 대한 개발 방식입니다. 대표적으로 도메인 기반 방식이 존재하며, DDD에 대한 기본적인 개념을 이해하고 사용하시는 것을 권장합니다.

3. Spring Boot

Spring Modulith는 Spring Boot 내에서 사용되는 개념입니다. 사용 이전에 Spring 에 대한 전반적인 이해도를 가지신 뒤 사용하시는 것을 권장합니다.

자 그럼 Spring Modulith에 대해 알아볼까요?

Spring Modulith란?

Spring Modulith는 애플리케이션에서 논리적 모듈 개발을 하는 개발자를 지원하기 위해 만들어진 프로젝트입니다. Spring Modulith를 통해 구조적인 검증 및 문서화가 가능해지며, 모듈별 통합테스트, 의존성 관리 등을 할 수 있습니다.

Spring Modulith Library

Spring Modulith에서는 다음과 같은 라이브러리를 지원합니다.

ModuleTypical scopeDescription
spring-modulith-actuatorruntime애플리케이션 모듈 구조를 노출시키는 actuator
spring-modulith-apicompileSpring Modulith의 기본 동작을 추상화
spring-modulith-coreruntime애플리케이션 모듈 API core 라이브러리
spring-modulith-docstest모듈을 Asciidoctor and PlantUML로 문서화해주는 라이브러리
spring-modulith-events-amqpruntimeEvent 외부화 지원(AMQP용)
spring-modulith-events-apiruntimeSpring Modulith의 이벤트 API
spring-modulith-events-coreruntimeEventPublicationRegistry and EventPublicationSerializer 와 같은 이벤트 구독 핵심 구현을 추상화한 라이브러리 
spring-modulith-events-jacksonruntimeJackson기반 EventPublicationSerializer 구현
spring-modulith-events-jdbcruntimeJDBC 기반 EventPublicationRegistry 구현
spring-modulith-events-jmsruntimeEvent 외부화 지원(JMS)
spring-modulith-events-jparuntimeJPA 기반 EventPublicationRegistry 구현
spring-modulith-events-kafkaruntimeEvent 외부화 지원(Kafka)
spring-modulith-events-mongodbruntimeMongoDB 기반 EventPublicationRegistry 구현
spring-modulith-momentscompile시간 흐름에 따른 이벤트 기반 접근 방식 참고
spring-modulith-runtimeruntime런타임에 ApplicationModules 인스턴스를 부트스트랩할 수 있도록 지원
spring-modulith-observabilityruntimeZipkin과 같은 도구에서 시각화 할 수 있도록 도움을 줌

Spring Modulith를 사용하면?

Spring Modulith를 이용할 경우 개발자는 다음과 같은 이점을 얻을 수 있습니다.

1. 모듈간의 의존성을 관리할 수 있습니다.

@org.springframework.modulith.ApplicationModule(
  allowedDependencies = "order::spi"
)

다음과 같은 어노테이션을 통해 모듈간의 의존성을 명시할 수 있습니다. 명시된 모듈간의 참조를 허용하며, 이외의 참조는 jMolecules 와 같은 관계 검증을 통해 올바르지 않은 참조 관계를 선택적으로 검증할 수 있습니다.

검증 예시

ApplicationModules.of(Application.class).verify();

2. 모듈간의 관계를 문서화하기 쉽습니다.

아래와 같이 Documenter를 통해 애플리케이션 내 모듈간 의존성 관계를 다이어그램으로 생성할 수 있습니다.

지원 버전

업로드중..

2023.08.23에 정식 버전 1.0.0이 출시되었으며 현재 1.1.0-SNAPSHOT 버전까지 지원하고 있습니다. 계속해서 빠른 개발이 진행되고 있다는 점을 알고 이용하시는 것을 권장드립니다. (아직까진 상품(실제 운영하는 서비스)에 적용하기엔 어려움이 있을 것 같습니다.)

오늘은 Spring Modulith에 대해 간단하게 알아보는 시간을 가졌습니다. 다음에는 Spring Modulith를 적용한 간단한 프로젝트와 각각의 라이브러리에 대한 설명을 가지고 찾아뵙겠습니다.

읽어주셔서 감사합니다.

Reference

Spring Modulith

profile
Gelog 나쁜 것만 드려요~

0개의 댓글