본문으로 건너뛰기

User 바운디드 컨텍스트

1. 컨텍스트 정의

User 도메인은 사용자의 핵심 정보(프로필, 상태, 유형, 계정 타입)를 관리하고, 다른 도메인과의 사용자 관련 상호작용의 중심점 역할을 하는 바운디드 컨텍스트입니다. 게스트 온보딩부터 Step-up 인증을 통한 정규 사용자 승격, 게스트 만료 관리까지를 조율합니다.

1.1 주요 책임

  • 사용자 계정 정보 관리 (생성, 조회, 수정)
  • 사용자 프로필 관리 (이름, 언어, 타임존 등)
  • 사용자 계정 상태 관리 (ACTIVE, INACTIVE, LOCKED, PENDING, SUSPENDED, BANNED)
  • 사용자 계정 유형 관리 (USER) 및 계정 타입(AccountType) 전환 관리 (GUEST → REGISTERED)
  • 사용자 상태 변경 이력 관리
  • 서비스 이용 기간 상태 관리 (활성, 중단, 만료) 및 관련 계산 (만료일, 남은 기간)
  • 개인정보 보호 및 규정 준수 지원 (GDPR 등 데이터 접근/삭제 요청 처리)
  • 사용자 데이터 삭제 및 익명화 프로세스 관리 (도메인 간 조율)
  • 데이터 삭제/익명화 상태 추적 및 이력 관리
  • 게스트 계정 승격/만료 이력 관리 (GuestAccountLifecycle)
  • 다른 도메인(IAM, Sleep 등)과의 사용자 정보 연동

1.2 도메인 용어

  • User: 시스템 사용자 계정 엔티티
  • UserProfile: 사용자 프로필 정보 (언어, 타임존 등)
  • UserStatus: 사용자 계정 상태 (ACTIVE, INACTIVE 등)
  • UserType: 사용자 계정 유형 (USER)
  • AccountType: 계정 타입 (GUEST, REGISTERED)
  • UserStatusHistory: 사용자 상태 변경 이력
  • UserId: 사용자 고유 식별자 (UUID)
  • Email: 사용자 이메일 주소 (Auth 도메인 관리, User는 참조)
  • UserName: 사용자 이름
  • LanguagePreference: 선호 언어 코드 ('ko', 'en' 등)
  • Timezone: IANA 타임존 식별자 ('Asia/Seoul' 등)
  • GroupMembershipRef: 사용자가 속한 그룹 ID 참조 (IAM 도메인 연관)
  • PlanAssignmentRef: 사용자에게 할당된 플랜 ID 참조 (IAM 도메인 연관)
  • UserCycleLinkRef: 사용자 주기에 대한 참조 (Sleep 도메인 연관)
  • ServiceUsagePeriod: 사용자 서비스 이용 기간 관련 정보 집합 (시작일, 만료일, 중단/재개 이력 등)
  • GuestExpiresAt: 게스트 계정 만료 예정 시각(TimeMachine 예약)
  • UpgradedAt: Step-up 인증 완료 시각
  • GuestAccountLifecycle: 게스트 계정 온보딩/승격/만료/정리 이벤트 이력
  • isSuspended: 서비스 이용 기간 중단 여부 플래그
  • suspendedAt: 마지막 중단 시작 시각
  • resumedAt: 마지막 재개 시각
  • totalSuspendedDuration: 총 중단 기간 (계산된 값)
  • expiresAt: (계산된) 서비스 만료일
  • remainingServiceDays: (계산된) 남은 서비스 이용 일수
  • UserDeletionProcess: 사용자 데이터 삭제 프로세스 엔티티
  • DomainDeletionStatus: 도메인별 데이터 삭제 상태 엔티티
  • AnonymizationRecord: 익명화 처리 기록 엔티티
  • DeletionType: 삭제 유형 (SOFT_DELETE, ANONYMIZE, HARD_DELETE)
  • DeletionStatus: 삭제 상태 (PENDING, IN_PROGRESS, COMPLETED, FAILED, PARTIALLY_COMPLETED)
  • anonymizationId: 익명화 프로세스 식별자
  • isAnonymized: 사용자 익명화 처리 여부 플래그
  • anonymizedAt: 익명화 처리 시점
  • dataRetentionEndDate: GDPR 데이터 보존 종료일

2. 하위 컨텍스트

2.1 계정 관리 컨텍스트 (Account Management Context)

사용자 계정의 생성, 기본 정보 관리, 상태 관리, 서비스 이용 기간 관리를 담당합니다.

책임

  • 일반 사용자 계정 생성 (USER 타입) 및 게스트 계정 타입 관리
  • 사용자 기본 정보 조회 및 수정 (ID, 이메일 참조, 이름 등)
  • 사용자 계정 상태 관리 (ACTIVE, INACTIVE, PENDING 등) 및 상태 변경 이력 기록
  • 게스트 계정 타입(AccountType) 전환 및 만료 처리 관리
  • 사용자 서비스 이용 기간 관리 (중단, 재개, 만료일 계산, 남은 기간 계산)
  • 사용자 계정 비활성화 및 삭제/익명화 처리 플로우 관리
  • 삭제/익명화 프로세스 시작 및 조율
  • 삭제/익명화 상태 추적 및 도메인 간 동기화 관리

정책 및 규칙

  1. 계정 생성 정책
    • 신규 계정 기본 상태는 PENDING.
    • 모바일 가입 시 Access Code 검증 필요 (Access Code 도메인 협력).
    • 이메일 인증 완료 시 ACTIVE 상태 변경 (Auth 도메인 이벤트 구독).
    • 게스트 온보딩 시 guests.{region} IAM Group 할당, guestAccountId, guestExpiresAt를 초기화하고 GuestAccountLifecycleONBOARDED 이벤트 기록.
  2. 계정 상태/타입 정책
    • 상태 전이 규칙 준수 (예: PENDING -> ACTIVE, ACTIVE -> INACTIVE).
    • 비활성화(INACTIVE) 후 일정 기간 경과 시 삭제/익명화 예약.
    • 상태 변경 시 UserStatusHistory 기록.
    • Step-up 완료 시 IAM Group(guests.* → 서비스 정책에 따른 대상 그룹)과 Plan을 변경하고 GuestAccountLifecycleUPGRADED 이벤트 기록. userId(UUID)는 변경되지 않음.
    • 게스트 만료 시 GuestAccountLifecycleEXPIRED 이벤트를 기록하고, 필요 시 INACTIVE 처리.
  3. 계정 유형 정책
    • User 도메인은 일반 사용자 계정(USER 타입)만 관리.
    • Service Account 관리: Service Account는 IAM 도메인에서 관리.
  4. 서비스 기간 정책
    • 사용자 생성 또는 Plan 할당 시 Plan 정의에 따라 초기 이용 기간 및 만료일 설정.
    • 서비스 이용 기간 중단/재개 요청 처리 및 관련 이력(ServiceUsagePeriod 내) 기록.
    • 중단 시 isSuspended 플래그 업데이트, 관련 타임스탬프(suspendedAt, resumedAt) 기록.
    • 중단 기간(totalSuspendedDuration)을 계산하고 이를 반영하여 실제 만료일(expiresAt) 및 남은 이용 일수(remainingServiceDays) 계산.
    • 서비스 기간이 중단되거나 만료될 경우, 기능 접근 제한을 위해 관련 이벤트(예: ServicePeriodSuspended, ServicePeriodExpired) 발행 (IAM 연동 필요).
    • 게스트 계정 생성 시 guestExpiresAt과 Step-up 만료 타임라인을 TimeMachine에 등록.
    • Step-up 완료 시 accountTypeREGISTERED로 전환하고 guestExpiresAt 타이머를 해제.
    • 게스트 계정이 만료되면 GuestAccountLifecycleEXPIRED 이벤트를 기록하고 삭제/익명화 플로우를 트리거.
  5. 데이터 삭제/익명화 정책
    • 데이터 삭제 유형(DeletionType)에 따라 적절한 처리 플로우 실행.
    • 익명화 시 isAnonymized 플래그 설정 및 anonymizedAt, anonymizationId 기록.
    • 삭제 프로세스는 상태(DeletionStatus) 추적 및 도메인별 상태 기록.
    • 실패한 삭제 프로세스에 대한 재시도 메커니즘 제공.
    • 보존 종료일(dataRetentionEndDate) 설정 및 데이터 보존 정책 적용.

2.2 프로필 관리 컨텍스트 (Profile Management Context)

사용자의 부가적인 프로필 정보 관리를 담당합니다.

책임

  • 사용자 이름 관리
  • 선호 언어 및 타임존 설정 관리
  • 확장 가능한 프로필 데이터(profileData) 관리

정책 및 규칙

  1. 프로필 정보 정책
    • 이름 필드 필수.
    • 언어/타임존 기본값 설정 및 유효성 검사.

2.3 역할 및 연동 컨텍스트 (Role & Integration Context)

사용자의 역할 관련 정보(참조) 및 다른 도메인과의 연동 지점을 관리합니다.

책임

  • 사용자 계정 유형(UserType) 관리 (USER 타입)
  • IAM 도메인 연동: 그룹(Group), 플랜(Plan) ID 참조 관리
  • Sleep 도메인 연동: 사용자 주기(UserCycle) ID 참조 관리

정책 및 규칙

  1. IAM 연동 정책
    • 모든 일반 사용자는 최소 1개 그룹에 속해야 함 (IAM 도메인 검증 협력).
    • 일반 사용자(USER 타입)는 Plan에 연결되어야 함 (IAM 도메인 검증 협력).
    • User 도메인은 연결 정보(ID)만 관리, 실제 권한 평가는 IAM 책임.
    • Service Account 연동: Service Account 관련 연동은 IAM 도메인에서 직접 처리.

2.4 개인정보 보호 컨텍스트 (Privacy Context)

GDPR 등 규정 준수를 위한 사용자 데이터 관리 기능을 담당합니다.

책임

  • 사용자 데이터 접근 요청 처리 지원
  • 사용자 데이터 삭제/익명화 요청 처리 지원
  • 개인 식별 정보(PII) 관리 규칙 준수
  • 익명화 프로세스 관리 및 익명화 기록(AnonymizationRecord) 유지
  • 데이터 보존 기간 및 종료일 관리
  • 도메인 간 개인정보 처리 일관성 유지

정책 및 규칙

  1. GDPR 준수 정책
    • 데이터 처리 활동 로깅 (Audit 도메인 연동).
    • PII 저장 및 접근 제어 규칙.
    • 삭제/익명화 처리 프로세스 정의.
  2. 익명화 처리 정책
    • PII 필드 익명화 방법 및 규칙 정의 (이메일, 이름 등).
    • 익명화된 데이터의 일관성 유지 (익명화 ID 기반).
    • 익명화 처리 내역 기록 관리.
  3. 데이터 보존 정책
    • 보존 기간 정의 및 종료일 설정 규칙.
    • 비활성화된 계정의 데이터 보존 기간 관리.
    • 보존 종료 후 데이터 처리 규칙 (통계 목적 분리, 완전 삭제 등).

3. 컨텍스트 경계

3.1 상위 컨텍스트 (User 도메인이 의존하는)

  • Auth Domain: 인증, 이메일/비밀번호 관리, 계정 잠금/해제 트리거 등
  • IAM Domain: 그룹, 플랜, 역할, 권한의 상세 정의 및 관리, 권한 평가 로직
  • Access Code Domain: 회원 가입 시 Access Code 검증
  • Audit Domain: 사용자 정보 변경 및 개인정보 관련 활동 로깅
  • TimeMachine Domain: 게스트 만료 타이머 및 서비스 기간 계산 시 기준 시간 제공

3.2 하위 컨텍스트 (User 도메인 정보를 사용하는)

  • Sleep Domain: 사용자 식별 및 UserCycle 관리
  • Learning Domain: 사용자 식별

3.3 외부 시스템

  • (현재 User 도메인에서 직접 연동하는 외부 시스템은 명시되지 않음)
  • 게스트 계정 마케팅 캠페인을 위해 Notification/Marketing 시스템과 이벤트 연동을 고려할 수 있음 (추후 확장)

4. 컨텍스트 매핑

4.1 Auth Domain과의 관계 (Customer-Supplier / Shared Kernel 일부)

User는 Auth에게 사용자 상태 정보 등을 제공(Supplier)하고, Auth는 User의 상태 변경(Lock/Unlock)을 요청할 수 있습니다. private.users 테이블 스키마를 공유합니다.

4.2 IAM Domain과의 관계 (Conformist / Anti-corruption Layer 일부)

User는 IAM이 정의한 그룹/플랜 ID를 참조(Conformist)하며, IAM은 User 도메인에 사용자-그룹/플랜 연결 변경을 요청하거나 이벤트를 발행할 수 있습니다. User는 IAM의 복잡한 권한 구조를 직접 알 필요는 없습니다(ACL). 또한 User 도메인은 서비스 기간 중단/만료 시 관련 이벤트를 발행하여 IAM이 접근 제어를 수행하도록 합니다.

4.3 Sleep Domain과의 관계 (Customer-Supplier)

User는 Sleep 도메인에게 사용자 식별 정보를 제공(Supplier)합니다. Sleep 도메인은 UserCycle 정보를 관리하며, 필요시 User 정보를 참조합니다.

4.4 Audit Domain과의 관계 (Published Language)

User 도메인은 주요 변경사항(상태 변경, 정보 수정, PII 접근/삭제 등) 발생 시 정의된 형식의 이벤트를 발행하고, Audit 도메인은 이를 구독하여 로그를 기록합니다.

4.5 Client/API Gateway와의 관계

사용자(클라이언트 앱)는 API 게이트웨이를 통해 서비스 이용 기간 중단 또는 재개를 요청할 수 있습니다.

5. 도메인 이벤트

(event-storming.md 내용 요약)

5.1 발행하는 이벤트 (주요 이벤트 예시)

  • UserCreated, UserActivated, UserDeactivated, UserReactivated
  • UserProfileUpdated, UserNameUpdated, UserLanguagePreferenceUpdated, UserTimezoneUpdated
  • UserDeletionScheduled, UserDeleted, UserAnonymized
  • UserAnonymizationInitiated, UserAnonymizationCompleted
  • UserDeletionProcessInitiated, UserDeletionProcessCompleted, UserDeletionProcessFailed
  • UserDeletionProcessRetryRequested, DomainDeletionStatusChanged
  • UserLocked, UserUnlocked, UserSuspended, UserUnsuspended, UserBanned
  • UserTypeAssigned
  • UserAssignedToGroup, UserRemovedFromGroup (IAM 연동 결과 반영)
  • UserLinkedToPlan, UserUnlinkedFromPlan (IAM 연동 결과 반영)
  • ServicePeriodSuspended, ServicePeriodResumed, ServicePeriodExpired, RemainingServiceDaysCalculated
  • UserDataDeletionRequested, UserDataAccessRequested

5.2 구독하는 이벤트 (주요 이벤트 예시)

  • (From Auth) EmailVerificationCompleted -> Trigger ActivateUser
  • (From Auth) AccountLocked, AccountUnlocked -> Trigger UserLocked, UserUnlocked
  • (From IAM) GroupPolicyChanged, PlanPolicyChanged (사용자 상태에 영향을 줄 수 있는 경우)
  • (From System) ScheduledTaskTriggered (e.g., for UserDeletion, UserAnonymization)

6. 보안 정책

  • 데이터 저장:
    • PII 및 민감 정보는 private 스키마에 저장.
    • PII 필드 암호화 저장 (요구사항 2.2.2).
  • 접근 제어:
    • API 요청 시 적절한 인증 및 인가 필요 (Auth/IAM 연동).
    • 사용자 데이터 접근은 최소 권한 원칙 준수.
  • 감사 로그:
    • 개인정보 처리 관련 작업(조회, 수정, 삭제 요청 등) 및 주요 상태 변경 시 Audit 도메인 연동 로그 기록 (요구사항 2.2.5, 1.7.4).
  • 규정 준수:
    • GDPR 등 개인정보 보호 규정 준수 설계 (요구사항 1.7).

7. 기술 스택

  • NestJS
  • TypeScript
  • PostgreSQL (주 데이터 저장소, privateuser 스키마 사용)
  • Prisma (ORM)
  • (필요시) Redis (캐싱 등)
  • (필요시) GCP Pub/Sub (이벤트 메시징)

8. 변경 이력

버전날짜작성자변경 내용
0.1.02025-07-27AI Assistant최초 작성 (domain-model, event-storming, requirements, auth/bounded-context 참조)
0.2.02025-07-28AI Assistant요구사항/비즈니스 규칙(v0.2.1) 반영: 서비스 이용 기간 관리(중단/재개/만료) 관련 책임, 용어, 컨텍스트, 매핑, 이벤트 추가
0.3.02025-05-08AI Assistant사용자 데이터 삭제 및 익명화 관련 책임, 용어, 컨텍스트, 정책, 이벤트 추가: UserDeletionProcess, AnonymizationRecord, DeletionType, DeletionStatus 등
0.4.02025-06-14AI AssistantService Account 관련 책임, 용어, 컨텍스트, 정책을 IAM 도메인으로 이관, USER 타입 전용 관리로 변경