kakasoo

[Meta] Service temporaily unavailable 본문

도메인/마케팅

[Meta] Service temporaily unavailable

카카수(kakasoo) 2024. 3. 25. 22:22
반응형

에러 상황

{
  "message": "Service temporarily unavailable",
  "type": "OAuthException",
  "is_transient": false,
  "code": 2,
  "error_subcode": 1504018,
  "error_user_title": "요청 시간이 초과되었습니다",
  "error_user_msg": "기간을 줄이거나 더 적은 데이터를 검색하거나 비동기 작업을 사용하세요",
  "fbtrace_id": "(생략)"
}

 

일시적으로 서비스를 이용할 수 없다는 메시지인데, 상세한 내용은 `error_user_title`와 `error_user_msg`을 통해 확인할 수 있다.

아마도 message는 카테고리 상 code 2에 해당하는 내용일 것이고 error title과 msg는 error_subcode 1504018에 따르는 것 같다.

이 에러는 메타 서버에 요청을 할 때, 장시간 응답이 처리되지 않으면 발생하는 에러로, 우리가 제어할 수 있는 부분은 아니다.

필자가 예상하는 원인은 axios와 같은 라이브러리를 사용해 connection timeout을 조절할 때, 너무 장시간을 설정한 것이다.

필자의 경우는 메타에서 장시간 기다려도 응답이 오지 않는 경우를 대비해 timeout 시간을 조금 더 늘려서 응답을 기다리게 했었다.

그러자 메타에서 이와 같이 본 적 없는 에러가 발생했는데, 아마도 이는 메타에서는 부하가 걸리는 경우를 대비해 커넥션을 끊는 것이다.

 

해결 방법

 

Rate Limiting - 마케팅 API - 문서 - Meta for Developers

Ad Account Level API-Level Limits Rate limiting is at the ad account level. Rate limits happen in real time on a given time range. Each Marketing API call is assigned a score. Your score is the sum of your API calls. We enforce a maximum score. Generally s

developers.facebook.com

 

근본적으로 이 문제가 발생한 까닭은 장시간 기다려도 응답이 오지 않아 connection timeout을 늘린 데에 있었다.

어차피 기다려도 메타에서 커넥션을 강제로 끊고 있다면 connection timeout을 늘린 것을 다시 원상복구할 수 밖에 없다.

다만, 다시 connection timeout을 줄이면 다른 에러가 나오니, 시간을 줄이는 것 외에도 다른 조치가 필요한데 이는 위 문서를 봐야 한다.

이 문제에 대한 완벽한 해결 방법은 위 문서를 참고해서,

  1. API가 실패했을 경우를 캐치하여 일정 횟수 N만큼 재요청하는 로직을 추가한다.
  2. API를 요청하는 게 빈번해질 경우를 대비하여 각 요청 간 딜레이를 준다.
  3. 딜레이를 무한정 줘서는, 고객에게도 장시간 로딩을 띄워야 하므로 이 로직들은 백그라운드에서 돌 수 있도록 비동기로 빼야 한다.
  4. 비동기로 돌아가는 API 요청들 사이에서 딜레이를 줄 때에는 위 문서를 참고하여 시간 간격을 조정한다.

문제 상황과 해결 방법이 옳은지는 모르겠으나, 나는 부분적으로 이 방식을 적용했고, 위 에러는 그 후 본 적이 없다.

반응형