본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 26. 20:37

Back to Code | Ep 05: 컨텍스트의 복수 — DDD와 Bounded Contexts

요약

AI가 생성한 단일 엔티티가 도메인 간의 맥락을 혼동하여 발생한 '갓 오브젝트(God Object)' 문제를 DDD의 경계 컨텍스트(Bounded Contexts) 개념으로 해결하는 과정을 다룹니다. 동일한 용어라도 도메인에 따라 의미가 다름을 인지하고 설계해야 함을 강조합니다.

핵심 포인트

  • AI는 단어의 맥락을 구분하지 못해 갓 오브젝트를 생성할 위험이 있음
  • 도메인 주도 설계(DDD)를 통해 경계 컨텍스트를 분리해야 함
  • 보편적 언어(Ubiquitous Language)는 사회 기술적 설계의 핵심임
  • 컨텍스트별로 독립적인 엔티티를 설계하여 결합도를 낮춰야 함

인공지능 (AI)이 만들어낸 환상에서 깨어나 실제 엔지니어링으로 돌아가는 기업, LogiFlow의 15주간의 기술적 전투.

이야기 (The Story)

"Return"이라는 단어 하나 때문에 시스템이 충돌했습니다.

고객 반품 (Customer Return)과 트럭 창고 반품 (Truck Depot Return)이 뒤섞여 버린 것입니다. AI는 이 둘을 위해 단 하나의 ReturnEntity 클래스를 생성했습니다. 그렇게 '갓 오브젝트 (God Object)'가 탄생했습니다.

시작은 단순한 버그 보고였습니다. 창고 관리자가 트럭 화물 화면에서 고객 환불 금액이 나타나는 것을 발견했습니다. 개발자가 문제를 추적해 보니, 청구 (billing), 물류 (logistics), 창고 (warehouse) 컨텍스트를 동시에 서비스하는 단 하나의 클래스인 Return이 원인이었습니다. 한 팀이 필드를 추가할 때마다 다른 팀의 기능이 망가졌습니다.

기술적 부검: 갓 오브젝트 (The God Object)

// 모든 컨텍스트를 혼란스럽게 만드는 AI의 갓 오브젝트 (God Object)
class Return {
  id: string;
...

모든 선택적 필드 (optional field)는 거짓말이었습니다. 모든 ?는 시스템이 대답할 수 없는 질문이었습니다: "나는 지금 어떤 컨텍스트에 있는가?"

청구 (billing) 팀이 환불 금액을 계산해야 할 때, 그들의 세계에서는 아무런 의미가 없는 truckId, warehouseId, hazmatFlag 같은 필드들을 지나쳐야 했습니다. 물류 (logistics) 팀이 화물 반품 경로를 재설정해야 할 때는 refundAmountcustomerId에 걸려 넘어졌습니다.

"AI는 단어 하나를 보고 하나의 클래스를 만듭니다. 하지만 현실 세계에서 하나의 단어는 서로 다른 공간에서 서로 다른 의미를 가집니다. 회계에서의 'Return'은 돈입니다. 창고에서의 'Return'은 무게와 위험물 준수 사항입니다."

인간의 해결책: 경계 컨텍스트 (Bounded Contexts)

// 컨텍스트 1: 청구 (Billing)
class CustomerRefund {
  customerId: string;
...

두 개의 클래스. 선택적 필드 제로. 각 클래스는 자신만의 도메인 언어로 말합니다. 각 클래스는 독립적으로 테스트, 배포 및 이해가 가능합니다.

보편적 언어 (Ubiquitous Language): 동일한 단어가 서로 다른 도메인에서 서로 다른 의미를 갖습니다. AI는 이러한 철학적 경계를 그릴 수 없습니다.

이것이 중요한 이유

도메인 주도 설계 (Domain-Driven Design, DDD)는 학술적인 연습이 아닙니다. 이는 조직의 성장에 따라 확장 가능한 시스템을 만드느냐, 아니면 모든 기능 요청을 고고학적 탐사로 만드느냐의 차이입니다.

Defne가 화이트보드에 컨텍스트 경계 (Context Boundaries)를 그렸을 때, 팀원들에게 무언가 깨달음이 찾아왔습니다. 그것은 단순히 코드에 관한 문제가 아니라 커뮤니케이션에 관한 문제였습니다. 결제 (Billing) 팀과 물류 (Logistics) 팀은 몇 달 동안 서로 엇갈린 대화를 해왔으며, 갓 오브젝트 (God Object)는 그러한 의사소통 오류가 기술적으로 나타난 결과물이었습니다.

에피소드 5의 교훈

1. 경계 컨텍스트 (Bounded Contexts): 엔티티 (Entity)는 모든 컨텍스트에서 동일하지 않습니다. "반품 (Return)"은 결제 (Billing)에서는 돈이지만, 물류 (Logistics)에서는 무게입니다.

2. 보편적 언어 (Ubiquitous Language): 도메인 전문가와 공유된 언어를 만드는 것은 AI가 결코 수행할 수 없는 사회 기술적 (Socio-technical) 기술입니다.

3. 엔티티 (Entities) vs 가치 객체 (Value Objects): AI는 엔티티 (정체성에 의해 정의됨)와 가치 객체 (값에 의해 정의됨) 사이의 미묘한 철학적 차이를 정확하게 설정할 수 없습니다.

이것은 "Back to Code" 시리즈의 에피소드 5입니다. 다음 편: 에피소드 6 — 상태 지옥 (State Hell)과 멱등성 (Idempotency).

시리즈: back.to.code · 2026

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
1

댓글

0