비즈니스 요구사항
고객, 파트너, 공급업체 등 다양한 연락처를 체계적으로 관리해야 합니다. 각 연락처에는 정확한 개인 정보와 최소 하나 이상의 유효한 연락 수단이 필요합니다. 연락처는 생성, 수정, 삭제의 수명 주기를 가지며, 이메일 고유성이 보장되어야 합니다. 개요의 Naive 코드가 허용하는 문제를 해결하려면, 먼저 비즈니스 규칙을 명확히 정의해야 합니다.
도메인 용어
섹션 제목: “도메인 용어”| 한글 | 영문 | 정의 |
|---|---|---|
| 연락처 | Contact | 관리 대상 연락 정보 단위 |
| 개인 이름 | PersonalName | 이름(필수), 성(필수), 중간 이니셜(선택)로 구성 |
| 이메일 주소 | EmailAddress | 표준 이메일 형식의 주소 |
| 우편 주소 | PostalAddress | 거리 주소, 도시, 주 코드(2자리 대문자), 우편번호(5자리 숫자)로 구성 |
| 연락 수단 | ContactInfo | 이메일만, 우편 주소만, 또는 둘 다의 조합 |
| 이메일 인증 | EmailVerification | 이메일의 미인증/인증 상태와 인증 시점 |
| 메모 | ContactNote | 연락처에 대한 자유 형식 텍스트 (500자 이하) |
비즈니스 규칙
섹션 제목: “비즈니스 규칙”1. 데이터 유효성
섹션 제목: “1. 데이터 유효성”- 이름과 성은 50자 이하여야 한다
- 이메일은 표준 이메일 형식이어야 한다
- 주 코드는 2자리 대문자 알파벳이어야 한다
- 우편번호는 5자리 숫자여야 한다
- 메모 내용은 500자 이하여야 한다
2. 연락 수단
섹션 제목: “2. 연락 수단”- 연락처는 최소 하나의 연락 수단을 가져야 한다
- 가능한 조합: 이메일만, 우편 주소만, 이메일과 우편 주소 모두
- 연락 수단이 없는 연락처는 존재할 수 없다
3. 이메일 인증
섹션 제목: “3. 이메일 인증”- 새로 등록된 이메일은 미인증 상태다
- 미인증 이메일은 인증할 수 있으며, 인증 시점이 기록된다
- 인증은 단방향이다 — 인증된 이메일을 미인증으로 되돌릴 수 없다
- 이미 인증된 이메일을 다시 인증할 수 없다
4. 연락처 수명 관리
섹션 제목: “4. 연락처 수명 관리”- 연락처의 이름을 변경할 수 있다
- 연락처를 논리 삭제할 수 있으며, 삭제자와 삭제 시점이 기록된다
- 삭제된 연락처를 복원할 수 있다
- 삭제된 연락처에는 이름 변경, 이메일 인증, 메모 추가/제거가 불가하다
- 삭제와 복원은 멱등하다 — 이미 삭제된 연락처를 다시 삭제해도 부작용이 없다
5. 메모 관리
섹션 제목: “5. 메모 관리”- 연락처에 메모를 추가할 수 있다
- 연락처에서 메모를 제거할 수 있다
- 메모 내용은 500자 이하여야 한다
- 삭제된 연락처에는 메모를 추가하거나 제거할 수 없다
- 존재하지 않는 메모를 제거해도 부작용이 없다 (멱등)
6. 이메일 고유성
섹션 제목: “6. 이메일 고유성”- 동일한 이메일을 가진 연락처가 두 개 이상 존재할 수 없다
- 연락처 업데이트 시 이메일 고유성 검사에서 자기 자신은 제외한다
시나리오
섹션 제목: “시나리오”정상 시나리오
섹션 제목: “정상 시나리오”- 이메일만 등록 후 인증 — 이름, 성, 이메일을 입력하여 연락처를 생성한다. 이메일은 미인증 상태로 시작한다. 이후 인증을 수행하면 인증 시점이 기록된다.
- 우편 주소만 등록 — 이름, 성, 주소, 도시, 주 코드, 우편번호를 입력하여 연락처를 생성한다.
- 이메일과 우편 주소 모두 등록 — 이름, 성, 이메일, 주소, 도시, 주 코드, 우편번호를 입력하여 연락처를 생성한다.
- 이름 변경 — 생성된 연락처의 이름을 변경한다. 변경 시점이 기록된다.
- 메모 추가/제거 — 연락처에 메모를 추가하고, 이후 해당 메모를 제거한다.
- 논리 삭제 후 복원 — 연락처를 삭제한다. 삭제자와 시점이 기록된다. 이후 복원하면 삭제 정보가 초기화된다.
거부 시나리오
섹션 제목: “거부 시나리오”- 연락 수단 없이 등록 — 이름과 성만 입력하고 이메일도 우편 주소도 없으면 등록이 거부된다.
- 인증된 이메일 재인증 — 이미 인증된 이메일에 대해 다시 인증을 시도하면 거부된다.
- 삭제된 연락처 수정 — 삭제된 연락처에 이름 변경, 이메일 인증, 메모 추가를 시도하면 거부된다.
- 중복 이메일 등록 — 이미 다른 연락처가 사용 중인 이메일로 새 연락처를 생성하면 거부된다.
존재해서는 안 되는 상태
섹션 제목: “존재해서는 안 되는 상태”- 이메일이 없는데 인증된 상태
- 연락 수단이 하나도 없는 연락처
- 인증된 이메일이 다시 미인증으로 돌아간 상태
- 삭제된 연락처에서 행위가 수행된 상태
- 동일한 이메일을 가진 두 개 이상의 연락처
다음 단계에서는 이 규칙들을 불변식(invariant)으로 분류하고, 각 유형에 맞는 타입 전략을 도출합니다.