Skip to content

[BE] Queue, Load Balancing, Redis

이승관 edited this page Dec 4, 2024 · 1 revision

개요

문제 상황

업비트 API의 초당 요청 제한으로 인해 많은 트래픽이 예상되는 차트 API 요청을 효율적으로 처리할 수 있는 방안이 필요했습니다. API 요청 제한을 초과하지 않으면서도, 빠르고 안정적인 응답을 제공하기 위한 방법이 필요했습니다.

해결 방법

문제를 해결하기 위해 다음의 세 가지 접근 방식을 적용했습니다:

  1. Queue(1 Server)
  2. Load Balancing(4 Servers)
  3. Redis Caching(1 Server)

이를 통해 API 요청 제한 문제를 해결하고 효율적인 시스템을 구축할 수 있었습니다.

Queue(1 Server)

우선, Queue를 이용하여 요청의 순서를 보장하고 초당 요청 제한을 넘지 않도록 관리하는 로직을 구현했습니다. Queue는 서버에서 들어오는 요청을 정해진 순서대로 처리하여 API 제한에 도달하지 않도록 조율합니다.

이를 통해 API 요청 초과로 인한 오류를 효과적으로 방지할 수 있었습니다.

구현 방식

  • Queue 관리: 요청을 FIFO 방식으로 처리하여 순서를 보장.
  • 요청 속도 제어: 초당 요청 제한을 넘지 않도록 지연 시간을 추가.

부하 테스트 결과

Queue를 활용한 시스템의 응답 시간 분포와 성공률은 아래와 같습니다.

response_time_distribution success_rate

한계

Queue 방식은 요청이 몰릴 경우 대기 시간이 증가하여 사용자 경험이 저하될 수 있었습니다. 이를 개선하기 위해 추가적인 접근 방식이 필요했습니다.

Load Balancing(4 Server)

Queue 기반 처리의 한계를 보완하기 위해 여러 서버를 활용하여 API 요청 제한을 분산 처리했습니다.

클라이언트 요청을 여러 서버에 분산함으로써 전체 시스템의 처리 용량을 증가시켰습니다.

구현 방식

  • 로드 밸런싱: 최소 연결(Least Connection) 알고리즘을 사용하여 각 서버의 부하를 균등하게 분산.
  • 수평 확장: 4대의 서버를 추가하여 API 요청 처리 용량을 증가.

부하 테스트 결과

  • 로드 밸런싱 적용 후 응답 시간 분포와 성공률은 아래와 같습니다.

response_time_distribution success_rate

한계

로드 밸런싱을 통해 처리 용량을 확장했지만, 빈번한 요청으로 인해 중복된 데이터 요청이 발생하여 API 호출 효율성을 더욱 높일 필요가 있었습니다.

Redis(1 Server)

중복된 요청으로 인한 비효율성을 줄이기 위해 Redis를 활용한 캐싱 전략을 도입했습니다.

Redis는 자주 조회되는 데이터를 캐싱하여 불필요한 API 호출을 최소화하고 응답 속도를 개선하는 데 기여했습니다.

구현 방식

  • 데이터 캐싱: Redis를 활용하여 자주 사용하는 데이터를 캐싱.
  • 캐시 만료 설정: 실시간성이 중요한 데이터의 경우 캐시 유효 기간을 설정하여 최신 상태를 유지.
  • API 호출 최소화: 캐싱된 데이터가 있을 경우 Redis에서 즉시 응답.

부하 테스트 결과

Redis 캐싱을 적용한 후의 응답 시간 분포와 성공률은 아래와 같습니다.

response_time_distribution success_rate

최종 결과

image image

다양한 접근 방식을 시도한 결과, Redis를 활용한 캐싱 전략만으로도 충분히 성능을 확보할 수 있음을 확인했습니다.

Queue와 Load Balancing 방식을 통해 API 요청 제한 문제를 해결하고자 했으나, Redis를 도입한 이후 시스템 성능이 대폭 개선되면서 추가적인 서버 확장 없이도 안정적인 운영이 가능해졌습니다.

Redis를 활용한 캐싱은 다음과 같은 주요 이점을 제공했습니다:

  1. API 요청 수 감소

    실시간으로 변동되는 데이터를 캐싱하여, 불필요한 API 호출을 최소화했습니다. 이를 통해 업비트 API 요청 제한에 효율적으로 대응할 수 있었습니다.

  2. 응답 속도 향상

    캐시된 데이터를 활용함으로써 데이터 조회 속도가 기존 방식에 비해 5배 이상 빨라졌으며, 사용자 경험이 크게 개선되었습니다.

    (초당 50번 요청일 때 기준, 5초 이상의 응답 대기 시간은 실패로 간주)

  3. 비용 절감 및 단순화

    Redis를 중심으로 아키텍처를 단순화함으로써 서버 추가 없이도 안정적인 성능을 유지할 수 있었습니다. Queue와 Load Balancing 환경을 유지하는 데 필요한 비용과 복잡성을 줄이는 데 성공했습니다.

결과적으로, 현재 시스템은 단일 서버 환경에서도 Redis 기반 캐싱만으로 안정적인 요청 처리와 빠른 응답을 제공하고 있으며, 사용자 경험과 운영 효율성을 모두 만족시키는 최적의 구조로 자리 잡았습니다. Redis 도입이 API 요청 최적화와 성능 개선의 핵심 열쇠였음을 다시금 확인하게 된 사례였습니다.

💻 개발 일지

💻 공통

💻 FE

💻 BE

🙋‍♂️ 소개

📒 문서

☀️ 데일리 스크럼

🤝🏼 회의록

Clone this wiki locally