요구사항
- 우리 서비스에는 일부 사용자가 과도하게 API를 호출하면서 전체 서비스 응답 속도가 느려지고 있습니다. 이 문제를 해결하기 위해 처리율 제한기를 도입하려고 합니다. 요구사항을 정의하고 설계를 설명해보세요.
1단계 문제 이해 및 설계 범위 확정
- 어떤 종류의 처리율 제한 장치? 클라이언트 측에서 제한할 것인지, 서버 측에서 제한할 것인지?
- 일반적으로 클라이언트는 쉽게 위변조가 가능하기 때문에 처리율 제한을 안정적으로 할 수 없다. 또 모든 클라이언트의 구현을 통제하는 것이 어려울 수 있다.
- 따라서 서버 측에서 제한
- 어떤 기준을 사용해서 제어할까? IP 주소? 사용자 ID?
- 낮은 응답시간: HTTP 응답시간에 영향을 주어서는 안된다.
- 응답 시간 고려 → ID 기반 -> IP는 NAT / 공유 환경에서 오차 발생 가능
- 시스템 규모는 어느 정도로 생각할까?
- 분산 환경에서 동작해야 하는가?
- 독립된 서비스인가? 혹은 애플리케이션 코드에 포함될 수도 있는가?
- 독립된 서비스. 하나의 처리율 제한 장치를 여러 서버나 프로세스에서 공유할 수 있어야 한다.
- 처리 제한된 요청은 사용자에게 그 사실을 알려야 하는가?
2단계 개략적 설계안 제시 및 동의 구하기
- 기술스택
- 처리율 제한 장치는 어디에 둘 것인가?
- 미들웨어를 만들어 서버로 가는 요청을 통제하는 방식
- 처리율 제한 알고리즘