합의(Agreements) 도메인 이벤트 스토밍
본 문서는 합의(Agreements) 도메인의 이벤트 스토밍 워크샵 결과를 정리한 것입니다. 약관(Term)과 동의(Consent) 관련 도메인 이벤트, 명령, 액터, 정책 등을 포함합니다. 사용자의 약관 동의 및 다양한 데이터 처리 동의 상태를 통합적으로 관리하는 데 중점을 둡니다.
바운디드 컨텍스트 참조
- Agreements 도메인은 사용자의 약관 동의 상태와 데이터 처리 동의 항목 정보를 관리하며, 이 정보는 Auth 도메인에서 토큰 발급 및 권한 검증에 활용됩니다.
- Auth 도메인은 회원가입 등 특정 시점에 Agreements 도메인의 약관 및 동의 항목을 사용자에게 제시하고, 그 결과를 Agreements 도메인에 기록하도록 요청할 수 있습니다.
- 약관 콘텐츠 관리(생성, 수정, 활성화 등)와 동의 항목 정의 관리는 이 도메인의 핵심 책임입니다.
도메인 이벤트
약관(Term) 관련 백엔드 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| TermsCreated | 신규 약관이 생성되었음 | CreateTerms |
| TermsUpdated | 약관이 업데이트되었음 | UpdateTerms |
| TermsActivated | 약관이 활성화되었음 | ActivateTerms |
| TermsDeactivated | 약관이 비활성화되었음 | DeactivateTerms |
| TermsExpired | 약관이 만료되었음 | 시간 만료 또는 ExpireTerms |
| TermsTranslationAdded | 약관 번역이 추가되었음 | AddTermsTranslation |
| UserTermsAgreementRecorded | 사용자의 약관 동의가 기록되었음 | RecordUserTermsAgreement |
동의(Consent) 관련 백엔드 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| ConsentDefinitionCreated | 새로운 동의 항목 정의가 생성되었음 | DefineConsent |
| ConsentDefinitionUpdated | 동의 항목 정의가 업데이트되었음 | UpdateConsentDefinition |
| UserConsentRecorded | 사용자의 특정 동의 항목에 대한 상태가 최초 기록되었음 | RecordUserConsent |
| UserConsentUpdated | 사용자의 특정 동의 항목에 대한 상태가 변경되었음 (동의 또는 철회) | UpdateUserConsent |
| AgreementValidationRequested | 특정 작업에 대한 사용자 합의 상태 검증이 요청되었음 | (외부 도메인, 예: Auth) |
| AgreementValidated | 사용자 합의 상태 검증 결과가 반환되었음 | ValidateAgreement |
약관(Term) 관련 프론트엔드 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| TermsDisplayed | 약관 내용이 사용자에게 표시됨 | 약관 조회 요청 |
| TermsConsentRequested | 약관 동의가 사용자에게 요청됨 | 필수/선택 약관 제시 |
| TermsHistoryDisplayed | 약관 이력(버전/변경)이 표시됨 | 약관 이력 조회 요청 |
| TermsAgreementSubmitted | 사용자가 특정 약관 버전에 대한 동의 의사를 제출함 | 약관 동의 액션 |
| TermsUpdatedNotificationDisplayed | 약관 업데이트 알림이 표시됨 | 백엔드 약관 변경 이벤트 수신 |
| LanguageVersionSelected | 사용자가 특정 언어 버전의 약관 조회를 선택함 | 언어 선택 UI |
동의(Consent) 관련 프론트엔드 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| ConsentOptionsDisplayed | 사용자에게 동의/철회 가능한 항목 목록이 표시됨 | 동의 설정 화면 진입 |
| ConsentStatusSubmitted | 사용자가 변경된 동의 상태를 제출함 | 동의/철회 액션 |
| ConsentHistoryDisplayed | 사용자의 동의 변경 이력이 표시됨 | 동의 이력 조회 요청 |
통합 UI 관련 프론트엔드 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| IntegratedAgreementsDisplayed | 약관 및 동의 항목이 통합 화면에 표시됨 | 회원가입 또는 약관 변경 시 |
| AllAgreementsAccepted | 사용자가 모든 필수 항목에 동의함 | 통합 화면에서 일괄 동의 |
| AgreementBatchSubmitted | 여러 약관 및 동의 상태가 일괄 제출됨 | 통합 화면에서 확인 버튼 |
정책(Policies)
- 활성 버전 유일성 강제: 약관 종류별로 한 시점에 하나의 버전만 활성화 가능
- 약관 만료 자동 처리: 유효 기간이 지나면 자동으로 만료 처리
- 동의 데이터 보존: 사용자의 약관 동의 및 동의 항목 이력은 법적 요구사항에 따라 보존
- 필수 동의 강제: 필수로 지정된 약관 및 동의 항목에 대한 동의 없이는 서비스 이용 제한
- 주요 변경 시 재동의: 약관 및 동의 항목의 주요 변경(major 버전) 시 사용자 재동의 필요
명령(Commands)
약관(Term) 관련 백엔드 명령
| 명령 | 설명 | 영향 |
|---|
| CreateTerms | 약관 생성 | TermsCreated 이벤트 발생 |
| UpdateTerms | 약관 업데이트 | TermsUpdated 이벤트 발생 |
| ActivateTerms | 약관 활성화 | TermsActivated 이벤트 발생 |
| DeactivateTerms | 약관 비활성화 | TermsDeactivated 이벤트 발생 |
| ExpireTerms | 약관 만료 처리 | TermsExpired 이벤트 발생 |
| AddTermsTranslation | 약관 번역 추가 | TermsTranslationAdded 이벤트 발생 |
| RecordUserTermsAgreement | 사용자 약관 동의 기록 | UserTermsAgreementRecorded 이벤트 발생 |
| GetUserTermsAgreements | 특정 사용자의 약관 동의 이력 조회 | 사용자의 약관 동의 이력 제공 |
| GetTermsVersionHistory | 특정 약관의 버전 변경 이력 조회 | 약관의 변경 이력 제공 |
| GetActiveTerms | 활성화된 약관 목록 조회 | 현재 활성 상태인 약관 목록 제공 |
| GetTermsVersion | 특정 약관 버전 조회 | 특정 버전의 약관 상세 정보 제공 |
동의(Consent) 관련 백엔드 명령
| 명령 | 설명 | 영향 |
|---|
| DefineConsent | 새로운 동의 항목 정의 (목적, 범위 등) | ConsentDefinitionCreated 이벤트 발생 |
| UpdateConsentDefinition | 기존 동의 항목 정의 수정 | ConsentDefinitionUpdated 이벤트 발생 |
| RecordUserConsent | 사용자의 동의 상태 기록 (최초) | UserConsentRecorded 이벤트 발생 |
| UpdateUserConsent | 사용자의 동의 상태 업데이트 (동의/철회) | UserConsentUpdated 이벤트 발생 |
| GetConsentDefinitions | 현재 정의된 동의 항목 목록 조회 | 동의 항목 목록 반환 |
| GetUserConsents | 특정 사용자의 동의 상태 목록 조회 | 사용자 동의 상태 목록 반환 |
| ValidateAgreement | 특정 작업에 필요한 합의 상태 검증 | AgreementValidated 이벤트 발생 |
약관(Term) 관련 프론트엔드 명령
| 명령 | 설명 | 영향 |
|---|
| DisplayTerms | 약관 표시 요청 | 약관 내용 UI 렌더링 |
| RequestTermsConsent | 약관 동의 요청 표시 | 약관 동의 UI 표시 |
| DisplayTermsHistory | 약관 이력 표시 요청 | 약관 이력 UI 렌더링 |
| SubmitTermsAgreement | 약관 동의 제출 | RecordUserTermsAgreement 명령 트리거 |
| DisplayTermsUpdateNotification | 약관 업데이트 알림 표시 | 알림 UI 표시 |
| SelectLanguageVersion | 약관 언어 버전 선택 | 해당 언어 약관 조회 명령 트리거 |
동의(Consent) 관련 프론트엔드 명령
| 명령 | 설명 | 영향 |
|---|
| DisplayConsentOptions | 동의 설정 화면 표시 요청 | 동의 항목 UI 렌더링 |
| SubmitConsentStatus | 변경된 동의 상태 제출 | UpdateUserConsent 명령 트리거 |
| DisplayConsentHistory | 동의 이력 표시 요청 | 동의 이력 UI 렌더링 |
통합 UI 관련 프론트엔드 명령
| 명령 | 설명 | 영향 |
|---|
| DisplayIntegratedAgreements | 약관 및 동의 항목 통합 화면 표시 | IntegratedAgreementsDisplayed 이벤트 발생 |
| AcceptAllAgreements | 모든 약관 및 동의 항목 일괄 동의 | AllAgreementsAccepted 이벤트 발생 |
| SubmitAgreementBatch | 여러 약관 및 동의 상태 일괄 제출 | AgreementBatchSubmitted 이벤트 발생 및 백엔드 API 호출 |
액터(Actors)
- 시스템 관리자 (약관 및 동의 항목 정의 관리)
- IAM 관리자 (약관 및 동의 항목 관리)
- 일반 사용자 (자신의 약관 동의 및 동의 상태 관리)
- 외부 시스템 (Auth 등, 합의 상태 검증 요청)
집계(Aggregates)
Agreement 집계 (통합 저장소)
- 루트: Agreement
- 형태: 약관(Term)과 동의(Consent)를 단일 엔티티로 통합
- 타입: type 필드(TERMS, CONSENT)로 구분
- 엔티티: AgreementVersion, AgreementTranslation, UserAgreementStatus
- 값 객체: AgreementStatus, AgreementType
- 불변식:
- 약관과 동의는 공통 ID 체계와 테이블 구조를 공유함
- 타입별 특수 속성은 확장 필드로 관리
- 모든 레코드는 타입별 조회 최적화를 위한 인덱스 포함
Terms 집계 (논리적 구분)
- 루트: Terms (Agreement의 TERMS 타입)
- 엔티티: TermsVersion, TermsTranslation, UserAgreement
- 값 객체: TermsStatus, TermsType
- 불변식:
- 활성화된 약관 버전은 타입별로 항상 유일해야 함
- 약관 메타데이터 변경 이력은 변경 불가능해야 함
- 사용자 약관 동의 기록은 불변(추가만 가능)
- 활성화된 약관은 삭제 불가
- 같은 언어에 대한 번역은 버전당 하나만 존재해야 함
Consent 집계 (논리적 구분)
- 루트: UserConsent (Agreement의 CONSENT 타입)
- 엔티티: ConsentItem (개별 동의 항목 상태 및 이력)
- 값 객체: ConsentKey, ConsentStatus, ConsentPurpose, ConsentScope
- 불변식:
- 사용자는 정의된 ConsentKey에 대해서만 동의 상태를 가질 수 있음
- 동의 상태 변경 시 이력이 기록되어야 함
ConsentDefinition 집계 (논리적 구분)
- 루트: ConsentDefinition
- 값 객체: ConsentKey, Description, Purpose, Scope, IsRequired
- 불변식:
- ConsentKey는 시스템 내에서 유일해야 함
핫스팟 및 해결책
약관 관련 핫스팟
- 다국어 관리 복잡성: 약관 번역 관리를 위한 별도 워크플로우 구축
- 동시성 문제: 약관 활성화 시 낙관적 락(Optimistic Locking) 적용
동의 관련 핫스팟
- 동의 철회 시 데이터 처리: 철회 이벤트 발생 시 관련 시스템에 알림 전파
- 동의 버전 관리: 동의 정의 변경 시 버전 관리 체계 적용
변경 이력
통합 UI 관련 백엔드 명령
| 명령 | 설명 | 영향 |
|---|
| GetAllActiveAgreements | 모든 활성 약관 및 동의 항목 조회 | 약관 및 동의 항목 목록 반환 |
| RecordAgreementBatch | 여러 약관 및 동의 상태 일괄 기록 | 여러 약관/동의 레코드 생성 및 이벤트 발행 |