본문으로 건너뛰기

User Management 도메인 이벤트 스토밍

개요

본 문서는 User Management 도메인의 이벤트 스토밍 워크샵 결과를 정리한 것입니다. User Management는 App-User 정보 조회 및 리포트 생성을 담당하며, 운영자와 외부 시스템이 app-user의 치료 진행 상황과 데이터를 조회할 수 있도록 지원합니다.

도메인 이벤트

도메인에서 발생하는 app-user 정보 조회 및 리포트 관련 이벤트들입니다.

1. app-user 목록 조회 이벤트

1.1 백엔드 이벤트

이벤트설명트리거
AppUsersQueryRequestedapp-user 목록 조회 요청됨API 호출
AccessVerified접근 권한 검증됨권한 체크
AccessDenied접근 권한 거부됨권한 체크 실패
OperationUserRetrieved운영자 계정 정보 조회됨USER 타입 인증
AppUsersQueriedapp-user 목록 DB 조회 실행됨조회 실행
LastLoginTimeRetrieved마지막 로그인 시간 조회됨app-user별 조회
AppUsersFiltered필터 조건 적용됨필터링 로직
AppUsersSorted정렬 조건 적용됨정렬 로직
AppUsersRetrievedapp-user 목록 조회 완료됨조회 성공
InvalidSiteIdProvided유효하지 않은 사이트 ID 제공됨검증 실패

2. app-user 리포트 조회 이벤트

2.1 백엔드 이벤트

이벤트설명트리거
AppUserReportRequestedapp-user 리포트 조회 요청됨API 호출
UserCycleRetrieved사용자 주기 정보 조회됨리포트 생성 시작
CurrentDayCalculated현재 일차 계산됨일차 계산 로직
SleepDiariesRetrieved수면 일기 목록 조회됨Sleep 도메인 조회
RtibAlgorithmGoalRetrieved첫 번째 rTIB 알고리즘 목표 조회됨Sleep 도메인 조회
SleepGoalsRetrieved수면 목표 로그 목록 조회됨Sleep 도메인 조회
QuestionnairesRetrieved설문 응답 목록 조회됨Questionnaire 도메인 조회
GoalSuccessRecordsRetrieved목표 성공 기록 조회됨Sleep 도메인 조회
SuccessCountCalculated성공 횟수 계산됨LOT/AET 카운트
SleepDiaryCountCalculated분모용 수면 일기 개수 계산됨계산 로직
LotConsistencyCalculatedLOT 일관성 퍼센티지 계산됨퍼센티지 계산
AetConsistencyCalculatedAET 일관성 퍼센티지 계산됨퍼센티지 계산
ReportSummaryGenerated리포트 요약 정보 생성됨요약 데이터 집계
AppUserReportGeneratedapp-user 리포트 생성 완료됨리포트 생성 완료

3. 외부 토큰 인증 이벤트

3.1 백엔드 이벤트

이벤트설명트리거
ExternalTokenReceived외부 액세스 토큰 수신됨API 호출
TokenValidationRequested토큰 검증 요청됨인증 프로세스
TokenValidated토큰 검증 성공됨토큰 유효성 확인
TokenValidationFailed토큰 검증 실패됨토큰 무효
TokenClaimsExtracted토큰 클레임 추출됨토큰 파싱
SubjectVerifiedSubject 클레임 검증됨userCycleId 일치 확인
SubjectMismatchSubject 클레임 불일치됨userCycleId 불일치

정책(Policies)

시스템의 자동화된 app-user 정보 조회 및 리포트 생성 규칙입니다.

app-user 목록 조회 정책

백엔드 정책

  • siteId는 필수 입력 값으로 검증
  • 페이징 기본값: limit=10, page=1
  • 정렬 기본값: sortBy="createdAt", sortOrder="desc"
  • lastLogin 정렬 시 별도 정렬 로직(searchUsersByLastLogin) 사용
  • 조회 결과에 항상 totalCount와 count 포함
  • Welt 사이트 계정은 showGroup=true 설정
WhenThen
AppUsersQueryRequested (operators.site.admin, operators.site.member 그룹)OperationUserRetrieved 발생, AccessVerified 발생
AppUsersQueryRequested (operators.medi-dashboard.admin Group)AppUsersQueried 발생 (권한 검증 생략)
AccessDeniedInvalidSiteIdProvided 발생, BAD_REQUEST 에러 반환
AppUsersQueriedLastLoginTimeRetrieved 발생 (각 app-user별)
LastLoginTimeRetrievedAppUsersRetrieved 발생

app-user 리포트 생성 정책

백엔드 정책

  • 리포트 생성 시 사용자 주기 정보 필수 조회
  • 현재 시간이 userCycle.EndAt 이후면 EndAt 기준으로 일차 계산
  • startDate~endDate 범위로 수면 일기, 목표 로그 조회
  • 분모용 수면 일기 개수는 calculateSleepDiaryCountForDenominator 로직 사용
  • LOT/AET 일관성 퍼센티지는 소수점 첫째 자리에서 반올림
  • 성공 횟수가 분모보다 크면 퍼센티지 100으로 설정
  • totalUsageDays는 app-user의 plan에 정의된 값으로 설정
WhenThen
AppUserReportRequestedUserCycleRetrieved 발생, CurrentDayCalculated 발생
UserCycleRetrievedSleepDiariesRetrieved 발생, RtibAlgorithmGoalRetrieved 발생, SleepGoalsRetrieved 발생, QuestionnairesRetrieved 발생
GoalSuccessRecordsRetrievedSuccessCountCalculated 발생
SuccessCountCalculatedSleepDiaryCountCalculated 발생
SleepDiaryCountCalculatedLotConsistencyCalculated 발생, AetConsistencyCalculated 발생
AetConsistencyCalculatedReportSummaryGenerated 발생
ReportSummaryGeneratedAppUserReportGenerated 발생

외부 토큰 인증 정책

백엔드 정책

  • 토큰 타입은 TokenTypeMdAccess만 허용
  • 빈 토큰은 즉시 BAD_REQUEST 반환
  • "sub" 클레임은 float64 타입이어야 함
  • "sub" 값과 userCycleId 일치 여부 검증 필수
WhenThen
ExternalTokenReceived (빈 문자열)TokenValidationFailed 발생, BAD_REQUEST 에러 반환
TokenValidationRequestedTokenValidated 발생 또는 TokenValidationFailed 발생
TokenValidatedTokenClaimsExtracted 발생
TokenClaimsExtracted ("sub" 없음)SubjectMismatch 발생, BAD_REQUEST 에러 반환
TokenClaimsExtracted ("sub" 불일치)SubjectMismatch 발생, BAD_REQUEST 에러 반환
SubjectVerifiedAppUserReportRequested 발생

명령(Commands)

도메인 이벤트를 발생시키는 app-user 정보 관리 및 리포트 생성 동작입니다.

1. app-user 목록 관리 명령

1.1 백엔드 명령

명령설명영향
GetAppUsersapp-user 목록 조회AppUsersQueryRequested 이벤트 발생
VerifyOperationUserAccess운영자 접근 권한 검증AccessVerified 또는 AccessDenied 이벤트 발생
RetrieveOperationUser운영자 정보 조회OperationUserRetrieved 이벤트 발생
SearchAppUsersapp-user 검색 및 필터링AppUsersQueried 이벤트 발생
GetLastLoginTime마지막 로그인 시간 조회LastLoginTimeRetrieved 이벤트 발생
ApplyFilters필터 조건 적용AppUsersFiltered 이벤트 발생
ApplySorting정렬 조건 적용AppUsersSorted 이벤트 발생
ValidateSiteId사이트 ID 검증InvalidSiteIdProvided 이벤트 발생 (실패 시)

2. app-user 리포트 관리 명령

2.1 백엔드 명령

명령설명영향
GetAppUserReportapp-user 리포트 조회AppUserReportRequested 이벤트 발생
RetrieveUserCycle사용자 주기 정보 조회UserCycleRetrieved 이벤트 발생
CalculateCurrentDay현재 일차 계산CurrentDayCalculated 이벤트 발생
RetrieveSleepDiaries수면 일기 조회SleepDiariesRetrieved 이벤트 발생
RetrieveRtibGoal첫 번째 rTIB 목표 조회RtibAlgorithmGoalRetrieved 이벤트 발생
RetrieveSleepGoals수면 목표 로그 조회SleepGoalsRetrieved 이벤트 발생
RetrieveQuestionnaires설문 응답 조회QuestionnairesRetrieved 이벤트 발생
RetrieveGoalSuccessRecords목표 성공 기록 조회GoalSuccessRecordsRetrieved 이벤트 발생
CalculateSuccessCount성공 횟수 계산SuccessCountCalculated 이벤트 발생
CalculateSleepDiaryCount분모용 수면 일기 개수 계산SleepDiaryCountCalculated 이벤트 발생
CalculateLotConsistencyLOT 일관성 계산LotConsistencyCalculated 이벤트 발생
CalculateAetConsistencyAET 일관성 계산AetConsistencyCalculated 이벤트 발생
GenerateReportSummary리포트 요약 생성ReportSummaryGenerated 이벤트 발생

3. 외부 토큰 인증 명령

3.1 백엔드 명령

명령설명영향
GetAppUserReportWithExternalToken외부 토큰으로 리포트 조회ExternalTokenReceived 이벤트 발생
ValidateToken토큰 검증TokenValidationRequested 이벤트 발생
ExtractTokenClaims토큰 클레임 추출TokenClaimsExtracted 이벤트 발생
VerifySubjectSubject 클레임 검증SubjectVerified 또는 SubjectMismatch 이벤트 발생

액터(Actors)

시스템과 상호작용하는 주체들입니다.

운영자 (OperationUser)

  • app-user 목록 조회 및 검색
  • app-user 리포트 조회
  • 본인 사이트 app-user만 접근 가능

외부 시스템 (ExternalSystem)

  • 외부 액세스 토큰으로 리포트 조회
  • 특정 app-user의 리포트만 접근 가능

Auth 도메인

  • 운영자 정보 조회
  • 토큰 검증 수행

Sleep 도메인

  • 수면 일기 데이터 제공
  • 수면 목표 로그 제공
  • 목표 성공 기록 제공

Questionnaire 도메인

  • 설문 응답 데이터 제공

애그리게잇(Aggregates)

4.1 AppUser

트랜잭션 경계: app-user의 기본 정보와 치료 상태를 원자적으로 관리

담당 Command:

  • GetAppUsers
  • SearchAppUsers
  • ApplyFilters
  • ApplySorting

발행 Event:

  • AppUsersQueried
  • AppUsersFiltered
  • AppUsersSorted
  • AppUsersRetrieved

적용된 정책:

  • When: AppUsersQueryRequested → Then: AppUsersQueried 발생

4.2 AppUserReport

트랜잭션 경계: app-user의 치료 진행 상황과 통계 데이터를 일관성 있게 생성

담당 Command:

  • GetAppUserReport
  • RetrieveUserCycle
  • CalculateCurrentDay
  • CalculateSuccessCount
  • CalculateLotConsistency
  • CalculateAetConsistency
  • GenerateReportSummary

발행 Event:

  • AppUserReportRequested
  • UserCycleRetrieved
  • CurrentDayCalculated
  • SuccessCountCalculated
  • LotConsistencyCalculated
  • AetConsistencyCalculated
  • ReportSummaryGenerated
  • AppUserReportGenerated

적용된 정책:

  • When: AppUserReportRequested → Then: UserCycleRetrieved 발생, CurrentDayCalculated 발생
  • When: UserCycleRetrieved → Then: SleepDiariesRetrieved 발생, SleepGoalsRetrieved 발생, QuestionnairesRetrieved 발생
  • When: SuccessCountCalculated → Then: SleepDiaryCountCalculated 발생
  • When: SleepDiaryCountCalculated → Then: LotConsistencyCalculated 발생, AetConsistencyCalculated 발생

4.3 ExternalAccess

트랜잭션 경계: 외부 토큰 기반 인증과 리포트 접근을 안전하게 처리

담당 Command:

  • GetAppUserReportWithExternalToken
  • ValidateToken
  • ExtractTokenClaims
  • VerifySubject

발행 Event:

  • ExternalTokenReceived
  • TokenValidated
  • TokenValidationFailed
  • TokenClaimsExtracted
  • SubjectVerified
  • SubjectMismatch

적용된 정책:

  • When: ExternalTokenReceived (빈 문자열) → Then: TokenValidationFailed 발생
  • When: TokenValidated → Then: TokenClaimsExtracted 발생
  • When: SubjectVerified → Then: AppUserReportRequested 발생

읽기 모델(Read Models)

조회 최적화를 위한 데이터 구조입니다.

AppUser List View

  • 사이트별 app-user 목록
  • 검색 키워드 인덱스
  • 상태별 필터링 지원
  • 마지막 로그인 시간 포함

AppUser Report View

  • app-user별 리포트 데이터
  • 치료 진행 상황 요약
  • 수면 일기, 목표, 설문 응답 집계
  • LOT/AET 일관성 퍼센티지

Operation User Access View

  • 운영자별 접근 가능한 사이트
  • 역할 및 권한 정보
  • Site와 Position 정보

Last Login View

  • app-user별 마지막 로그인 시간
  • 빠른 조회를 위한 캐시 레이어

변경 이력

버전날짜작성자변경 내용
0.1.02025-12-31dalia@weltcorp.com초기 작성 - GetAppUsers, GetAppUserReport, GetAppUserReportWithExternalAccessToken 기반