앞선 포스팅에서는 도메인 영역과 관련해 살펴 보았습니다. 이 도메인이 제 기능을 하기 위해서는 사용자와 도메인을 연결해 주는 매개체가 필요하며 응용 영역과 표현 영역이 이 매개체 역할을 합니다. 이번 포스팅에서는 응용 영역에 대해 알아보겠습니다.응용 서비스응용 서비스는 사용자(클라이언트)가 요청한 기능을 실행합니다.주요 역할도메인 객체를 사용해 사용자의 역할을 처리트랜잭션 처리응용 서비스는 주로 도메인 객체 간의 흐름을 제어하기에 아래와 같이 단순한 형태를 가집니다.일반적인 기능public Result doSomeFunc(SomeReq req) { // 1. 리포지터리에서 애그리거트를 구한다. SomeAgg agg = someAggRepository.findById(req.getId()); checkN..
애그리거트란?하나의 시스템을 개발할 때, 상위 수준 개념을 이용해서 전체 모델을 정리하면 전반적인 관계를 이해하는 데 도움이 됩니다.쇼핑몰을 예시로 들면, 아래와 같이 표현할 수 있습니다.이를 개별 객체 단위로 다시 그려보면 아래와 같습니다.여기서 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고, 전반적인 구조나 큰 수준에서 도메인 간의 관계를 파악하기 어려워지게 됩니다. 결국, 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요한데, 이 방법이 애그리거트 입니다. 애그리거트를 한 마디로 표현한다면,관련된 객체들의 집합을 하나의 단위로 취급하는 패턴입니다.즉, 도메인 모델에서 밀접하게 관련된 객체들의 집합을 의미합니다. 이는 ..
도메인이란?도메인이란해결하고자 하는 문제의 영역을 말합니다. 한 도메인은 다시 하위 도메인으로 나눌 수 있습니다.예를 들어, "온라인 서점"이라는 도메인은 다음과 같은 하위 도메인으로 나눌 수 있습니다.회원주문결제배송카탈로그리뷰정산혜택도메인 모델도메인 모델이란특정 도메인을 개념적으로 표현한 것입니다. 주문 도메인을 예시로 객체 모델로 구성하면 다음과 같이 나타낼 수 있습니다.도메인을 이해하려면 도메인이 제공하는 기능과 도메인의 주요 데이터 구성을 파악해야 합니다. 이런 면에서 기능과 데이터를 함께 보여주는 객체 모델은 도메인을 모델링하기에 매우 적합합니다.물론, 객체가 아닌 상태 다이어그램, 수학 공식 등을 통해 모델링하는 방법도 존재합니다. 즉, 도메인을 이해하는 데 도움이 된다면 표현 방식이 무엇인지..
애그리거트(Aggregate)란?애그리거트는관련된 객체들의 집합을 하나의 단위로 취급하는 패턴입니다.즉, 도메인 모델에서 밀접하게 관련된 객체들의 집합을 의미합니다. 이는 복잡한 도메인을 더 작고 관리하기 쉬운 단위로 나누는 데 도움을 줍니다.애그리거트의 주요 목적도메인 모델의 복잡성 감소데이터 일관성 유지트랜잭션 경계 정의애그리거트의 구조애그리거트는 다음과 같은 구조로 이루어져 있습니다애그리거트 루트: 애그리거트의 대표 엔티티로, 외부에서 애그리거트에 접근할 수 있는 유일한 진입점입니다.엔티티: 고유한 식별자를 가진 객체들입니다.값 객체: 식별자가 없고 불변성을 가진 객체들입니다.애그리거트 설계 원칙불변식 보호: 애그리거트 내부의 모든 불변식(invariants)은 항상 일관된 상태를 유지해야 합니다...