Site 도메인 이벤트 스토밍
본 문서는 Site 도메인 요구사항(requirements.md)을 기반으로 Event Storming 방식으로 분석한 결과입니다.
목적
Site 도메인은 의료기관(사이트)의 등록 요청을 관리하고, 승인된 사이트의 생명주기(생성, 수정, 삭제)를 관리하는 도메인입니다.
1. 도메인 이벤트
Site 도메인에서 발생하는 모든 도메인 이벤트를 정의합니다.
1.1 사이트 등록 요청 관련 이벤트
| Event | Description |
|---|---|
| SiteRegistrationRequested | 사이트 등록 요청이 생성되었다. |
| SiteRegistrationApproved | 사이트 등록 요청이 승인되었다. |
| SiteAdminAccountCreated | 사이트 관리자 계정이 생성되었다. |
1.2 사이트 관리 관련 이벤트
| Event | Description |
|---|---|
| SiteCreated | 사이트가 생성되었다. |
| SiteUpdated | 사이트 정보가 수정되었다. |
| SiteSoftDeleted | 사이트가 소프트 삭제되었다. (deletedAt 기록) |
| SiteHardDeleted | 사이트가 물리적으로 삭제되었다. |
2. 정책 (When → Then)
이벤트 발생 후 시스템이 수행해야 할 정책을 정의합니다.
2.1 사이트 등록 요청 정책
| When | Then | 설명 |
|---|---|---|
| SiteRegistrationRequested | SiteAdminAccountCreated 발생 | 등록 요청 시 관리자 계정 자동 생성 (medi.site-admin 그룹 할당) |
| SiteRegistrationApproved | SiteCreated 발생 | 승인된 등록 요청으로부터 실제 사이트 생성 |
| SiteRegistrationApproved (선택된 계정만) | SiteAdminAccountCreated 발생 | 승인 시 선택된 계정들에 대해 실제 계정 활성화 |
2.2 사이트 관리 정책
| When | Then | 설명 |
|---|---|---|
| SiteCreated | 등록 요청 ID 연결 (있는 경우) | 사이트 생성 시 등록 요청과의 관계 설정 |
| SiteSoftDeleted | deletedAt 타임스탬프 기록 | 소프트 삭제 시 삭제 시간 자동 기록 |
3. 액터와 명령
각 액터가 수행할 수 있는 명령과 결과 이벤트를 정의합니다.
3.1 사이트 등록 요청 관리 명령
| Command | Actor | Event |
|---|---|---|
| RequestSiteRegistration | User | SiteRegistrationRequested |
| ApproveSiteRegistration | PlatformAdmin | SiteRegistrationApproved |
3.2 사이트 관리 명령
| Command | Actor | Event |
|---|---|---|
| CreateSite | PlatformAdmin | SiteCreated |
| UpdateSite | PlatformAdmin | SiteUpdated |
| SoftDeleteSite | PlatformAdmin | SiteSoftDeleted |
| HardDeleteSite | PlatformAdmin | SiteHardDeleted |
4. Aggregate 매핑
각 명령과 이벤트가 어느 Aggregate에서 처리되는지 정의합니다.
4.1 SiteRegistration Aggregate
트랜잭션 경계: 사이트 등록 요청의 생명주기(요청 생성부터 승인까지)를 원자적으로 관리
담당 Command:
- RequestSiteRegistration
- ApproveSiteRegistration
발행 Event:
- SiteRegistrationRequested
- SiteRegistrationApproved
- SiteAdminAccountCreated
적용된 정책:
- SiteRegistrationRequested → SiteAdminAccountCreated
- SiteRegistrationApproved → SiteCreated
- SiteRegistrationApproved (선택된 계정만) → SiteAdminAccountCreated
비즈니스 규칙:
- 관리자 계정 이메일은 중복될 수 없음
- 관리자 계정은 medi.site-admin 그룹에 자동 할당됨
- 승인 시 선택된 계정만 활성화됨
- 승인자의 계정 ID가 자동으로 기록됨
4.2 Site Aggregate
트랜잭션 경계: 사이트 정보의 생명주기(생성, 수정, 삭제)를 원자적으로 관리
담당 Command:
- CreateSite
- UpdateSite
- SoftDeleteSite
- HardDeleteSite
발행 Event:
- SiteCreated
- SiteUpdated
- SiteSoftDeleted
- SiteHardDeleted
적용된 정책:
- SiteCreated → 등록 요청 ID 연결 (선택적)
- SiteSoftDeleted → deletedAt 타임스탬프 기록
비즈니스 규칙:
- 사이트명(name)은 필수 항목
- 사이트 코드(code), 설명(description)은 선택 항목
- 임상연구 여부(clinicalResearch), CRM 관리 여부(managedByCrm) 설정 가능
- 매칭 키워드(matchingKeywords) 배열 관리 가능
- 소프트 삭제 시 deletedAt 필드만 설정됨
- 하드 삭제 시 데이터베이스에서 물리적으로 제거됨
5. 타임라인 / 프로세스 흐름
사이트 등록 및 관리의 주요 워크플로우를 시각화합니다.
변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.58.0 | 2025-12-16 | dalia@weltcorp.com | 최초 작성 |