User 도메인 비즈니스 규칙
1. 사용자 계정 관리 규칙
1.1 계정 생성 규칙
- 모바일 앱을 통한 회원 가입 시, 유효한 Access Code가 필요함 (Access Code 도메인 의존).
- 회원 가입 시, 이메일 인증 절차가 필수임 (Auth 도메인 의존).
- 가입 시 필요한 동의 항목 수집 및 처리는 Auth 도메인에서 담당함.
- 모든 사용자는 생성 시점에 최소 하나 이상의 그룹(Group)에 자동으로 할당되어야 함 (Group 도메인 책임).
USER타입의 모든 사용자는 생성 시점에 유효한 Plan에 직접 연결되어야 함 (Plan 도메인 책임).- Group과 Plan은 독립적으로 관리됨: 그룹 변경이 플랜에 영향을 주지 않으며, 플랜 변경이 그룹에 영향을 주지 않음.
- 게스트 계정 생성 규칙
- 게스트 계정은 필수 약관 동의와 디바이스 검증이 완료되어야 생성 가능하며, 이메일/소셜 자격 증명을 저장하지 않음.
- 게스트 계정 생성 시 게스트 그룹(
guests.{region})과 게스트 플랜(plan.guest)이 자동 할당되어야 함. - 게스트 계정은 생성 즉시 TimeMachine 기반 만료 타이머(서비스 설정에 따른 기간)를 예약해야 함.
- 게스트와 정식 사용자의 구분은 IAM Group(
guests.*vspatients.*)으로 관리됨.
1.2 계정 정보 관리 규칙
- 사용자 정보(ID, 이메일, 이름, 상태, 프로필 등) 조회 가능.
- 사용자 정보(이름, 프로필 정보 등) 수정 가능.
- 이메일 및 비밀번호 변경은 Auth 도메인의 책임임.
1.3 계정 상태 관리 규칙
- 사용자 계정 상태는 다음 중 하나로 관리됨:
ACTIVE: 활성, 서비스 이용 가능.INACTIVE: 비활성(탈퇴), 서비스 이용 불가. 즉시 익명화 처리되고, 일정 기간 후 삭제 처리될 수 있음.LOCKED: 일시 잠김, 특정 조건(예: 로그인 연속 실패)으로 인한 일시적 접근 제한 (Auth 도메인 연관).PENDING: 활성화 대기, 계정 활성화(예: 이메일 인증) 필요.SUSPENDED: 이용 정지, 관리자가 설정한 기간 동안 서비스 이용 제한.BANNED: 영구 정지, 영구적 서비스 접근 차단.- (참고: 여기서 정의된 계정 상태는 사용자가 자발적으로 치료 활동을 일시 정지하는 것과는 별개로 관리됩니다. 치료 활동 일시 정지는 5번 섹션을 참조하십시오.)
- 계정 상태 변경 이력은 추적 및 기록되어야 함.
- 특정 조건(예: 연속 로그인 실패, 관리자 조치) 발생 시 계정 상태 자동 변경 가능.
- 게스트 계정 승격/만료 규칙
- Step-up 인증이 완료되면 IAM Group(
guests.*→ 서비스 정책에 따른 대상 그룹)과 Plan(plan.guest→ 서비스 정책에 따른 대상 플랜)을 변경하고,upgradedAt을 기록하고 게스트 만료 타이머를 해제해야 함. userId(UUID)는 변경되지 않음. - 게스트 계정이 만료 시
EXPIRED이벤트를 기록하고, IAM/Group/Plan 도메인과 협력하여 게스트 권한을 제거해야 함. - 만료된 게스트 계정은 정책에 따라
INACTIVE처리 또는 삭제 프로세스를 시작해야 함.
- Step-up 인증이 완료되면 IAM Group(
1.4 계정 비활성화/삭제 규칙 (GDPR 준수)
- 사용자는 계정 비활성화(탈퇴)를 요청할 수 있음.
- 게스트 계정(
guests.*IAM Group 소속)도 자발적으로 탈퇴를 요청할 수 있으며, 일반 사용자와 동일한 비활성화(Soft Delete) 방식이 적용됨. - 비활성화된 계정은 정책에 따라 일정 기간 후 영구 삭제 되어야 함.
- 데이터 삭제/익명화 시 관련 규정(예: GDPR "잊힐 권리")을 준수해야 함.
- 사용자 데이터 삭제는 다음 유형으로 구분됨:
SOFT_DELETE: 비활성화, 데이터 보존 및 계정 복구 가능ANONYMIZE: 익명화, 개인식별정보 제거 및 기록 유지HARD_DELETE: 영구 삭제, 전체 데이터 완전 제거 (개발 환경용)
- 비활성화된 사용자 계정은 관리자에 의해 재활성화될 수 있음(정책 및 권한에 따라).
- 익명화된 사용자 계정은 재활성화가 불가능함.
- 게스트 계정 자발적 탈퇴 규칙
- 게스트 계정이 자발적으로 탈퇴를 요청하면
status를INACTIVE로 변경하고deletedAt을 설정함. - 자발적 탈퇴 시 기존 게스트 만료 타이머(TimeMachine 스케줄)는 해제됨.
- 비활성화된 게스트 계정은 기존 데이터 보존 정책에 따라 삭제/익명화 처리됨.
- 게스트 계정이 자발적으로 탈퇴를 요청하면
- 게스트 만료 및 정리 규칙
- 게스트 계정이 만료되면 Access Token 및 Refresh Token을 모두 폐기하고, 게스트 그룹/플랜에서 제거해야 함.
- 게스트 계정이 만료된 상태에서 7일 이상 업그레이드가 이루어지지 않으면 자동으로 삭제 또는 익명화 프로세스를 시작해야 함.
- 게스트 계정 만료/정리 이벤트는
GuestAccountLifecycle로그에 기록되어야 하며, 감사 목적으로 Audit 도메인에도 통지해야 함.
1.5 익명화 및 데이터 삭제 처리 규칙
- 사용자 데이터 삭제 프로세스는 전체 시스템에 걸쳐 도메인별로 일관되게 수행되어야 함.
- 삭제 프로세스는 상태 추적 메커니즘을 통해 모니터링되어야 함:
PENDING: 요청 접수 대기 중IN_PROGRESS: 처리 진행 중COMPLETED: 성공적으로 완료FAILED: 처리 실패PARTIALLY_COMPLETED: 일부 도메인에서만 완료
- 각 도메인별 삭제 상태는 개별적으로 추적되어야 함.
- 실패한 삭제 프로세스는 관리자에 의해 재시도될 수 있어야 함.
- 익명화 처리 시 다음 규칙이 적용됨:
- 모든 개인식별정보(PII)는 식별 불가능한 값으로 대체되어야 함.
- 이메일은 난수화된 고유 값으로 대체되어야 함.
- 이름, 연락처 등 식별 가능한 정보는 모두 제거되어야 함.
- 익명화된 사용자는 로그인이 불가능해야 함.
- 각 익명화 프로세스는 고유한
anonymizationId로 식별되어야 함. - 다른 도메인에서의 익명화를 추적하기 위해
anonymizationId가 공유되어야 함.
- 익명화 및 삭제 관련 모든 작업은 감사 로그에 기록되어야 함 ([Audit 도메인] 의존).
2. 사용자 프로필 관리 규칙
2.1 프로필 정보 규칙
- 사용자 이름 정보는 필수적으로 관리되어야 함.
- 사용자 선호 언어 설정(예: 'ko', 'en', 'de')은 관리되어야 함.
- 사용자 타임존 설정(예: 'Asia/Seoul', 'Europe/Berlin')은 관리되어야 함.
- 프로필 정보는 새로운 필드 추가에 유연한 구조여야 함 (확장성).
2.2 프로필 접근 규칙
- 사용자는 자신의 프로필 정보(이름, 선호 언어, 타임존 등)를 조회하고 수정할 수 있어야 함 (프론트엔드 제공).
3. 사용자 역할 및 권한 규칙 (IAM 도메인 책임)
3.1 역할/권한 정의 규칙
- 시스템 역할(System Admin, IAM Admin, Service Account, Regular User 등)은 IAM 도메인에서 정의하고 관리함.
- 세부 권한(Permission) 및 정책(Policy)은 IAM 도메인에서 정의하고 평가함.
3.2 역할 할당 규칙
- 사용자에게 역할을 할당하고 관리하는 로직은 IAM 도메인의 책임임.
3.3 접근 제어 규칙 (다차원 권한 계산)
- 역할 기반 접근 제어(RBAC)는 IAM 도메인에서 처리함.
- User 도메인은 사용자와 Group/Plan의 연결 정보를 제공함.
- 최종 권한은 그룹 권한과 플랜 권한의 교집합으로 결정됨:
- 그룹 권한: User → Group → Role → Permission (조직/기능적 권한)
- 플랜 권한: User → Plan → Role → Permission (서비스 수준 권한)
- 최종 권한: GroupPermissions ∩ PlanPermissions
- 그룹과 플랜은 서로 다른 차원의 권한을 제공하며, 두 권한 집합 모두를 만족해야 접근이 허용됨.
4. 사용자 주기(Cycle) 관리 규칙 (User 도메인 책임)
4.1 주기 정보 관리 규칙
- 사용자별 치료 또는 학습 주기(
UserCycle) 정보(시작일, 종료일, 상태)는 User 도메인에서 관리되어야 함. - 사용자 주기의 상태(
ACTIVE,COMPLETED,CANCELLED,PENDING)는 사용자 계정 상태와 별개로 관리됨.- (참고: 여기서 정의된 주기 상태는 사용자가 치료 활동을 일시 정지하는 것과는 별개로 관리됩니다. 치료 활동 일시 정지는 5번 섹션을 참조하십시오.)
- 한 사용자는 여러 주기를 가질 수 있음 (필요시).
UserCycle시작 이후, 서비스 이용이 활성 상태였던 날짜 수를 기준으로 '치료 주기 일차'(dayIndex)가 계산되어야 함. 이 값은 활성 치료일 기준의 상대적인 일차임.- 치료 주기 일차 계산 시, 누적된 총 치료 활동 일시 정지 기간은 제외되어야 함 (이를 위해 상세한 정지 이력(5.2 참조)이 필요함).
- DST(일광절약시간) 고려: 일차 계산 시 사용자 타임존의 DST 전환을 정확히 반영해야 함
- DST 전환으로 인한 타임존 오프셋 변화 자동 처리
- 하루 길이 변화(23시간 또는 25시간)를 고려한 정확한 날짜 계산
- 타임존별 DST 규칙에 따른 자동 보정
- 사용자는 동시에 여러 개의
ACTIVE상태UserCycle을 가질 수 없음. UserCycle의 상태 전이 규칙(PENDING->ACTIVE->COMPLETED/CANCELLED)을 준수해야 함.
5. 치료 활동 일시 정지 및 서비스 이용 기간 관리 규칙
5.1 이용 기간 설정 및 만료 규칙
- 사용자의 서비스 이용 기간은 할당된
Plan(Plan 도메인 책임)에 따라 설정되어야 함 (예: Therapeutic Plan은 90일). - 사용자의 서비스 이용 만료일은 관리되어야 하며,
Plan정의에 따라 계산되어야 함.
5.2 치료 활동 일시 정지 및 재개 규칙
- 사용자는 **치료 활동을 일시 정지(suspend)**하고 재개(resume)할 수 있어야 함.
- 이 정지 상태를 추적하기 위한 별도의 정보(예: User 엔티티의
isSuspended플래그,UserSuspensionHistory레코드 등)가 관리되어야 함.
- 이 정지 상태를 추적하기 위한 별도의 정보(예: User 엔티티의
- 치료 활동 일시 정지 및 재개 요청 처리 로직이 필요함.
- 치료 활동 일시 정지 및 재개 이력은 각 정지 건별로 시작 및 종료 시점을 포함하여 상세하게 관리되어야 함 (
UserSuspensionHistory엔티티). - 서비스 이용 만료일 계산 시, 치료 활동이 일시 정지된 동안의 기간은 제외되어야 함 ((5.2에서 관리하는 상세 이력 정보를 바탕으로 계산된 총 정지 기간 반영)).
- 사용자의 남은 서비스 이용 기간 정보는 치료 활동 일시 정지 기간을 제외하고 제공되어야 함.
5.3 기능 접근 제한 규칙
- 치료 활동이 일시 정지된 동안에는 (5.2에서 관리하는 이력 정보 또는 User 엔티티의
isSuspended플래그 상태에 따라) Plan에 정의된 대부분의 핵심 치료 기능(예: 기록 생성, 프로그램 진행 등dayIndex증가와 연관된 기능) 접근이 제한되어야 함 (읽기 전용 접근 등 일부 필수 기능 제외, 구체적 범위는 IAM 도메인 정책 연계). - 서비스 이용 기간이 만료된 사용자(실제 이용일 기준 만료일 초과)에 대해서도 접근 가능한 기능 범위가 제한되어야 함 (구체적 범위는 IAM 도메인 정책 연계, 예: Limited Access Plan으로 전환).
- 기능 제한 상태에서도 사용자는 자신의 과거 기록 열람은 가능해야 함.
5.4 일시 정지 기간 중 날짜 이동 규칙 (TimeMachine 연동)
이 규칙들은 TimeMachine 도메인에서 가상 시간을 설정할 때 User 도메인의 데이터를 참조하여 적용될 수 있는 규칙임.
- 기능 정의: TimeMachine 기능을 통해 사용자의 가상 시간을 특정 치료 활동 일시 정지 기간 내의 N번째 날짜로 설정할 수 있어야 함 (요구사항 1.6.11 참조).
- 목표 날짜 계산: 목표 날짜는 다음 규칙에 따라 계산됨:
- 사용자의
UserSuspensionHistory이력을suspendedAt기준으로 정렬하여 요청된 순서(suspensionSequence)의 정지 기록을 찾음. - 해당 정지 기록의
suspendedAt날짜를 기준으로, 요청된 일수(dayWithinSuspension- 1)만큼 더하여 목표 날짜를 결정함.
- 사용자의
- 유효성 검증:
- 요청된
suspensionSequence가 사용자의 실제 정지 이력 내 유효한 순서여야 함. - 요청된
dayWithinSuspension은 1 이상이어야 함. - 계산된 목표 날짜는 해당 정지 기간의 실제 범위 내에 있어야 함 (즉, 해당
UserSuspensionHistory레코드의suspendedAt이후이고,resumedAt이 존재한다면 그 이전이어야 함).
- 요청된
- 시간 설정 시각: 설정되는 시간은 계산된 목표 날짜의 시작 시각 (00:00:00.000)이며, 사용자의 개별 Timezone ID가 적용되어야 함.
- 권한: 이 기능은 테스터 등 특정 권한을 가진 사용자만 TimeMachine 인터페이스를 통해 사용할 수 있어야 함 (IAM 도메인 연계).
- 데이터 롤백: 이 방식으로 시간을 과거로 설정하는 경우에도 기존 데이터 롤백 규칙이 적용됨 (TimeMachine 도메인 책임).
6. 테스터 관리 규칙 (IAM 도메인 책임)
6.1 테스터 지정 규칙
- 특정 사용자는 Group 도메인에서 관리하는 그룹(예:
Testers그룹) 할당을 통해 '테스터'로 지정될 수 있음. - 테스터 지정 및 해제는 Group 도메인의 그룹 할당을 통해 이루어지며, 지정된 권한을 가진 사용자만 가능함.
- User 도메인은 Group 도메인으로부터 사용자의 그룹 정보를 조회하여 테스터 여부를 판단할 수 있음.
7. 사용자 계정 유형 관리 규칙
7.1 일반 사용자 계정 규칙
- User 도메인은 일반 사용자 계정(
USER타입)만을 관리함. - 모든 일반 사용자 계정은 다음 특징을 가져야 함:
- 모바일 앱을 통한 서비스 이용
- 이메일 인증 및 프로필 관리 필요
- Plan 할당을 통한 치료 주기 관리
- 개인정보 보호 및 GDPR 준수
7.2 Service Account 관리 위임
- Service Account 관리: 시스템 간 통신을 위한 Service Account는 IAM 도메인에서 관리됩니다.
- User 도메인은 Service Account와 관련된 비즈니스 규칙을 정의하지 않습니다.
8. 개인정보 보호 및 규정 준수 규칙 (GDPR 등)
8.1 규정 준수 규칙
- 시스템은 GDPR, HIPAA 등 관련 개인정보 보호 규정을 준수해야 함.
- 개인 식별 정보(PII)는 암호화하여 저장해야 함.
- 사용자 데이터 접근은 최소 권한 원칙에 따라 제어되어야 함.
8.2 사용자 권리 규칙
- 사용자의 데이터 접근 권한 요청 처리 가능해야 함.
- 사용자의 데이터 삭제 요청("잊힐 권리") 처리 및 관련 데이터 익명화/삭제 가능해야 함 (1.4 및 1.5 규칙 참조).
- 사용자 데이터 익명화 작업은 각 도메인에서 일관된 방식으로 수행되어야 함.
- 사용자 데이터 익명화/삭제 요청은 추적 가능하고 감사 가능한 방식으로 처리되어야 함.
- 사용자 데이터 접근/삭제 요청 처리 결과는 명확하게 기록되고 필요시 보고되어야 함.
8.3 데이터 처리 로그 규칙
- 사용자 데이터 처리 활동(생성, 조회, 수정, 삭제 등)에 대한 로그는 기록 및 관리되어야 함 ([Audit 도메인] 의존).
- 특히 개인정보 처리 관련 작업(접근, 수정, 삭제 요청 처리 등)에 대한 감사 로그는 상세히 기록되어야 함 ([Audit 도메인] 의존).
8.4 데이터 보존 규칙
- 사용자 데이터는 관련 법규 및 정책에 따라 적절한 기간 동안 보존되어야 함.
- 비활성화된 계정은 정책에 따라 일정 기간(예: 30일, 60일 등) 동안 보존 후 삭제 또는 익명화됨.
- 익명화 처리된 데이터에는 보존 종료일(
dataRetentionEndDate)이 기록되어야 함. - 보존 종료일에 도달한 익명화 데이터는 정책에 따라 추가 처리(예: 통계 목적으로 분리 저장, 완전 삭제 등)될 수 있음.
- 개인정보 보존 기간은 사용자 동의 내용과 적용 가능한 규정에 따라 결정되어야 함.
9. 성능 규칙
- 사용자 정보 조회 API 평균 응답 시간: 100ms 이내 목표.
- 사용자 정보 수정 API 평균 응답 시간: 200ms 이내 목표.
- 시스템은 최소 10,000명 이상의 사용자 정보를 효율적으로 관리할 수 있는 구조여야 함.
10. 보안 규칙
- 사용자 비밀번호 등 민감 정보 해싱 저장은 Auth 도메인 책임임.
- 개인 식별 정보(PII)는 암호화 저장 필수 (8.1 규칙 참조).
- 모든 API 요청은 적절한 인증 및 인가 절차를 거쳐야 함.
- 사용자 데이터 접근은 최소 권한 원칙 적용 (8.1 규칙 참조).
- 개인정보 처리 작업에 대한 감사 로그 기록 필수 ([Audit 도메인] 의존, 8.3 규칙 참조).
11. 확장성 규칙
- 시스템은 사용자 수 증가에 대응하여 수평 확장이 가능한 구조여야 함.
- 사용자 프로필 정보는 필드 추가에 유연한 구조여야 함 (2.1 규칙 참조).
- 다국어 지원(i18n)을 위한 기반 구조를 고려해야 함.
12. 가용성 규칙
- 사용자 관련 핵심 기능(조회, 상태 확인 등)은 99.95% 이상의 가용성을 목표로 함.
- 의존 시스템 장애 시 읽기 작업 영향을 최소화하기 위한 캐싱 전략 고려.
13. 기술 제약 규칙
- 개발 언어 및 프레임워크: TypeScript, NestJS.
- 데이터베이스: PostgreSQL.
- 민감 정보 저장 스키마:
private.
14. 의존성 규칙
14.1 내부 도메인 의존성
- Auth: 인증, 비밀번호 관리, 이메일 인증, 동의 관리.
- Access Code: 회원 가입 시 코드 검증.
- Sleep: 사용자 식별 정보 및 UserCycle 상태/정보 사용 (예: 해당 주기에 맞는 수면 데이터 기록/조회).
- Learning: 사용자 식별 정보 및 UserCycle 상태/정보 사용 (예: 해당 주기에 맞는 학습 콘텐츠 제공/진행).
- Group: 사용자-그룹 할당 관리, 그룹 정보 참조. 사용자는 하나 이상의 그룹에 속해야 함.
- Plan: 사용자-플랜 할당 관리, 플랜 정보 참조. 사용자는 정확히 하나의 플랜에 속해야 함.
- IAM: 역할, 권한, 정책 정의/관리/평가. 그룹 및 플랜 기반 권한의 교집합을 계산하여 최종 권한 결정. 서비스 이용 기간 및 기능 접근 제한 정책 연계.
- Audit: 사용자 활동, 계정 상태 변경, 치료 활동 정지/재개, 데이터 처리 활동 및 개인정보 관련 감사 로그 기록. 특히 데이터 삭제/익명화 프로세스, 데이터 접근 요청, GDPR 관련 처리 등 중요 작업의 로깅.
- TimeMachine: User 도메인의 정보(주기 시작일, 정지 이력 등)를 참조하여
dayIndex기반 및 일시 정지 기간 내 날짜 기반 가상 시간 설정 기능을 구현.
14.2 외부 의존성
- (현재 명시된 외부 의존성 없음)
15. 변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.1.0 | 2025-04-18 | bok@weltcorp.com | 최초 작성 |
| 0.2.0 | 2025-05-08 | bok@weltcorp.com | 사용자 데이터 삭제 및 익명화 관련 규칙 추가: 익명화 및 데이터 삭제 처리 규칙(1.5), 데이터 보존 규칙(8.4) 추가 및 기존 규칙 상세화 |
| 0.3.0 | 2025-06-14 | bok@weltcorp.com | Service Account 관련 규칙을 IAM 도메인으로 이관, 7절을 일반 사용자 계정 관리 규칙으로 변경 |
| 0.4.0 | 2025-07-16 | bok@weltcorp.com | Group-Plan 독립성 확보: 1.1 계정 생성 규칙 수정(Group/Plan 독립 할당), 3.3 다차원 권한 계산 모델 도입, 14.1 의존성에 Group/Plan 도메인 추가 |
| 0.5.0 | 2025-10-27 | bok@weltcorp.com | 게스트 계정 타입/만료/Step-up 관련 규칙 추가 (1.1, 1.3, 1.4절 보강) |
| 0.6.0 | 2025-12-17 | bok@weltcorp.com | 게스트 계정 자발적 탈퇴 규칙 추가 (1.4절) - Soft Delete 방식 적용, 만료 타이머 해제 |