검색 엔진 페이지 등록 무한 대기 버그 수정
목차
신규 프로필이나 콘텐츠가 생성될 때 외부 검색 엔진에 즉시 알려서 빠르게 인덱싱되도록 하는 bot/indexnow-ping.js 파일을 수정했다. 핵심은 외부 API 호출 시 응답이 없어서 무한 대기하던 문제를 12초 타임아웃으로 해결한 것.
외부 API 호출의 무한 대기 문제
신규 페이지나 엔티티가 생성되면 비동기로 외부 인덱싱 서비스를 호출한다. 정상적으로 응답이 오면 좋은데, 네트워크 문제나 상대 서버 이슈로 연결이 끊어질 수 있다. ECONNRESET처럼 원격에서 연결을 닫은 경우, 타임아웃이 없으면 우리쪽 봇 프로세스는 계속 응답을 기다린다(hang).
봇은 보통 배치나 비동기 큐 처리를 담당하는데, 한 작업이 무한 대기하면 다음 작업들이 쌓인다. 오래되면:
- 좀비 프로세스로 메모리 낭비
- 신규 프로필은 DB에 저장됐는데 검색 엔진에는 등록 안 됨
- 팀이 "왜 검색이 안 될까?" 는 문제 해결에 시간 낭비
12초 타임아웃의 의사결정
12초는 여러 고려사항을 반영한 것:
- 정상 응답: 대부분 1-3초 이내니까 12초면 충분한 여유
- 네트워크 지연: 가끔 느린 네트워크도 처리 가능
- 빠른 감지: 12초 이상 응답 없으면 더 이상 기다리지 않음
- 리소스 보호: 좀비 프로세스 방지
이런 류의 타임아웃 값은 정답이 없다. 너무 짧으면 정상인데 타임아웃되고(false positive), 너무 길면 사용자나 시스템이 답답해진다. 팀이 API 응답 시간 데이터(latency 분포)를 가지고 있다면 99percentile 정도를 기준으로 설정하는 게 좋다. 지금은 보수적으로 12초를 잡고, 모니터링하면서 필요하면 조정할 수 있다.
왜 이 작업이 우선순위였나
정기적으로 "새 프로필 검색에 보이지 않는다" 는 보고가 들어왔다. 원인 분석 결과 봇이 hang 상태로 인덱싱 요청을 보내지 못한 것. 단순한 버그지만 비즈니스 영향(SEO, 신규 콘텐츠 발견)이 크기 때문에 빠르게 처리했다. 팀 입장에서도 "마다마다 봇 재시작해야 한다" 는 수동 작업이 줄어드니까 일감 낭비 면에서도 효율이 올라간다.
외부 서비스와 통신할 때의 일반론
이 작업을 진행하면서 팀과 논의한 내용:
- 타임아웃은 기본: 외부 API 호출에는 항상 타임아웃 설정이 필수다. 특히 검색 엔진, 결제 게이트웨이, 푸시 알림 같은 외부 의존성은 더욱 그렇다.
- 재시도 전략: 일시적 오류(네트워크 순간 끊김)와 영구 오류(API 정지/인증 실패) 구분해서 처리. 무작정 재시도하면 오히려 부하만 증가한다.
- 관찰 가능성: 타임아웃/실패 로그를 남겨서 패턴 파악. "언제 자주 터지는가", "특정 시간대 문제가 있나" 같은 정보는 원인 파악에 필수다.
- 점진적 개선: 첫 단계는 타임아웃, 이후 모니터링 데이터를 보면서 circuit breaker나 exponential backoff 같은 고급 패턴 추가.
현재는 12초 타임아웃으로 급한 hang 문제를 해결했고, 향후 로그를 보면서 "실제로 타임아웃이 얼마나 자주 발생하는가", "평균 응답 시간이 얼마나 되는가" 등을 파악해서 더 정교한 전략을 짤 예정이다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.