📊 개발 단계 및 우선순위
해당하는 우선순위에 체크해 주세요.
🎯 도메인 연관 관계 및 완료 조건 (Definition of Done)
이 이슈가 완료되기 위해 충족해야 하는 조건들을 나열해 주세요.
💻 상세 작업 내용
클린 아키텍처(Clean Architecture) 구조에 맞춰 작업이 발생하는 계층에 체크하고 세부 내용을 작성해 주세요.
🚨 검증 및 예외 처리 (TestCode)
정상 작동뿐만 아니라, 잘못된 값이나 예외 상황에 대한 처리를 꼼꼼히 확인해 주세요.
🔗 참고 자료
📊 개발 단계 및 우선순위
P0: 서비스 핵심 동작P1: 운영 및 확장 기능P2: 부가적인 고도화 기능🎯 도메인 연관 관계 및 완료 조건 (Definition of Done)
연관 도메인: learning_activity설명: 영상 재생/완료 처리 흐름에 성공/실패를 집계하는 운영 metric이 없어, 장애(수강권 검증 실패, 완료 조건 미충족 등)가 얼마나 자주 발생하는지 사후에 로그를 뒤지지 않으면 알 수 없다.study_timer.session.result에 적용한 것과 동일한 패턴(성공/실패 카운터 + errorCode 태그)을 적용한다.CompleteVideoService,VideoAccessService.validatePlayable(),GetCourseProgressService3곳의 성공/실패가 카운터로 집계된다.ErrorCode로 실패했는지 구분해서 집계할 수 있다 (VIDEO_COMPLETION_CONDITION_NOT_MET,COURSE_NOT_PUBLISHED,ENROLLMENT_REQUIRED,VIDEO_NOT_FOUND등).study_timer.session.result처럼learning_activity.access.result전용 컴포넌트), 아니면 서비스 3곳에 인라인으로 직접 기록할지 — 어느 쪽으로 갈지 PR 리뷰에서 확정.💻 상세 작업 내용
Model/Policy: 해당 없음 (도메인 로직 변경 없음)UseCase/Command: 해당 없음Service:CompleteVideoService,VideoAccessService,GetCourseProgressService에 성공/실패 metric 기록 추가 (study_timer도메인에 적용한 try/finally +errorCode패턴 재사용)Port/Adapter: 해당 없음Repository: 해당 없음Controller: 해당 없음response/request: 해당 없음 (응답 스펙 변경 없음)🚨 검증 및 예외 처리 (TestCode)
BusinessException) 시 실패 카운터가 1 증가하고 에러코드별로 구분되는지 검증repository.save()(또는 동급 저장 호출) 직전이 아니라 성공 반환 지점 이후에 success 플래그가 세팅되는지 확인 — PR #255에서 발견된 "save 실패가 성공으로 집계되는" 버그 재발 방지🔗 참고 자료
feature/study-timer-resume), PR feature 스터디 타이머 메트릭 설정 #255(feature/study-timer-metric)