Crafting a self-documenting Modular Monolith with DDD principles (theory not included) @ Spring I/O
- 마이크로서비스와 모놀리스 아키텍처의 장단점을 분석하고, 모듈형 모놀리스 아키텍처가 두 방식의 장점을 결합하여 내부 모듈 간 강력한 경계를 설정하고 유지보수성, 테스트 용이성, 이해도를 높일 수 있음을 강조 💡
- 스프링 모듈레이트를 사용하여 도메인 주도 설계(DDD) 원칙에 따라 모듈을 구성하고, 바운디드 컨텍스트를 모델링하여 코드 내에서 경계를 명확히 하고, 모듈 간 통신을 위해 이벤트를 활용하여 마이크로서비스로의 전환을 용이하게 함 📦
- J molecules 라이브러리를 활용하여 DDD를 구현하고, 아키텍처 규칙을 정의하는 테스트를 작성하여 코드의 일관성을 유지하고 새로운 개발자가 프로젝트의 아키텍처를 쉽게 이해하고 따를 수 있도록 함 🧪
- 레이어드 아키텍처를 적용하고 각 레이어의 역할을 명확히 정의하여 의존성 문제를 해결하고, 테스트를 통해 아키텍처 준수를 강제하여 코드 품질을 향상시킴 🧱
- JPA를 사용하여 엔티티 매핑을 자동화하고, 값 객체(Value Object)를 통해 데이터 유효성을 검증하여 비즈니스 로직의 신뢰성을 높임 ✅
- 트랜잭션 이벤트 리스너를 활용하여 이벤트 기반 아키텍처를 구현하고, 트랜잭션 커밋 시점에 이벤트를 발행하여 최종 일관성(Eventual Consistency)을 보장하며, 모듈레이트와 스프링의 기능을 활용하여 트랜잭션 아웃박스 패턴을 구현함 ✉️
- 다양한 유형의 이벤트 리스너(동기, 비동기, 트랜잭션)를 제공하여 이벤트 처리 방식을 유연하게 구성하고, 이벤트 처리 중 오류 발생 시 트랜잭션을 롤백하여 데이터 정합성을 유지함 rollback 🔙
- self-documenting: 새로운 개발자가 프로젝트에 참여할 때 테스트 코드를 통해 아키텍처 규칙을 쉽게 이해하고 따를 수 있도록 하여 문서화 부담을 줄이고 코드 품질을 유지함 🧑🏫