본문 바로가기

개발 방법론9

헥사고날 아키텍쳐(feat. 코틀린 멀티 모듈) 정말 오랜만에 째찌삐띠형님이 아닌 직접 쓴 글을 게시하게 되었습니다! 오늘의 주제는 헥사고날 아키텍쳐 입니다. 헥사고날 아키텍쳐란? 출처 :엉클 밥 님의 Clean Coder Blog 클린 아키텍쳐를 깔끔하게 구현할 수 있는 아키텍쳐 중 하나로, 도메인 비즈니스 로직과 외부세계를 격리하고 외부에 어떤 의존성도 갖지 않게 하기 위한 아키텍쳐 입니다. 결국 커플링이 문제다! 그렇다면 이같은 클린 아키텍쳐를 지향하는 이유는 무엇일까요? 이는 결국 유지 보수를 쉽게 하기 위함입니다. 먼저 헥사고날 아키텍쳐는 모듈간 결합도를 현저히 낮춰줍니다. 모듈간 결합도를 떨어뜨리면 모듈 별로 단위 테스트를 하기 쉽고, 오류 발생시 오류 추적과 수정이 쉬워집니다. ) 출처 : Peer Richelsen Twitter 최근 N.. 2023. 11. 20.
바운디드 컨텍스트(Bounded Context)와 애그리게이트(Aggregate)의 차이 바운디드 컨텍스트(Bounded Context)란? 바운디드 컨텍스트는 도메인 주도 설계(DDD, Domain-Driven Design)에서 중요한 개념입니다. 이는 특정 도메인 모델이 적용되는 경계를 정의합니다. 바운디드 컨텍스트는 도메인의 일부분으로서, 도메인 모델의 용어와 규칙이 유효한 특정 '문맥' 또는 '경계'를 의미합니다. 각 바운디드 컨텍스트는 독립적인 도메인 모델을 가지며, 이를 통해 복잡한 시스템을 여러 개의 관리 가능한 부분으로 나눕니다. 애그리게이트(Aggregate)란? 애그리게이트는 도메인 모델 내의 객체 그룹으로, 일반적으로 엔티티(Entity)와 값 객체(Value Object)의 집합입니다. 애그리게이트는 하나의 루트 엔티티(Aggregate Root)를 중심으로 구성되며, .. 2023. 11. 13.
데이터베이스 트랜잭션이 둘 이상의 애그리거트 인스턴스를 수정하지 못하게 하라! Domain-Driven Design(DDD)의 중요한 원칙 중 하나인 "데이터베이스 트랜잭션이 애그리게이트의 둘 이상의 인스턴스를 수정하지 못하게 하라"에 대해 설명하겠습니다. 이 원칙은 애그리게이트의 일관성과 경계를 유지하는 데 중요한 역할을 합니다. 애그리게이트란 무엇인가? DDD에서 애그리게이트는 관련된 객체의 클러스터로, 일관된 변경을 보장하는 역할을 합니다. 각 애그리게이트는 단일 루트 엔티티를 갖고, 이 루트 엔티티를 통해서만 애그리게이트 내의 다른 객체들과 상호작용할 수 있습니다. 이런 구조는 애그리게이트의 내부 상태를 외부로부터 보호하고, 복잡성을 관리하는 데 도움이 됩니다. 원칙의 중요성 이 원칙은 각 애그리게이트가 자체적으로 일관성을 유지할 수 있도록 보장합니다. 둘 이상의 애그리게이.. 2023. 11. 12.
비즈니스 요구사항 증가에 따른 애그리게이트 분리 예시 상황: 온라인 쇼핑몰의 주문 처리 시스템 상황 개요 온라인 쇼핑몰에서 주문 처리 시스템을 개발하고 있습니다. 이 시스템은 주문 관리와 함께 고객 리뷰 관리 기능도 포함합니다. '비즈니스 로직에 따라 강력하게 일관성을 유지할 필요가 없는 데이터'의 예시 고객 리뷰: 주문 처리와 직접적인 연관이 없는 고객 리뷰 데이터는 주문 데이터와 다른 일관성 요구사항을 가집니다. 예를 들어, 주문 상태는 실시간으로 엄격하게 관리되어야 하지만, 고객 리뷰는 지연된 업데이트가 가능합니다. 잘 된 설계의 예시 코드 별도의 애그리게이트로 분리된 경우 // 주문 애그리게이트 class Order { var orderId: Long var orderDetails: List // 주문 관련 메소드들... } class Orde.. 2023. 11. 12.