피드로 돌아가기
Stop letting your database dictate your TypeScript domain logic
Dev.toDev.to
Backend

비즈니스 로직 수정 없이 CRUD에서 Event Sourcing으로 전환하는 설계 전략

Stop letting your database dictate your TypeScript domain logic

DOGGA Nidhal2026년 4월 2일11advanced

Context

TypeScript 환경의 DDD 구현 시 Event Sourcing의 과도한 운영 비용 발생. NestJS CQRS 등 OOP 프레임워크의 복잡한 보일러플레이트와 상태 변경 추적의 어려움 존재. 데이터베이스 설계가 도메인 로직을 결정짓는 의존성 문제 심화.

Technical Solution

  • Decider 패턴을 도입하여 Aggregate를 상태 변경 메서드가 없는 순수 함수 집합으로 정의
  • Command, Event, State를 TypeScript 타입으로 엄격히 규정하여 도메인 계약의 명확성 확보
  • 비즈니스 로직을 '상태 + 명령 -> 이벤트'를 반환하는 순수 함수로 분리하여 외부 의존성 제거
  • 도메인 로직과 영속성 계층을 완전히 분리하여 런타임 설정만으로 저장소 전략 변경 가능 구조 설계
  • Drizzle ORM 어댑터를 통해 SQL 기반의 표준 CRUD 방식과 Event Store 기반의 이벤트 소싱 방식을 선택적으로 적용
  • Mock 없이 테스트 가능한 Given-When-Then 구조의 테스트 환경 구축

Key Takeaway

도메인 로직을 순수 함수로 추상화하면 영속성 모델의 변경이 아키텍처의 결정이 아닌 단순한 설정의 문제로 전환됨.


초기 단계에서는 CRUD로 빠르게 개발하고, 감사 로그나 상태 추적이 필요한 시점에 도메인 로직 수정 없이 Event Sourcing으로 전환하는 전략 채택

원문 읽기