Skip to content

[FEAT] 순공 타이머 세션 상태 변경 흐름 성공/실패 metric 추가 #254

Description

@dlxodus02

📊 개발 단계 및 우선순위

해당하는 우선순위에 체크해 주세요.

  • P0 : 서비스 핵심 동작
  • P1 : 운영 및 확장 기능
  • P2 : 부가적인 고도화 기능

🎯 도메인 연관 관계 및 완료 조건 (Definition of Done)

이 이슈가 완료되기 위해 충족해야 하는 조건들을 나열해 주세요.

  • 연관 도메인 : study_timer
  • 설명 : 순공시간 세션의 상태 변경(start/pause/heartbeat/end/resume) 흐름에 성공/실패를 집계하는 운영 metric이 없어, 장애가 발생해도 사후에 로그를 일일이 뒤져야만 알 수 있다. 5개 메서드에 공통 metric 훅을 추가해 관측 가능하게 만든다.
  • start/pause/heartbeat/end/resume 각각의 성공/실패 카운터가 기록된다.
  • 실패 시 어떤 ErrorCode로 실패했는지 구분해서 집계할 수 있다 (예: STUDY_TIMER_SESSION_NOT_PAUSED, STUDY_TIMER_LOCK_TIMEOUT 등).
  • metric 기록 로직 자체에서 예외가 나도 핵심 트랜잭션(세션 저장)에는 영향이 없다.
  • 5개 메서드에 동일한 패턴(중복 코드 없이)으로 적용된다 — 공통 데코레이터 또는 AOP/이벤트 리스너 방식 검토.
  • Grafana/Prometheus 대시보드에서 조회 가능한지 확인 (기존 모니터링 인프라 — 강현 W4 작업과 연동 여부 확인 필요).

💻 상세 작업 내용

클린 아키텍처(Clean Architecture) 구조에 맞춰 작업이 발생하는 계층에 체크하고 세부 내용을 작성해 주세요.

  • Model / Policy: 해당 없음 (도메인 로직 변경 없음)
  • UseCase / Command: 해당 없음
  • Service: StartStudyTimerSessionService, PauseStudyTimerSessionService, SaveStudyTimerHeartbeatService, EndStudyTimerSessionService, ResumeStudyTimerSessionService — 공통 metric 기록 지점 추가 (개별 try/catch 중복보다는 AOP @Around 또는 공통 decorator 권장)
  • Port / Adapter: 해당 없음
  • Repository: 해당 없음
  • Controller: 해당 없음
  • response / request: 해당 없음 (응답 스펙 변경 없음)

🚨 검증 및 예외 처리 (TestCode)

정상 작동뿐만 아니라, 잘못된 값이나 예외 상황에 대한 처리를 꼼꼼히 확인해 주세요.

  • 각 메서드 성공 시 성공 카운터가 1 증가하는지 검증
  • 각 메서드 실패(BusinessException) 시 실패 카운터가 1 증가하고 에러코드별로 구분되는지 검증
  • metric 기록 로직에서 예외가 발생해도 세션 저장(repository.save)은 정상 커밋되는지 검증 (metric 격리 확인)
  • 동시 요청 상황에서 카운터 누락/중복 집계가 없는지 확인

🔗 참고 자료

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions