본문으로 건너뛰기

합의(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
  • 불변식:
    • 활성화된 약관 버전은 타입별로 항상 유일해야 함
    • 약관 메타데이터 변경 이력은 변경 불가능해야 함
    • 사용자 약관 동의 기록은 불변(추가만 가능)
    • 활성화된 약관은 삭제 불가
    • 같은 언어에 대한 번역은 버전당 하나만 존재해야 함
  • 루트: UserConsent (Agreement의 CONSENT 타입)
  • 엔티티: ConsentItem (개별 동의 항목 상태 및 이력)
  • 값 객체: ConsentKey, ConsentStatus, ConsentPurpose, ConsentScope
  • 불변식:
    • 사용자는 정의된 ConsentKey에 대해서만 동의 상태를 가질 수 있음
    • 동의 상태 변경 시 이력이 기록되어야 함

ConsentDefinition 집계 (논리적 구분)

  • 루트: ConsentDefinition
  • 값 객체: ConsentKey, Description, Purpose, Scope, IsRequired
  • 불변식:
    • ConsentKey는 시스템 내에서 유일해야 함

핫스팟 및 해결책

약관 관련 핫스팟

  • 다국어 관리 복잡성: 약관 번역 관리를 위한 별도 워크플로우 구축
  • 동시성 문제: 약관 활성화 시 낙관적 락(Optimistic Locking) 적용

동의 관련 핫스팟

  • 동의 철회 시 데이터 처리: 철회 이벤트 발생 시 관련 시스템에 알림 전파
  • 동의 버전 관리: 동의 정의 변경 시 버전 관리 체계 적용

변경 이력

버전날짜작성자변경 내용
0.1.02025-05-08bok@weltcorp.com최초 작성 (약관 및 동의 이벤트 스토밍 통합)

통합 UI 관련 백엔드 명령

명령설명영향
GetAllActiveAgreements모든 활성 약관 및 동의 항목 조회약관 및 동의 항목 목록 반환
RecordAgreementBatch여러 약관 및 동의 상태 일괄 기록여러 약관/동의 레코드 생성 및 이벤트 발행