본문 바로가기
개발 방법론

비즈니스 요구사항 증가에 따른 애그리게이트 분리

by 시니성 2023. 11. 12.

예시 상황: 온라인 쇼핑몰의 주문 처리 시스템

상황 개요

온라인 쇼핑몰에서 주문 처리 시스템을 개발하고 있습니다. 이 시스템은 주문 관리와 함께 고객 리뷰 관리 기능도 포함합니다.

'비즈니스 로직에 따라 강력하게 일관성을 유지할 필요가 없는 데이터'의 예시

  • 고객 리뷰: 주문 처리와 직접적인 연관이 없는 고객 리뷰 데이터는 주문 데이터와 다른 일관성 요구사항을 가집니다. 예를 들어, 주문 상태는 실시간으로 엄격하게 관리되어야 하지만, 고객 리뷰는 지연된 업데이트가 가능합니다.

잘 된 설계의 예시 코드

별도의 애그리게이트로 분리된 경우

// 주문 애그리게이트
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
    // 리뷰 관련 메소드들...
}

비교 및 분석

잘 된 설계의 장점

  • 책임의 분리: 주문과 리뷰는 서로 다른 책임을 가지므로, 각각의 애그리게이트로 분리함으로써 책임과 관심사를 명확히 구분합니다.
  • 유지보수의 용이성: 각 애그리게이트는 독립적으로 변경 및 확장이 가능하며, 한 영역의 변경이 다른 영역에 영향을 미치지 않습니다.
  • 시스템의 복잡성 감소: 각 애그리게이트가 더 작고 관리하기 쉬워져 전체 시스템의 복잡성이 감소합니다.

편하지만 좋지 못한 설계의 단점

  • 증가된 복잡성: 주문 애그리게이트가 과도하게 커지며, 이로 인해 관리가 어려워집니다.
  • 유연성 감소: 주문과 리뷰가 밀접하게 결합되어, 한 영역의 변경이 다른 영역에 영향을 미칠 수 있습니다.
  • 일관성 관리의 어려움: 주문의 엄격한 일관성 요구사항과 리뷰의 느슨한 일관성 요구사항

이 혼재되어, 데이터 일관성 관리가 복잡해집니다.

결론

시스템의 비즈니스 요구사항이 증가함에 따라, 비즈니스 로직에 따라 강력하게 일관성을 유지할 필요가 없는 데이터를 별도의 애그리게이트로 분리하는 것은 시스템의 복잡성을 관리하고 유지보수를 용이하게 하는 데 중요합니다. 이는 시스템의 확장성과 유연성을 향상시키며, 장기적으로 더 건강한 소프트웨어 아키텍처를 유지하는 데 기여합니다.