728x90
예시 상황: 온라인 쇼핑몰의 주문 처리 시스템
상황 개요
온라인 쇼핑몰에서 주문 처리 시스템을 개발하고 있습니다. 이 시스템은 주문 관리와 함께 고객 리뷰 관리 기능도 포함합니다.
'비즈니스 로직에 따라 강력하게 일관성을 유지할 필요가 없는 데이터'의 예시
- 고객 리뷰: 주문 처리와 직접적인 연관이 없는 고객 리뷰 데이터는 주문 데이터와 다른 일관성 요구사항을 가집니다. 예를 들어, 주문 상태는 실시간으로 엄격하게 관리되어야 하지만, 고객 리뷰는 지연된 업데이트가 가능합니다.
잘 된 설계의 예시 코드
별도의 애그리게이트로 분리된 경우
// 주문 애그리게이트
class Order {
var orderId: Long
var orderDetails: List<OrderDetail>
// 주문 관련 메소드들...
}
class OrderDetail {
var productId: Long
var quantity: Int
// 주문 세부 사항 관련 메소드들...
}
// 리뷰 애그리게이트
class Review {
var reviewId: Long
var orderId: Long
var customerId: Long
var content: String
// 리뷰 관련 메소드들...
}
편하지만 좋지 못한 설계의 예시 코드
기존 애그리게이트에 새로운 기능 추가된 경우
// 주문 애그리게이트에 리뷰 기능 추가
class Order {
var orderId: Long
var orderDetails: List<OrderDetail>
var reviews: List<Review> // 리뷰를 주문에 직접 포함
// 주문 관련 메소드들...
}
class OrderDetail {
var productId: Long
var quantity: Int
// 주문 세부 사항 관련 메소드들...
}
class Review {
var reviewId: Long
var content: String
// 리뷰 관련 메소드들...
}
비교 및 분석
잘 된 설계의 장점
- 책임의 분리: 주문과 리뷰는 서로 다른 책임을 가지므로, 각각의 애그리게이트로 분리함으로써 책임과 관심사를 명확히 구분합니다.
- 유지보수의 용이성: 각 애그리게이트는 독립적으로 변경 및 확장이 가능하며, 한 영역의 변경이 다른 영역에 영향을 미치지 않습니다.
- 시스템의 복잡성 감소: 각 애그리게이트가 더 작고 관리하기 쉬워져 전체 시스템의 복잡성이 감소합니다.
편하지만 좋지 못한 설계의 단점
- 증가된 복잡성: 주문 애그리게이트가 과도하게 커지며, 이로 인해 관리가 어려워집니다.
- 유연성 감소: 주문과 리뷰가 밀접하게 결합되어, 한 영역의 변경이 다른 영역에 영향을 미칠 수 있습니다.
- 일관성 관리의 어려움: 주문의 엄격한 일관성 요구사항과 리뷰의 느슨한 일관성 요구사항
이 혼재되어, 데이터 일관성 관리가 복잡해집니다.
결론
시스템의 비즈니스 요구사항이 증가함에 따라, 비즈니스 로직에 따라 강력하게 일관성을 유지할 필요가 없는 데이터를 별도의 애그리게이트로 분리하는 것은 시스템의 복잡성을 관리하고 유지보수를 용이하게 하는 데 중요합니다. 이는 시스템의 확장성과 유연성을 향상시키며, 장기적으로 더 건강한 소프트웨어 아키텍처를 유지하는 데 기여합니다.
728x90
'개발 방법론' 카테고리의 다른 글
바운디드 컨텍스트(Bounded Context)와 애그리게이트(Aggregate)의 차이 (0) | 2023.11.13 |
---|---|
데이터베이스 트랜잭션이 둘 이상의 애그리거트 인스턴스를 수정하지 못하게 하라! (0) | 2023.11.12 |
바운디드 컨텍스트(Bounded Context)의 이해와 가상 적용 사례 (1) | 2023.11.12 |
애그리게이트(Aggregate)의 이해와 예시 사례 (0) | 2023.11.12 |
익스트림 프로그래밍 (0) | 2023.11.08 |