비즈니스 규칙 문서 작성 가이드
Template
문서 구조
Context 기준 대분류 → Aggregate 기준 소분류 → 서술형 규칙 나열
## 1. [Context명]
## 1.1 [Aggregate명]
- 규칙 1
- 규칙 2
## 1.2 [Aggregate명]
- 규칙 1
- 규칙 2
비즈니스 규칙 유형
비즈니스 규칙은 다음 6가지 유형을 포함할 수 있습니다:
1. 불변식 (Invariants)
- 항상 참이어야 하는 조건
- Aggregate 내에서 절대 위반되면 안 되는 규칙
- 예: "재고는 음수가 될 수 없다"
- 예: "콜은 역순으로만 삭제 가능하다"
2. 유효성 규칙 (Validation Rules)
- 입력/상태 검증
- Command 실행 전 체크
- 예: "메모 내용은 필수이며 최대 500자"
- 예: "이메일 형식이 올바른지 검증"
3. 상태 전이 규칙 (State Transition Rules)
- 허용되는 상태 변화
- A 상태에서 B 상태로 전환 가능 여부
- 예: "완료된 콜은 취소할 수 없다"
- 예: "Draft → Active → Completed 순서로만 가능"
4. 권한 규칙 (Authorization Rules)
- 누가 무엇을 할 수 있는지
- 액세스 제어
- 예: "운영자만 콜을 완료 처리할 수 있다"
- 예: "본인이 작성한 메모만 수정 가능"
5. 계산/파생 규칙 (Derivation Rules)
- 값을 계산하거나 도출하는 규칙
- 예: "콜 배너 표시 = 활성 미처리 콜 존재"
- 예: "총 금액 = 단가 × 수량"
6. 제약 사항 (Constraints)
- 시스템/도메인 제약 조건
- 예: "소프트 삭제만 허용"
- 예: "데이터는 최대 3년 보관"
작성 원칙
명확하고 간결하게:
- 한 줄로 명확하게 표현
- 애매한 표현 지양 ("가능하면", "대체로" 등)
좋은 예:
- ✅ "완료된 콜은 취소할 수 없다"
- ✅ "메모 내용은 필수이며 최대 500자까지 입력 가능하다"
- ✅ "운영자만 콜을 완료 처리할 수 있다"
나쁜 예:
- ❌ "콜 처리에 주의가 필요하다" (너무 모호)
- ❌ "대부분의 경우 취소할 수 없다" (애매한 조건)
- ❌ "적절한 권한이 있어야 한다" (구체성 부족)
Aggregate별 작성 팁
관련 규칙 그룹화:
- 같은 Aggregate의 규칙을 한곳에 모음
- 생명주기 순서대로 작성 (생성 → 수정 → 삭제)
예시:
## 1.1 AppUserOutboundCallPlan
- 콜 생성 시 대상 회원이 활성 상태여야 한다 (유효성)
- 활성 상태의 콜만 완료 처리할 수 있다 (상태 전이)
- 완료된 콜은 취소할 수 없다 (불변식)
- 운영자만 콜을 완료 처리할 수 있다 (권한)
- 콜은 역순으로만 삭제 가능하다 (불변식)
- 콜 삭제는 소프트 삭제만 허용한다 (제약사항)
불필요한 반복 제거:
- 비슷한 규칙은 통합
- 예: "메모는 100자", "제목은 50자" → "메모는 100자, 제목은 50자까지 입력 가능"
Context vs Aggregate 선택
Context 수준 규칙:
- 여러 Aggregate에 걸친 규칙
- Context 전체에 적용되는 공통 규칙
- 예: "Support Context의 모든 데이터는 암호화하여 저장한다"
Aggregate 수준 규칙 (일반적):
- 대부분의 비즈니스 규칙
- 특정 Aggregate의 동작 제약
- 예: "CallPlan의 메모는 역순 삭제만 가능"
작성 위치 결정:
## 1. Support Context
<!-- Context 전체 규칙 (있다면) -->
- Support Context의 모든 데이터는 최대 3년 보관
## 1.1 AppUserOutboundCallPlan
- (Aggregate 규칙들...)
## 1.2 CallMemo
- (Aggregate 규칙들...)