woowacourse-teams / 2024-mouda

17 stars 6 forks source link

알림 재전송시 발생하는 오류 해결 및 로깅 개선 #696

Closed pricelees closed 14 hours ago

pricelees commented 2 days ago

PR의 목적이 무엇인가요?

QA에서 확인한 알림 재전송 과정에서 발생하는 IndexOutOfBoundsException 해결 및 로깅 개선

이슈 ID는 무엇인가요?

설명

오류 해결

기존의 알림 전송 과정을 대략적으로 보면 다음과 같습니다.

  1. 메시지를 전송한다.
  2. 실패하는 응답 중 404(UNREGISTERED)에 해당되는 토큰을 제거한다.
  3. 제거되고 남은 토큰과 FCM 응답 객체를 FcmResponseHandler에 넣어서 재전송 처리를 시도한다.

이 과정에서 제거되고 남은 토큰과 FCM 응답 객체에 있는 응답의 수가 일치하지 않아 발생하는 예외를 해결했습니다. 등록되지 않은 토큰을 제거한 뒤 재시도하는게 아닌, 일단 재시도 하고 재시도 과정이 끝나면 한 번에 지우도록 수정했어요.

로깅 개선

FCM에서 예외가 발생하는 상황은 지금까지는 거의 없었던 것 같아요. 정말 운이 좋게도 지난 QA에서 알림 예외가 발생해서 로그를 천천히 확인해봤는데 에러 로그를 조금 더 친절하게 작성할 수 있겠다는 생각이 들어 수정했어요.

[기존] 알림 제목 + 실패한 토큰

[수정] 알림 제목 + 알림 내용(바디) + 실패한 토큰의 memberId와 tokenId

문자열 토큰이 길이가 꽤나 길어서 로그에서 가독성도 안좋고, 누구의 토큰인지 확인할 때 DB에 일일이 복붙해서 찾아야 하는 번거로움이 있는 것 같아 ID값을 로깅하도록 수정했습니다.

이 과정에서 DB 조회가 한번 더 들어가긴 하지만, FCM 예외는 일반적으로 잘 발생하지 않아 성능에 큰 영향은 주지 않을 것이라 판단했습니다.

질문 혹은 공유 사항 (Optional)

알림 재전송 쪽은 아마 이해하기 쉽지 않을 것이라 생각합니다.. 그래서 내용은 최대한 풀어 썼는데, 코드상에서 궁금한게 있으면 질문 남겨주세요.