Learning 도메인 이벤트 스토밍
개요
본 문서는 Learning 도메인의 이벤트 스토밍 워크샵 결과를 정리한 것입니다. 도메인 전문가, 개발자, 그리고 이해관계자들이 참여하여 도출된 도메인 이벤트, 명령, 액터, 정책 등을 포함합니다.
도메인 이벤트
도메인에서 발생하는 중요한 변화나 사실을 나타내는 이벤트들입니다.
1. 수면탐구 콘텐츠 이벤트
1.1 백엔드 이벤트
| 이벤트 | 설명 | 트리거 |
|---|---|---|
| LessonUnlocked | 사용자에게 새로운 레슨이 해금되었음 | 이전 레슨 완료 또는 치료 기간 경과 |
| LessonRecommended | 사용자에게 특정 레슨이 추천됨 | 학습 진도 기반 추천 알고리즘 |
| LessonProgressUpdated | 사용자의 학습 진행률이 업데이트됨 | 사용자의 레슨 완료 |
| LearningProgressReported | 전체 학습 진행률 보고됨 | 진행률 조회 요청 |
| LessonStatusChanged | 레슨 상태가 변경됨 | 레슨 접근 또는 완료 |
| LessonAccessTracked | 레슨 접근이 기록됨 | 레슨 접근 시 |
| SessionProgressUpdated | 세션 진행 상태가 업데이트됨 | 세션 내 레슨 완료 |
| AllLessonsCompleted | 모든 수면탐구 레슨(45개)이 완료됨 | 45번 레슨 완료 |
| FinalLessonUnlocked | 마지막 레슨(46번)이 해금됨 | 치료 기간 완료 |
| QuizUnlocked | 복습 퀴즈가 해금됨 | 46번 레슨 해금 시점 |
| DailyQuizGenerated | 일일 퀴즈가 생성됨 | 매일 새로운 퀴즈 생성 |
| QuizAttempted | 퀴즈 풀이 시도됨 | AttemptQuiz |
| QuizResultRecorded | 퀴즈 결과가 기록됨 | 퀴즈 제출 완료 |
| QuizVersionCreated | 퀴즈 새 버전이 생성됨 | 퀴즈 버전 생성 요청 |
| QuizVersionActivated | 퀴즈 버전이 활성화됨 | 퀴즈 버전 활성화 요청 |
| QuizPerformanceAnalyzed | 퀴즈 성능이 분석됨 | 퀴즈 성능 분석 요청 |
| TextSizeSettingSaved | 텍스트 크기 설정이 저장됨 | 사용자 텍스트 크기 변경 |
| TTSSettingSaved | TTS 설정이 저장됨 | 사용자 TTS 설정 변경 |
| MediaAccessValidated | 미디어 접근 권한이 검증됨 | 미디어 접근 요청 |
| LessonLearningStarted | 레슨 학습이 시작됨 | 사용자가 레슨 열람 시작 |
| LessonLearningEnded | 레슨 학습이 종료됨 | 사용자가 레슨 학습 완료 또는 중단 |
| LessonLearningPaused | 레슨 학습이 일시중지됨 | 앱 백그라운드 전환 |
| LessonLearningResumed | 레슨 학습이 재개됨 | 앱 포그라운드 복귀 |
| LearningMetricsCalculated | 학습 통계가 계산됨 | 학습 종료 또는 통계 조회 요청 |
| LearningPatternAnalyzed | 학습 패턴이 분석됨 | 학습 패턴 분석 요청 |
| LearningHistoryBatchCollected | 학습 이력 배치가 수집됨 | 로컬 배열에 이력 추가 |
| LearningHistoryBatchSubmitted | 학습 이력 배치가 제출됨 | 배치 크기 또는 시간 조건 충족 |
| LearningHistoryBatchRetried | 학습 이력 배치 재시도됨 | 네트워크 복구 시 재시도 |
1.2 프론트엔드 이벤트
| 이벤트 | 설명 | 트리거 |
|---|---|---|
| LessonViewed | 사용자가 레슨을 열람함 | 레슨 열람 |
| LessonScrolledToEnd | 사용자가 레슨을 끝까지 스크롤함 | 레슨 스크롤 완료 |
| LessonCompletionMarked | 레슨 학습 완료가 표시됨 | 레슨 열람 완료 |
| LessonCompletionPopupDisplayed | 레슨 완료 팝업이 표시됨 | 레슨 완료 |
| NavigatedToNextLesson | 다음 레슨으로 이동됨 | 레슨 완료 팝업에서 [다음] 버튼 탭 |
| NavigatedToMainScreen | 메인화면으로 이동됨 | 레슨 완료 팝업에서 [종료] 버튼 탭 |
| LockedLessonPopupDisplayed | 잠금 레슨 안내 팝업이 표시됨 | 잠금 레슨 접근 시도 |
| BlockedLessonPopupDisplayed | 열람 불가 레슨 안내 팝업이 표시됨 | 열람 불가 레슨 접근 시도 |
| LessonUnlockNotificationDisplayed | 레슨 해금 알림이 표시됨 | 새 레슨 해금 시 |
| SessionExpanded | 세션이 확장됨 | 세션 제목 탭 |
| SessionCollapsed | 세션이 축소됨 | 세션 제목 탭 |
| SessionCompletionDisplayed | 세션 완료 상태가 표시됨 | 세션 내 모든 레슨 완료 |
| CompletionConfirmationPopupDisplayed | 완료 확인 팝업이 표시됨 | 완료 버튼 미클릭 후 메인화면 이동 시도 |
| TextSizeAdjustmentDialogOpened | 텍스트 크기 조절 팝업이 열림 | [AA] 버튼 탭 |
| TextSizePreviewUpdated | 텍스트 크기 미리보기가 업데이트됨 | 크기 조절 시 |
| TextSizeChanged | 텍스트 크기가 변경됨 | 텍스트 크기 설정 변경 |
| TextSizeAppliedAcrossLessons | 설정된 텍스트 크기가 모든 레슨에 적용됨 | 텍스트 크기 설정 저장 후 |
| StorageCheckPerformed | 단말기 용량 확인이 수행됨 | TTS 기능 사용 전 |
| InsufficientStorageAlertDisplayed | 용량 부족 알림이 표시됨 | 용량 부족 시 |
| TTSActivated | TTS(음성 읽기) 기능이 활성화됨 | TTS 기능 활성화 요청 |
| TTSDeactivated | TTS(음성 읽기) 기능이 비활성화됨 | TTS 기능 중지 요청 |
| TTSAudioDownloaded | TTS 음성 파일이 다운로드됨 | TTS 활성화 시 |
| TTSSentenceHighlighted | TTS 재생 중 현재 문장 강조됨 | TTS 문장 재생 (임상시험 버전 제외) |
| ContentImageTapped | 본문 내 이미지가 탭됨 | 이미지 탭 |
| ImageOverlayDisplayed | 이미지 오버레이 화면이 표시됨 | 본문 이미지 탭 |
| ImageOverlayClosed | 이미지 오버레이 화면이 닫힘 | 오버레이 배경 탭 |
| ImageZoomedIn | 이미지가 확대됨 | 두 손가락 줌인 제스처 |
| ImageZoomedOut | 이미지가 축소됨 | 두 손가락 줌아웃 제스처 |
| MaxZoomReached | 최대 확대 배율(2배)에 도달함 | 최대 확대 시도 |
| MinZoomReached | 최소 축소 배율(원본)에 도달함 | 최소 축소 시도 |
| ZoomStatePreserved | 확대/축소 상태가 유지됨 | 제스처 후 손가락 뗌 |
| ContentVideoTapped | 본문 내 영상이 탭됨 | 영상 탭 |
| VideoPlayerLaunched | 영상 플레이어가 실행됨 | 본문 영상 탭 |
| VideoPlaybackStarted | 영상 재생이 시작됨 | 영상 재생 시작 |
| VideoFullscreenModeActivated | 영상 전체화면 모드가 활성화됨 | 전체화면 모드 진입 |
| VideoPaused | 영상 재생이 일시정지됨 | 일시정지 버튼 탭 |
| VideoResumed | 영상 재생이 재개됨 | 재생 버튼 탭 |
| VideoPlaybackCompleted | 영상 재생이 완료됨 | 영상 끝까지 재생 |
| VideoPlayerClosed | 영상 플레이어가 종료됨 | 영상 종료 |
| ContentAudioTapped | 본문 내 오디오 클립이 탭됨 | 오디오 클립 재생 버튼 탭 |
| AudioClipPlaybackStarted | 오디오 클립 재생이 시작됨 | 오디오 클립 재생 시작 |
| AudioClipPaused | 오디오 클립 재생이 일시정지됨 | 오디오 클립 일시정지 버튼 탭 |
| AudioClipResumed | 오디오 클립 재생이 재개됨 | 오디오 클립 재생 버튼 탭 |
| AudioClipStopped | 오디오 클립 재생이 중단됨 | 오디오 클립 중단 버튼 탭 |
| AudioClipPlaybackCompleted | 오디오 클립 재생이 완료됨 | 오디오 클립 끝까지 재생 |
| AudioClipProgressDisplayed | 오디오 클립 재생 진행률이 표시됨 | 오디오 클립 재생 중 |
| AudioClipConflictResolved | 오디오 충돌이 해결됨 | 다른 오디오 재생 시 기존 오디오 중단 |
| AudioClipButtonStateReset | 오디오 클립 재생 버튼 상태가 초기화됨 | 오디오 클립 재생 완료 후 |
| ProgressBarDisplayed | 학습 진행률 프로그레스바가 표시됨 | 메인 화면 진입 |
| QuizStarted | 퀴즈가 시작됨 | 퀴즈 시작 버튼 탭 |
| QuizTypeDisplayed | 퀴즈 유형(O/X 또는 사지선다)이 표시됨 | 퀴즈 로드 |
| QuizAnswerSelected | 퀴즈 답변이 선택됨 | 답변 선택 |
| QuizNextButtonActivated | 퀴즈 [다음] 버튼이 활성화됨 | 답변 선택 완료 |
| QuizSubmitted | 퀴즈 답변이 제출됨 | [다음] 버튼 탭 |
| QuizResultViewed | 퀴즈 결과가 확인됨 | 결과 화면 확인 |
| QuizRetried | 퀴즈 재시도됨 | 다시 풀기 버튼 탭 |
| RelatedLessonAccessed | 연관 레슨으로 이동함 | 관련 레슨 이동 버튼 탭 |
| LearningSessionStarted | 학습 세션이 시작됨 | 레슨 화면 진입 |
| LearningSessionPaused | 학습 세션이 일시중지됨 | 앱 백그라운드 전환 |
| LearningSessionResumed | 학습 세션이 재개됨 | 앱 포그라운드 복귀 |
| LearningTimeTracked | 학습 시간이 추적됨 | 주기적 시간 업데이트 |
| LearningHistorySynced | 학습 이력이 동기화됨 | 네트워크 복구 시 |
정책(Policies)
시스템의 자동화된 비즈니스 규칙입니다.
레슨 관리 정책
백엔드 정책
- 사용자는 계정 생성 시 1번 레슨만 해금된 상태로 시작
- 레슨 1번부터 45번까지는 이전 레슨 완료 시 다음 레슨이 즉시 해금
- 마지막 46번 레슨은 45번 레슨 완료 후 치료 기간이 지난 시점에 해금
- 레슨 추천은 사용자의 학습 진도를 고려하여 제공
- 진도가 느린 경우, 완료하지 않은 콘텐츠 중 해금된 항목 우선 추천
- 수면탐구 레슨 45개 완료 시, 46번 레슨 해금 시점에 복습 퀴즈도 함께 제공
- 46일차부터 치료 완료일 전날까지 매일 하루에 1개의 퀴즈 제공
- 퀴즈 성능 데이터(정답률, 응답 시간 등)를 분석하여 개선 필요성 평가
- 레슨 업데이트 시 관련 퀴즈의 버전 업데이트 필요성 검토
- 퀴즈 버전 이력 관리 및 성능 비교 분석 지원
- 레슨 ID와 메타데이터만 관리하며, 실제 콘텐츠는 모바일 앱에서 관리
- 각 레슨을 single page로 구성된 단일 콘텐츠 단위로 관리
- 레슨들을 세션 단위로 그룹핑하여 관리
- 세션별 진행 상태를 추적하고 완료 여부를 관리
프론트엔드 정책
- 해금된 레슨만 접근 가능하도록 UI 제한
- 레슨의 5가지 상태를 시각적으로 구분하여 표시:
- 미해금(LOCKED) 상태: 잠금 아이콘 표시
- 열람 가능(UNLOCKED) 상태: 열람 가능 표시와 강조 표시
- 열람 불가(BLOCKED) 상태: 특정 조건으로 인한 제한 메시지 표시
- 열람 중(IN_PROGRESS) 상태: 현재 열람 중 표시
- 완료(COMPLETED) 상태: 완료 체크 표시
- 열람 불가(BLOCKED) 상태 레슨 탭 시 접근 불가 이유 안내 메시지 표시
- 세션별로 그룹화하여 UI에 표시
- 세션 단위로 확장/축소 가능한 목록 UI 제공
- 세션 완료 상태를 시각적 요소(체크 표시 등)로 표현
- 잠금 상태의 레슨 열람 시도 시 안내 팝업 표시
- 학습 완료 레슨을 체크 표시로 시각화
- 학습 진행률을 100% 기준으로 완료 비율 시각화
- 레슨 완료 시 다음 동작 선택 팝업 표시([다음] 또는 [종료])
- [다음] 버튼은 다음 레슨으로, [종료] 버튼은 메인화면으로 이동
- 완료 버튼 미클릭 후 메인화면 이동 시도 시 완료 확인 팝업 표시
- 레슨 완료 시 다음 레슨 해금 알림 제공
- 퀴즈 정답 선택 시 [다음] 버튼 활성화
- 퀴즈는 O/X 또는 사지선다형으로 제공되며 단일 선택만 가능
- 사용자는 항상 최신 활성 버전의 퀴즈를 받음
- 퀴즈 응답 시 퀴즈 버전 정보가 함께 기록됨
텍스트 및 접근성 정책
백엔드 정책
- 사용자의 텍스트 크기 설정 값을 저장하고 관리
- 사용자의 TTS 사용 설정을 저장하고 관리
- 지원 언어(독일어, 영어)를 관리
- 모든 기기에서 동일한 설정을 적용할 수 있도록 동기화
프론트엔드 정책
- [AA] 버튼 탭 시 텍스트 크기 조절 UI 제공
- 텍스트 크기 조절 UI에서 실시간 크기 미리보기 표시
- 한번 지정한 텍스트 크기를 레슨 전체에 동일하게 적용
- 기본 Body 텍스트 크기를 16pt로 설정
- 오프라인 상태에서도 마지막 설정 유지
- 설정 변경 시 즉시 저장 및 적용
- Lesson의 텍스트 크기를 시스템 접근성 폰트 크기와 별개로 관리
- TTS 사용 전 단말기 용량 확인하여 부족 시 알림
- [오디오] 버튼 탭 시 백엔드로부터 음성 파일 다운로드하여 재생
- TTS 활성화 시 재생 중인 문장을 파란색으로 강조 표시 (임상시험 버전에서는 제외)
- Background TTS 재생 기능은 제공하지 않음
- 재생 속도 옵션(기본, 느림, 빠름) 제공 (임상시험 버전에서는 제외)
- TTS 기본 설정(비활성화, 독일어, 보통 속도) 적용 (임상시험 버전에서는 제외)
- 재생 제어(시작, 일시정지, 중단) 기능 제공 (임상시험 버전에서는 제외)
미디어 관리 정책
백엔드 정책
- 이미지 파일의 메타데이터와 참조 정보만 관리하며, 실제 미디어 파일은 모바일 앱에서 관리
- 영상 및 오디오 클립의 경우 실제 미디어 파일은 Backend에서 관리되며 메타데이터에 download URL을 제공
- 레슨별 미디어 자원 목록과 식별자 제공
- 미디어가 속한 레슨이 해금된 사용자만 접근 가능하도록 제어
- 미디어 파일 메타데이터에서 개인정보(EXIF 데이터 등) 자동 제거
프론트엔드 정책
이미지 관리
- 이미지 파일을 로컬에 저장하고 관리
- 백엔드로부터 받은 미디어 식별자를 로컬 파일과 매핑
- 본문 내 이미지 탭 시 이미지 오버레이 화면을 전체 화면으로 표시
- 이미지 오버레이 화면에서 배경 탭 시 본문 화면으로 돌아가기
- 이미지 오버레이 화면에서 두 손가락 제스처로 이미지 확대/축소 기능 제공
- 이미지 최대 확대 배율을 원본의 2배로 제한
- 이미지 최소 축소 배율을 원본 크기로 제한
- 이미지 확대/축소 상태를 제스처 후에도 유지
영상 관리
- Backend에서 제공하는 download URL을 통해 영상을 스트리밍 또는 다운로드하여 관리
- 영상 재생에 iOS 기본 비디오 플레이어 사용
- 지원 형식(MP4, MOV)의 영상 재생
- 영상 플레이어는 전체화면 모드만 지원
- Backend에서 제공하는 download URL을 통해 영상 재생
오디오 클립 관리
- Backend에서 제공하는 download URL을 통해 오디오 클립을 스트리밍 또는 다운로드하여 관리
- 레슨 본문 내에 삽입되어 해당 레슨에 대한 부가 설명 제공
- 오디오 클립은 TTS와 구별되는 미리 녹음된 콘텐츠
- 재생 제어 기능 제공: 재생, 일시정지, 중단
- 재생 상태 및 진행률을 시각적으로 표시
- 다른 오디오(TTS 포함) 재생 시 기존 오디오 자동 중단으로 충돌 방지
- 지원 형식(MP3, AAC, WAV)의 오디오 클립 재생
- 재생 완료 후 재생 버튼 상태 자동 초기화
학습 이력 관리 정책
백엔드 정책
- 학습 시작과 종료는 명시적으로 기록되어야 하며, 비정상 종료 시에도 추적 가능해야 함
- 동일 레슨의 반복 학습도 각각 별도의 이력으로 저장
- 학습 소요시간은 실제 활성 시간만 계산 (백그라운드 시간 제외)
- 5분 미만의 학습은 '미완료' 상태로 자동 분류
- 학습 통계는 캐싱하여 성능 최적화
- 30일 이상 된 상세 학습 이력은 집계 데이터로 변환하여 보관
프론트엔드 정책
- 레슨 화면 진입 시 즉시 학습 시작 이벤트 전송
- 10초마다 학습 진행 상태를 서버에 업데이트
- 앱 백그라운드 전환 시 자동으로 학습 일시중지 처리
- 네트워크 오류 시 학습 이력을 로컬 스토리지에 저장
- 네트워크 복구 시 저장된 학습 이력 자동 동기화
- 학습 이력을 로컬 배열에 수집하고 다음 조건 시 배치 제출:
- 배치 크기 50개 이상 또는
- 마지막 제출 후 5분 경과 또는
- 레슨 완료 시점 또는
- 앱 백그라운드 전환 시
- 배치 제출 실패 시 지수 백오프(exponential backoff) 재시도 로직 적용
- 네트워크 상태에 따라 배치 크기와 제출 주기를 동적 조절 (WiFi: 크게, 셀룰러: 작게)
명령(Commands)
도메인 이벤트를 발생시키는 사용자 의도나 시스템 동작입니다.
1. 수면탐구 레슨 명령
1.1 백엔드 명령
| 명령 | 설명 | 영향 |
|---|---|---|
| UnlockLesson | 레슨 해금 처리 | LessonUnlocked 이벤트 발생 |
| RecommendLesson | 레슨 추천 생성 | LessonRecommended 이벤트 발생 |
| UpdateLessonProgress | 레슨 진행률 업데이트 | LessonProgressUpdated 이벤트 발생 |
| GetLearningProgress | 학습 진행률 조회 | LearningProgressReported 이벤트 발생 |
| ChangeLessonStatus | 레슨 상태 변경 | LessonStatusChanged 이벤트 발생 |
| TrackLessonAccess | 레슨 접근 기록 | LessonAccessTracked 이벤트 발생 |
| UpdateSessionProgress | 세션 진행률 업데이트 | SessionProgressUpdated 이벤트 발생 |
| CheckLessonCompletion | 레슨 완료 상태 확인 | 필요시 AllLessonsCompleted 이벤트 발생 |
| UnlockFinalLesson | 마지막 레슨 해금 처리 | FinalLessonUnlocked 이벤트 발생 |
| UnlockQuiz | 퀴즈 해금 처리 | QuizUnlocked 이벤트 발생 |
| GenerateDailyQuiz | 일일 퀴즈 생성 | DailyQuizGenerated 이벤트 발생 |
| RecordQuizAttempt | 퀴즈 시도 기록 | QuizAttempted 이벤트 발생 |
| RecordQuizResult | 퀴즈 결과 기록 | QuizResultRecorded 이벤트 발생 |
| CreateQuizVersion | 퀴즈 새 버전 생성 | QuizVersionCreated 이벤트 발생 |
| ActivateQuizVersion | 퀴즈 버전 활성화 | QuizVersionActivated 이벤트 발생 |
| AnalyzeQuizPerformance | 퀴즈 성능 분석 | QuizPerformanceAnalyzed 이벤트 발생 |
| GetAvailableLessons | 이용 가능한 레슨 목록 조회 | 해금된 레슨 목록 반환 |
| GetDailyQuiz | 일일 퀴즈 조회 | 오늘의 퀴즈 내용 반환 |
| SaveTextSizeSetting | 텍스트 크기 설정 저장 | TextSizeSettingSaved 이벤트 발생 |
| SaveTTSSetting | TTS 설정 저장 | TTSSettingSaved 이벤트 발생 |
| ValidateMediaAccess | 미디어 접근 권한 검증 | MediaAccessValidated 이벤트 발생 |
| StartLessonLearning | 레슨 학습 시작 | LessonLearningStarted 이벤트 발생 |
| EndLessonLearning | 레슨 학습 종료 | LessonLearningEnded 이벤트 발생 |
| PauseLessonLearning | 레슨 학습 일시중지 | LessonLearningPaused 이벤트 발생 |
| ResumeLessonLearning | 레슨 학습 재개 | LessonLearningResumed 이벤트 발생 |
| CalculateLearningMetrics | 학습 통계 계산 | LearningMetricsCalculated 이벤트 발생 |
| AnalyzeLearningPattern | 학습 패턴 분석 | LearningPatternAnalyzed 이벤트 발생 |
| GetLearningHistory | 학습 이력 조회 | 학습 이력 데이터 반환 |
| GetLessonMetrics | 레슨별 통계 조회 | 레슨 통계 데이터 반환 |
| ProcessLearningHistoryBatch | 학습 이력 배치 처리 | LearningHistoryBatchProcessed 이벤트 발생 |
| ValidateLearningHistoryBatch | 학습 이력 배치 검증 | 유효성 검사 결과 반환 |
1.2 프론트엔드 명령
| 명령 | 설명 | 영향 |
|---|---|---|
| ViewLesson | 레슨 열람 | LessonViewed 이벤트 발생 |
| MarkLessonAsComplete | 레슨 완료 표시 | LessonCompletionMarked 이벤트 발생 |
| DisplayLessonCompletionPopup | 레슨 완료 팝업 표시 | LessonCompletionPopupDisplayed 이벤트 발생 |
| NavigateToNextLesson | 다음 레슨으로 이동 | NavigatedToNextLesson 이벤트 발생 |
| NavigateToMainScreen | 메인화면으로 이동 | NavigatedToMainScreen 이벤트 발생 |
| DisplayLockedLessonPopup | 잠금 레슨 안내 팝업 표시 | LockedLessonPopupDisplayed 이벤트 발생 |
| DisplayBlockedLessonPopup | 열람 불가 레슨 안내 팝업 표시 | BlockedLessonPopupDisplayed 이벤트 발생 |
| DisplayLessonUnlockNotification | 레슨 해금 알림 표시 | LessonUnlockNotificationDisplayed 이벤트 발생 |
| ExpandSession | 세션 확장 | SessionExpanded 이벤트 발생 |
| CollapseSession | 세션 축소 | SessionCollapsed 이벤트 발생 |
| DisplaySessionCompletion | 세션 완료 상태 표시 | SessionCompletionDisplayed 이벤트 발생 |
| DisplayCompletionConfirmationPopup | 완료 확인 팝업 표시 | CompletionConfirmationPopupDisplayed 이벤트 발생 |
| OpenTextSizeAdjustmentDialog | 텍스트 크기 조절 팝업 열기 | TextSizeAdjustmentDialogOpened 이벤트 발생 |
| UpdateTextSizePreview | 텍스트 크기 미리보기 업데이트 | TextSizePreviewUpdated 이벤트 발생 |
| ChangeTextSize | 텍스트 크기 변경 | TextSizeChanged 이벤트 발생 |
| ApplyTextSizeAcrossLessons | 텍스트 크기 전체 레슨 적용 | TextSizeAppliedAcrossLessons 이벤트 발생 |
| CheckStorage | 단말기 용량 확인 | StorageCheckPerformed 이벤트 발생 |
| DisplayInsufficientStorageAlert | 용량 부족 알림 표시 | InsufficientStorageAlertDisplayed 이벤트 발생 |
| ToggleTTS | TTS 기능 토글 | TTSActivated 또는 TTSDeactivated 이벤트 발생 |
| DownloadTTSAudio | TTS 음성 파일 다운로드 | TTSAudioDownloaded 이벤트 발생 |
| HighlightTTSSentence | TTS 재생 중 문장 강조 | TTSSentenceHighlighted 이벤트 발생 |
| TapContentImage | 본문 이미지 탭 | ContentImageTapped 이벤트 발생 |
| DisplayImageOverlay | 이미지 오버레이 화면 표시 | ImageOverlayDisplayed 이벤트 발생 |
| CloseImageOverlay | 이미지 오버레이 화면 닫기 | ImageOverlayClosed 이벤트 발생 |
| ZoomInImage | 이미지 확대 | ImageZoomedIn 이벤트 발생 |
| ZoomOutImage | 이미지 축소 | ImageZoomedOut 이벤트 발생 |
| CheckMaxZoom | 최대 확대 배율 확인 | 필요 시 MaxZoomReached 이벤트 발생 |
| CheckMinZoom | 최소 축소 배율 확인 | 필요 시 MinZoomReached 이벤트 발생 |
| PreserveZoomState | 확대/축소 상태 유지 | ZoomStatePreserved 이벤트 발생 |
| TapContentVideo | 본문 영상 탭 | ContentVideoTapped 이벤트 발생 |
| LaunchVideoPlayer | 영상 플레이어 실행 | VideoPlayerLaunched 이벤트 발생 |
| StartVideoPlayback | 영상 재생 시작 | VideoPlaybackStarted 이벤트 발생 |
| ActivateVideoFullscreen | 영상 전체화면 모드 활성화 | VideoFullscreenModeActivated 이벤트 발생 |
| PauseVideo | 영상 일시정지 | VideoPaused 이벤트 발생 |
| ResumeVideo | 영상 재생 재개 | VideoResumed 이벤트 발생 |
| CompleteVideoPlayback | 영상 재생 완료 | VideoPlaybackCompleted 이벤트 발생 |
| CloseVideoPlayer | 영상 플레이어 종료 | VideoPlayerClosed 이벤트 발생 |
| TapContentAudio | 본문 오디오 클립 탭 | ContentAudioTapped 이벤트 발생 |
| StartAudioClipPlayback | 오디오 클립 재생 시작 | AudioClipPlaybackStarted 이벤트 발생 |
| PauseAudioClip | 오디오 클립 일시정지 | AudioClipPaused 이벤트 발생 |
| ResumeAudioClip | 오디오 클립 재생 재개 | AudioClipResumed 이벤트 발생 |
| StopAudioClip | 오디오 클립 재생 중단 | AudioClipStopped 이벤트 발생 |
| CompleteAudioClipPlayback | 오디오 클립 재생 완료 | AudioClipPlaybackCompleted 이벤트 발생 |
| DisplayAudioClipProgress | 오디오 클립 진행률 표시 | AudioClipProgressDisplayed 이벤트 발생 |
| ResolveAudioClipConflict | 오디오 충돌 해결 | AudioClipConflictResolved 이벤트 발생 |
| ResetAudioClipButtonState | 오디오 클립 버튼 상태 초기화 | AudioClipButtonStateReset 이벤트 발생 |
| DisplayProgressBar | 진행률 표시 | ProgressBarDisplayed 이벤트 발생 |
| StartQuiz | 퀴즈 시작 | QuizStarted 이벤트 발생 |
| DisplayQuizType | 퀴즈 유형 표시 | QuizTypeDisplayed 이벤트 발생 |
| SelectQuizAnswer | 퀴즈 답변 선택 | QuizAnswerSelected 이벤트 발생 |
| ActivateQuizNextButton | 퀴즈 다음 버튼 활성화 | QuizNextButtonActivated 이벤트 발생 |
| SubmitQuiz | 퀴즈 제출 | QuizSubmitted 이벤트 발생 |
| ViewQuizResult | 퀴즈 결과 확인 | QuizResultViewed 이벤트 발생 |
| RetryQuiz | 퀴즈 재시도 | QuizRetried 이벤트 발생 |
| NavigateToRelatedLesson | 연관 레슨으로 이동 | RelatedLessonAccessed 이벤트 발생 |
| FetchLessonList | 레슨 목록 가져오기 | 서버 API 호출 |
| FetchLessonDetails | 레슨 상세 내용 가져오기 | 서버 API 호출 |
| SendCompletionStatus | 완료 상태 전송 | 서버 API 호출 |
| FetchQuiz | 퀴즈 가져오기 | 서버 API 호출 |
| SendQuizResult | 퀴즈 결과 전송 | 서버 API 호출 |
| TrackLearningTime | 학습 시간 추적 | LearningTimeTracked 이벤트 발생 |
| SyncLearningHistory | 학습 이력 동기화 | LearningHistorySynced 이벤트 발생 |
| SaveLocalLearningData | 로컬 학습 데이터 저장 | 오프라인 데이터 저장 |
| LoadLocalLearningData | 로컬 학습 데이터 로드 | 오프라인 데이터 복구 |
| CollectLearningHistoryToBatch | 학습 이력을 배치에 수집 | LearningHistoryBatchCollected 이벤트 발생 |
| SubmitLearningHistoryBatch | 학습 이력 배치 제출 | LearningHistoryBatchSubmitted 이벤트 발생 |
| RetryLearningHistoryBatch | 학습 이력 배치 재시도 | LearningHistoryBatchRetried 이벤트 발생 |
| AdjustBatchSubmissionStrategy | 배치 제출 전략 조정 | 동적 배치 크기/주기 변경 |
액터(Actors)
시스템과 상호작용하는 주체들입니다.
사용자
- 레슨을 열람하고 학습하는 주체
- 텍스트 크기 및 TTS 설정을 조정
- 미디어 콘텐츠(이미지, 영상)를 확인
- 퀴즈 풀이 및 결과 확인
시스템
- 레슨 해금 및 추천 처리
- 학습 진행률 계산 및 관리
- 세션 및 레슨 상태 관리
- 퀴즈 생성 및 결과 평가
- 사용자 설정 저장 및 동기화
애그리게잇(Aggregates)
도메인 객체들의 클러스터로, 트랜잭션 일관성 경계를 형성합니다.
수면탐구 레슨
- 레슨 ID
- 타이틀
- 내용 (텍스트, 이미지, 영상) 메타데이터
- 해금 상태
- 학습 완료 상태
- 관련 세션 정보
- 레슨 순서
세션
- 세션 ID
- 세션명
- 포함된 레슨 목록
- 세션 완료 상태
- 세션 순서
학습 진행
- 사용자 ID
- 완료한 레슨 목록
- 전체 진행률
- 마지막 학습 일시
- 학습 시작일
- 마지막 접근 시간
사용자 설정
- 사용자 ID
- 텍스트 크기 설정
- TTS 설정
- 지원 언어 설정
- 재생 속도 설정
퀴즈
- 퀴즈 ID
- 버전 번호
- 문제 유형 (OX/객관식)
- 문제 내용
- 선택지 목록
- 정답
- 관련 레슨 ID
- 활성화 상태
- 생성 일시
- 업데이트 일시
퀴즈 응시
- 응시 ID
- 사용자 ID
- 퀴즈 ID
- 퀴즈 버전
- 선택한 답변
- 정답 여부
- 응시 일시
미디어 자원
- 미디어 ID
- 미디어 타입 (이미지/영상/오디오)
- 레슨 ID
- 파일 식별자
- 메타데이터
- 재생 시간 (오디오/영상의 경우)
변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|---|---|---|
| 0.1.0 | 2025-04-03 | bok@weltcorp.com | 최초 작성 |
| 0.2.0 | 2025-05-23 | bok@weltcorp.com | requirements.md 변경사항 반영 - 하이라이트/사용자 입력 기능 제거, 세션 관리, 업데이트된 TTS/미디어 관리 기능 추가 |
| 0.2.1 | 2025-06-09 | bok@weltcorp.com | 퀴즈 버전 관리 기능 추가 - 퀴즈 버전 이벤트, 명령, 정책 추가 |
| 0.3.0 | 2025-06-10 | bok@weltcorp.com | 오디오 클립 기능 추가 - 레슨 본문 내 부가 설명용 오디오 재생 기능 이벤트, 명령, 정책 추가 |
| 0.4.0 | 2025-06-10 | bok@weltcorp.com | 레슨 학습 이력 추적 기능 추가 - 학습 시작/종료/일시중지 이벤트, 학습 시간 추적 명령, 학습 이력 관리 정책 추가 |