이슈 해결

외부 API 호출 최적화: 쿼터 제한 문제 해결

외부 업체의 API 호출을 95% 이상 감소시켜 API 쿼터 제한으로 인한 서비스 장애를 해결한 최적화 사례

2024-01 ~ 2024-03
2 months
API 캐싱Datadog

어떤 문제가 있었는가?

발견된 문제

2024년 1월 11일부터 서비스 사용자들로부터 SNS 공유 기능이 동작하지 않는다는 보고가 접수되었습니다. 기능 장애는 다음과 같은 영역에서 발생했습니다.

  • 캐시톡 SNS 연동 > SNS 계정 연동하기
  • 친구 초대 > 외부 SNS 으로 공유하기
  • 앱 전반에서 공유되고 있는 SNS 공유 기능

로그 분석 결과, 외부 SNS 개발자 콘솔에서 친구_목록_조회API (외부 SNS 측 API) 에서 대량의 오류가 발생한 것을 확인했습니다. SNS 연동하기SNS 연동하기SNS 으로 공유하기SNS 으로 공유하기

원인 분석

조사 결과, 다음과 같은 원인을 파악했습니다.

  1. 외부 SNS API 쿼터 초과

    • 일일 쿼터(30,000건) 초과: 일 약 302,523건 호출
    • 월간 쿼터(3,000,000건) 초과: 11일 만에 3,793,832건 호출
  2. 과도한 API 호출량

    • Datadog(서버 모니터링 체계)에 기록된 유저 고유 ID와 API 요청량 분석 결과, 일 평균 약 45,000명의 사용자가 친구 추천 API를 사용 중이었습니다.
    • 로그 분석 결과 사용자당 일 평균 4.4회 호출 중이었으며
    • 일일 약 39만 회의 외부 SNS 친구 목록 API를 호출하는 상황이었습니다. (45,000명 × 2회 × 4.4회)

어떻게 해결했는가?

문제 해결을 위해 다양한 이해관계자(PM, 서버 개발자, 클라이언트 개발자, 웹뷰 개발자)와 협업하여 해결 방안을 도출하였습니다.

  1. 서버 측 외부 API 응답(친구 목록) 캐싱
    • 사용자별 SNS 친구 목록을 서버에 캐싱
    • 캐싱 주기: 24시간 (조정 가능)
    • 점진적으로 친구 목록 로드: 100명씩 분할 조회 및 캐싱하여 한 번 조회된 친구는 다시 API 호출하여 조회하지 않도록 했습니다. 추천 친구 화면 우측 상단 새로고침 클릭 시마다 100명씩 추가로 분할 조회추천 친구 화면 우측 상단 새로고침 클릭 시마다 100명씩 추가로 분할 조회
  2. 외부 API 호출 비활성화 임시 조치
    • 개선 작업 중 임시로 API 호출을 비활성화하여 개발 단 테스트 / QA 이전에 쿼터가 소진되어 버리는 현상을 방지하였습니다.
    • 2월 1일 월간 쿼터 리셋 후 QA 진행 & 개선된 로직 상용에 적용

구현 방식

서버 측 캐싱 로직

1. 유저가 추천 친구 목록을 조회하면:
   - 캐시 유효성 확인 (24시간 이내 캐싱된 친구 목록이 있는지)
   - 유효한 캐시 없을 경우, 외부 SNS API에서 최대 100명까지 친구 목록 조회 후 캐싱
   - 유효한 캐시 있을 경우, 캐싱된 데이터 반환

2. 사용자가 친구 목록을 새로고침하면:
   - 이미 로드된 친구 수 확인
   - 아직 로드되지 않은 친구가 있는 경우, 다음 100명을 SNS API에서 조회하여 캐시에 추가
   - 모든 친구가 로드된 경우, 추가 API 호출 없이 캐시된 데이터만 반환

개선된 API 호출 패턴

  • 기존: 매 화면 진입과 새로고침마다 전체 친구 목록을 지속적으로 중복 호출하고 있었으나
  • 개선: 캐시된 친구 목록을 활용, 필요 시에만 추가 조회하는 방식으로 개선하였습니다.

결과 및 성과

정량적 성과

항목개선 전개선 후감소율
일일 API 호출 수~302,523회~17,587회94.2%
월간 API 호출 수3,793,832회~597,965회84.2%

개선 이후 외부 SNS 친구_목록 API 호출량개선 이후 외부 SNS 친구_목록 API 호출량

정성적 성과

  1. 서비스 안정성 향상

    • 외부 SNS 공유 기능 정상화
    • 외부 API 쿼터 제한으로 인한 서비스 장애 해소
  2. 시스템 효율성 개선

    • 불필요한 API 호출 대폭 감소
    • 서버 부하 감소 및 응답 시간 개선

회고

무엇을 배웠는가?

  • 외부 API 사용 시 쿼터 제한을 고려해야 한다는 것을 배웠습니다.
  • 또한 다양한 팀(서버, 클라이언트, PM) 간의 원활한 소통을 통해 해결 방안을 수립하고 문제를 해결할 수 있었습니다.

결론

이 프로젝트는 외부 API 의존성이 높은 서비스에서 발생할 수 있는 쿼터 제한 문제를 효과적으로 해결한 사례입니다.

서버 모니터링 시스템(Datadog)을 바탕으로 유저 별 API 요청량을 분석하고, 캐싱 전략을 효율적으로 적용하고,

다양한 이해관계자와의 원활한 의사소통을 통해 외부 API 호출을 95% 이상 감소시켜 서비스 안정성을 크게 향상시킬 수 있었습니다.