Pink Spider/Aggregate 패턴과 Bulkhead 패턴

Created Tue, 11 Nov 2025 10:16:50 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
1150 Words 5 min

IT 개발에서 Aggregate 패턴Bulkhead 패턴은 모두 **마이크로서비스 아키텍처(MSA)**나 분산 시스템에서 자주 사용되는 **설계 패턴(Design Pattern)**입니다. 각각의 목적은 다르지만, 시스템 안정성과 응답 효율을 높이기 위한 공통 목표를 가집니다. 아래에서 자세히 설명드릴게요.


🧩 1. Aggregate 패턴

💡 개념

Aggregate 패턴은 **도메인 주도 설계(DDD: Domain-Driven Design)**에서 등장하는 개념으로, 데이터의 일관성과 변경 단위를 정의하기 위한 구조입니다. 즉, 관련된 엔터티(Entity)와 값 객체(Value Object)를 하나의 **집합(Aggregate)**으로 묶고, 그 집합의 일관성을 책임지는 루트 엔터티를 Aggregate Root라고 부릅니다.

⚙️ 구성 요소

  • Aggregate Root: 외부에서 접근 가능한 유일한 진입점. (예: Order)
  • Entities: 고유한 ID를 가진 객체들. (예: OrderItem)
  • Value Objects: ID 없이 값만으로 구분되는 불변 객체. (예: Money, Address)

📘 예시

class Order { // Aggregate Root
    private Long id;
    private List<OrderItem> items;
    private Money totalPrice;

    public void addItem(Product product, int quantity) {
        items.add(new OrderItem(product, quantity));
        recalculateTotalPrice();
    }
}

OrderOrderItem을 직접 관리하며, 외부에서는 Order를 통해서만 OrderItem에 접근 가능하도록 합니다. 이로써 데이터의 일관성과 트랜잭션 범위를 제어할 수 있습니다.

🚀 사용 목적

  • 트랜잭션 경계를 명확히 하여 일관성을 보장
  • 복잡한 도메인 모델을 모듈화하고 유지보수성을 향상
  • 데이터 무결성 및 불변성을 유지

🧱 2. Bulkhead 패턴

💡 개념

Bulkhead(격벽) 패턴은 시스템 장애가 다른 부분으로 전파되지 않도록 격리하는 아키텍처 패턴입니다. 배의 격벽이 한 구획이 침수되어도 나머지가 영향을 받지 않도록 하는 원리와 같습니다.

MSA 환경에서 특정 서비스나 리소스가 장애를 일으켜도, 다른 서비스로의 영향이 최소화되도록 격리하는 전략을 말합니다.

⚙️ 구현 방식

  • 스레드 풀 분리(Thread Pool Isolation) 각 서비스 호출마다 별도의 스레드 풀을 사용하여 하나의 서비스 장애가 전체 시스템을 블로킹하지 않도록 함.
  • 커넥션 풀 분리(Connection Pool Isolation) 데이터베이스나 외부 API 접근 시 커넥션 풀을 격리하여 장애 전파 방지.
  • 리소스 제한(Resource Quota) 특정 서비스나 요청 유형에 리소스 한도를 설정.

📘 예시 (Resilience4j 또는 Spring Cloud)

@Bulkhead(name = "paymentService", type = Bulkhead.Type.THREADPOOL)
public PaymentResponse callPaymentService(Order order) {
    return paymentClient.pay(order);
}

paymentService 호출에 대한 스레드 풀을 분리하여, 장애 발생 시 다른 서비스(shippingService, inventoryService)는 영향받지 않습니다.

🚀 사용 목적

  • 서비스 간 장애 격리 및 전파 방지
  • 시스템 전체 안정성 확보
  • 서킷 브레이커(Circuit Breaker)와 함께 사용 시 복원력 극대화

🔄 Aggregate vs Bulkhead 비교 요약

구분 Aggregate 패턴 Bulkhead 패턴
주요 영역 도메인 모델 설계 (DDD) 시스템 아키텍처 / 인프라
초점 데이터 일관성, 트랜잭션 경계 장애 격리, 시스템 안정성
적용 위치 엔터프라이즈 도메인 로직 내부 서비스 간 호출, 리소스 관리
대표 구현 Aggregate Root, Repository Resilience4j, Hystrix, Istio 등

🧠 함께 사용되는 패턴들

  • Aggregate는 보통 Repository, Factory, Specification 패턴과 함께 사용.
  • BulkheadCircuit Breaker, Retry, Rate Limiter와 함께 Resilience 패턴 세트로 활용.