Skip to content

[FEAT/#502] 인증 도메인 성공/실패 메트릭 수집 추가 - #503

Open
eeeeeaaan wants to merge 1 commit into
developfrom
feat/#502-certification-metric
Open

eeeeeaaan wants to merge 1 commit into
developfrom
feat/#502-certification-metric

Conversation

@eeeeeaaan

@eeeeeaaan eeeeeaaan commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

#️⃣연관된 이슈

close #502

📝작업 내용

개인/그룹 QR 인증의 성공·실패 횟수를 Micrometer 카운터로 수집해 Prometheus/Grafana에서 확인할 수 있도록 했습니다. 기존에는 그룹 인증 실패가 failure 하나로 뭉쳐 있었고 개인 인증에는 메트릭이 없어, 운영 중 인증 실패 추이와 원인을 알 수 없었습니다.

  • 개인 QR 인증: 성공/실패 카운터 추가
  • 그룹 QR 인증: 카운터를 컨트롤러에서 서비스로 이동하고, 실패를 원인(reason)별로 구분
  • 컨트롤러는 예상치 못한 예외만 집계하도록 정리해 이중 집계 방지
  • 카운터 검증 테스트 추가

🔎코드 설명(스크린샷(선택))

핵심 변경 사항

메트릭 명세

메트릭 result reason
certification.personal.result success none
failure store_not_found
certification.group.result success (진행 중 1명 성공), completed (인원 충족) none
failure no_such_session, doubled, mismatch, store_not_found, unexpected
  • CertificationServiceImpl: handleCertification의 각 성공/실패 지점에 countGroupSuccess, countGroupFailure 호출 추가. certificatePersonal에도 카운터 추가
  • GroupCertificationController: result.type() 기반 집계를 제거. GeneralException이 아닌 예외만 reason=unexpected로 집계 (알려진 실패는 서비스가 이미 집계하므로)
  • 같은 메트릭 이름은 항상 result, reason 두 태그 키를 모두 사용 (Prometheus는 같은 이름의 메트릭이 동일한 태그 키 집합을 요구함)
  • CertificationServiceTest: @Spy SimpleMeterRegistry 추가로 기존 테스트 보완, 개인/그룹 성공·실패 케이스 6개 추가

💬고민사항 및 리뷰 요구사항 (Optional)

리스크, 테스트 누락, 배포 고려사항

  • mismatch 집계 방식 변경: 기존엔 result=mismatch로 집계됐으나 이제 result=failure, reason=mismatch입니다. 기존에 이 메트릭을 쓰는 대시보드/알람은 없음을 Grafana에서 확인했습니다.
  • 성공 카운터 증가 시점: 클래스 레벨 @Transactional 안에서 커밋 전에 증가합니다. 커밋 실패 시 성공으로 잘못 집계될 수 있으나, 개인 인증은 save 하나뿐이라 가능성이 매우 낮다고 판단해 ChatServiceImpl의 incrementAfterCommit 방식은 적용하지 않았습니다. 의견 부탁드립니다.
  • 테스트 누락: 컨트롤러의 unexpected 집계는 WebSocket 컨트롤러 테스트가 필요해 이번 범위에서 제외했습니다. expireSession(세션 만료)도 집계 대상에 포함하지 않았습니다.
  • 배포 후 확인: 카운터는 처음 실행될 때 생성되므로 Grafana에서 certification_ 검색은 인증을 한 번 수행한 뒤부터 가능합니다.

비고 (Optional)

  • 그룹 세션 완료 소요시간 메트릭은 의미 있는 지표가 아니라고 판단해 이번 범위에서 제외했습니다. 기존 certification.group.duration 타이머(WebSocket 메시지 처리시간)는 그대로 유지합니다.
  • "그룹 QR WebSocket fan-in 구간을 트레이스 도입 시 최우선 대상으로 표시" 항목은 이번 PR에 포함하지 않았고 별도로 진행합니다.

- 개인 QR 인증 성공/실패 카운터(certification.personal.result) 추가
- 그룹 QR 인증 카운터를 컨트롤러에서 서비스로 이동하고 실패 사유별(reason) 태그 구분
- 컨트롤러는 예상치 못한 예외만 unexpected로 집계해 이중 집계 방지
- 메트릭 검증 테스트 추가 및 MeterRegistry 주입에 따른 기존 테스트 보완
@coderabbitai

coderabbitai Bot commented Oct 6, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Repository: ASSU-dev/ASSU_BE/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b52c3a94-5314-4d6d-a484-4e67fbb2b5c2
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@2ghrms 2ghrms left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

집계용 메서드를 묶은게 좋아보이네요~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT/#502] 인증(Certification) 도메인 성공/실패 메트릭 수집 추가

2 participants