Composition vs Association — 차이 #shorts #SAP #CAP

Moderator

이 글이 답하는 질문

  • CAP에서 Composition과 Association 중 어느 걸 써야 하나?
  • 둘의 실제 동작 차이가 뭔가?
  • Draft, cascade, OData expand에서 어떻게 달라지나?

핵심 차이 한눈에

CompositionAssociation
관계부모-자식 (강결합)독립 엔티티 참조 (약결합)
자식 독립 존재불가 — 부모 삭제 시 함께 삭제가능 — 부모와 독립
Draft 지원자동 포함포함 안 됨
OData Deep Insert자동 지원별도 요청 필요
대표 예시Order → OrderItemsOrder → Customer

직접 해보기

1. Composition — 자식이 부모에 종속

entity Orders : cuid {
  status : String;
  items  : Composition of many OrderItems
             on items.order = $self;
}

entity OrderItems : cuid {
  order    : Association to Orders;
  product  : String;
  quantity : Integer;
}

2. Association — 독립 엔티티 참조

entity Orders : cuid {
  status   : String;
  customer : Association to Customers; // 독립 참조
}

entity Customers : cuid {
  name  : String;
  email : String;
  // Orders 없어도 존재 가능
}

3. OData 요청 차이

// Composition — Deep Insert 한 번에
POST /Orders
{ "status":"New",
  "items": [{"product":"A","quantity":2}] }

// Association — Customer 먼저 존재해야 함
POST /Orders
{ "status":"New", "customer_ID":"existing-uuid" }

삽질 노트

  • Draft 기능은 Composition 관계에만 자동 적용 — Association 자식은 Draft에 포함 안 됨
  • cascade delete는 Composition 전용 — Association에 적용하면 의도치 않은 데이터 삭제 위험
  • many 없이 Composition of OrderItem이면 단일 자식 — 실수 자주 발생

핵심 한 줄

Composition은 Order-Items처럼 함께 사는 관계, Association은 Order-Customer처럼 독립 참조.

더 파볼 주제

  • CAP Draft 활성화 + Composition 깊이 탐구
  • OData Deep Insert vs Individual POST 성능 비교