ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [번역 서비스] 개선 - 번역 실패 모니터링 및 재처리
    Work 2025. 1. 9. 10:06

    문제점 정의

    번역 로직 플로우는 아래와 같다.

     

    현재 구조는 아래 3가지 문제점을 가지고 있다.

    • 모든 번역 실패 케이스에 대한 수동 재처리 필요
      • 일시적인 네트워크 에러 등 일정시간 이후 복구가 가능한 경우 자동 재처리 적용 가능함
    • 번역 요청 유실 가능성
      • 처리 중 서버가 다운되었을 때 에러 로깅조차 남길 수 없음
      • 번역 미완료 건을 확인하는 로직이 없어 서버 재시작 이후에도 번역을 다시 수행할 수 없음
    • 번역 결과 콜백 미수신 모니터링 불가능
      • 번역 콜백 미수신 확인 로직이 없어 모니터링 불가능함

     

    개선 방향성

    • 번역 자동 재처리를 통해 수동 조치의 비효율성을 개선한다.
      • 정해진 재처리 횟수를 초과한 경우 원인을 파악하고 번역을 수동으로 생성한다.
    • 유실되는 번역 요청이 없도록 한다.
    • 번역 결과 콜백 미수신 모니터링이 가능하도록 한다.

     

    작업 내용

    1) 모니터링 대상 확인

    번역 로직은 크게 번역 요청과 번역 저장으로 나뉘어진다.

    (외부 서비스로 번역 요청을 하면, 외부 서비스에서 콜백 API 호출하여 번역 결과 전송해주는 형태)

     

    모니터링 대상을 아래 2가지로 구분하였다.

    1. 번역 요청 실패 게시글

    2. 번역 결과 콜백 미수신 및 저장 실패 게시글

     

    2) 모니터링 및 재처리 아키텍처 설계

    Case1 : 번역 요청 실패 게시글

    • 스케줄러가 5분마다 게시글 조회하여 Kafka로 번역 재처리 메시지 발행
    • 컨슈머가 메시지 컨슘 후 번역 재처리 수행
      • 재처리 실패했을 때 Kafka retry topic으로 번역 재처리 메시지 발행
      • 재시도 횟수 : 2회, 재시도 간격 : 5초, 10초
        • 대부분 외부 통신이 실패/지연 원인이므로 외부 서비스에 회복 시간을 주기 위해 delay time 부여
    • 번역 재시도 횟수 초과한 경우 Kafka dead letter topic으로 메시지 발행하여 알림 전송 및 수동 조치

     

    Case2 : 번역 결과 콜백 미수신 및 저장 실패 게시글

    • 스케줄러가 5분마다 게시글 조회하여 Kafka로 번역 실패 이벤트 발행
    • 번역 재처리하지 않은 이유
      • 번역 결과 콜백 미수신 원인은 아래와 같음
        • 외부 서버에서 콜백을 보내지 않았을 때
        • 외부 서버에서 콜백 전송했으나 내 서버에서 콜백 수신 못했을 때
      • 위와 같은 원인일 때 번역 재처리를 하기보다 바로 에러 알림을 전송해 원인을 파악하는 것이 적절하다고 판단하여 재처리 수행하지 않음

     

    작업 검증

    • 번역 수동 재처리 작업 횟수 감소 : 번역 요청 실패한 경우 자동 재처리를 통해 수동 작업 횟수 감소
    • 유실되는 번역 요청 없음 : 번역 실패 건들을 일정 간격으로 조회해 재처리 혹은 알림 전송
    • 번역 결과 콜백 미수신 모니터링 가능

     

    마주쳤던 고민/이슈

    댓글

Designed by Tistory.