속도제한(Rate Limiter)

jaeyong Lee·2024년 10월 15일

Spring

목록 보기
1/2
post-thumbnail

이 개념을 어디서 맞닥뜨렸는가?

기업과제 구현 사항인 "메시지는 1초에 최대 500개의 요청을 보낼 수 있다." 문구를 보고
기능 구현을 어떻게 해야할까 고민하던 중 속도제한이라는게 있다는 것을 알게 되었다.

속도 제한의 장점

1.학대 방지(Dos 공격)
2.리소스 관리

※"학대 방지는 더 큰 개념으로, DDoS는 그 안에 포함된 사례 중 하나. 학대 방지는 정상적인 사용자의 리소스 남발까지 포함하는 반면, DDoS는 명확히 악의적인 의도를 가지고 리소스를 과부화시키는 행위이다.

--> 적절한 요청 제한으로 응답시간이 일관되게 만듬으로써 일시적인 지연을 감수하더라도 서버가 다운되지않는 안전성을 보장함으로써 장기적으로 더 빠른 응답을 제공하는 결과로 이어질 수 있음

속도 제한의 단점

  1. 적절한 요청범위 설정의 어려움
  2. 1번으로 인한 정상적인 사용자들의 이용불편

내 생각 : 그렇다면 요청을 count 해서 평균 요청량을 기반으로 설정하면 되는 것 아닌가?
-> 반론 : 트래픽의 다양성, 사용자별 요청차이, ddos완벽대처 어려움
-> 해결 방안 : 전체요청 제한, 사용자별 요청 제한, 실시간 트래픽에 따라 한도 조절

구현

  1. Resilience4j
  2. Spring Cloud Gateway
  3. Redis Rate Limiting

알게된 내용, 나의 생각

  1. 단일서버, msa 둘다 적용가능
  2. 실시간 데이터를 처리하는 api에서 비정상적인 요청 제어가능
    3. 비용 적인 문제(클라우드) - 불필요한 리소스 소비 비용 발생을 줄인다.

Resilience4j는 MSA 환경에서 서버 안정성을 높이는 데 효과적이라는 점을 다시 한 번 확인할 수 있었다.
또한 속도 제한은 비용 문제에 대응하고 안정성을 확보하는 측면에서 매우 매력적인 기술이라고 느꼈다.
과거 선착순 구매나 수강 신청처럼 트래픽이 몰리는 상황에서 서버 과부화로 인해 장애를 겪은 경험이 있다.
이러한 상황에서 속도 제한을 도입하면, 비록 처리 속도는 느려질 수 있지만, 서버가 안정적으로 동작하며 순차적으로 요청을 처리할 수 있다.
결과적으로, 장기적으로 서버가 터지는 것보다 훨씬 효율적인 대비책이 될 수 있다는 점이 매우 인상 깊었다.
앞으로 실무에서 속도 제한의 단점을 경험하고, 이를 해결하기 위한 방안을 직접 적용해보고 싶다는 목표를 가지게 되었다.

0개의 댓글