본문으로 건너뛰기

비즈니스 규칙 문서 작성 가이드

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 규칙들...)