본문으로 건너뛰기

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를 초기화하고 GuestAccountLifecycle에 ONBOARDED 이벤트 기록.
  2. 계정 상태/타입 정책
    • 상태 전이 규칙 준수 (예: PENDING -> ACTIVE, ACTIVE -> INACTIVE).
    • 비활성화(INACTIVE) 후 일정 기간 경과 시 삭제/익명화 예약.
    • 상태 변경 시 UserStatusHistory 기록.
    • Step-up 완료 시 IAM Group(guests.* → 서비스 정책에 따른 대상 그룹)과 Plan을 변경하고 GuestAccountLifecycle에 UPGRADED 이벤트 기록. userId(UUID)는 변경되지 않음.
    • 게스트 만료 시 GuestAccountLifecycle에 EXPIRED 이벤트를 기록하고, 필요 시 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 완료 시 accountType을 REGISTERED로 전환하고 guestExpiresAt 타이머를 해제.
    • 게스트 계정이 만료되면 GuestAccountLifecycle에 EXPIRED 이벤트를 기록하고 삭제/익명화 플로우를 트리거.
  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 (주 데이터 저장소, private 및 user 스키마 사용)
  • 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 타입 전용 관리로 변경