go mod tidygo run cmd/main.gogo run examples/usage_example.goPOST /api/orders- 주문 생성POST /api/orders/:id/items- 주문 아이템 추가DELETE /api/orders/:id/items/:productId- 주문 아이템 제거POST /api/orders/:id/cancel- 주문 취소POST /api/orders/:id/ship- 주문 배송POST /api/orders/:id/deliver- 주문 배송 완료
GET /api/orders/:id- 주문 조회GET /api/customers/:id/orders- 고객별 주문 조회GET /api/orders- 주문 목록 조회
- 모든 상태 변경을 이벤트로 저장
- 이벤트 히스토리를 통한 상태 복원
- 완전한 감사 추적 가능
- 명령과 쿼리의 분리
- 독립적인 읽기/쓰기 모델
- 성능 최적화 가능
- 애그리게이트 패턴
- 값 객체 활용
- 도메인 이벤트 사용
// 주문 생성
money, _ := valueobjects.NewMoney(25000, "KRW")
item, _ := valueobjects.NewOrderItem("prod-001", "노트북", 1, money)
items := []*valueobjects.OrderItem{item}
cmd := commands.NewCreateOrderCommand("customer-001", items, "서울시 강남구")
orderID, _ := commandHandlers.HandleCreateOrder(cmd)
// 주문 조회
query := queries.NewGetOrderByIDQuery(orderID)
order, _ := queryHandlers.HandleGetOrderByID(query)- 확장 가능한 아키텍처: 마이크로서비스로 쉽게 분리 가능
- 이벤트 기반: 비동기 처리 및 이벤트 기반 통합
- 타입 안전성: Go의 강력한 타입 시스템 활용
- 테스트 용이성: 의존성 주입과 인터페이스 활용
- 실무 적용: 실제 프로덕션 환경에서 사용 가능한 구조
go test ./...- 데이터베이스 연동: PostgreSQL, MongoDB 등
- 메시지 큐 연동: RabbitMQ, Apache Kafka 등
- 캐싱: Redis, Memcached 등
- 모니터링: Prometheus, Grafana 등
- API 문서: Swagger/OpenAPI 등