|
3 | 3 | ---
|
4 | 4 |
|
5 | 5 | - 대규모 트래픽 4장 **“처리율 제한 장치 설계”** 에 소개된 **이동 윈도 카운터 알고리즘**을 구현한 API입니다.
|
| 6 | + |
| 7 | + |
| 8 | +<br/> |
| 9 | + |
| 10 | +## 🛠️ 사용 SW |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | + |
| 15 | + |
| 16 | +<br/> |
| 17 | + |
| 18 | +## 🏢 아키텍처 구조 |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | + |
| 23 | +``` |
| 24 | +├── common 패키지 |
| 25 | +│ └── config 패키지 |
| 26 | +│ └── RedisConfig.class |
| 27 | +│ |
| 28 | +│ └── dto 패키지 |
| 29 | +│ └── ExceptionResponse.class |
| 30 | +│ └── exception 패키지 |
| 31 | +│ └── BusinessException.class |
| 32 | +│ └── CommonException.class |
| 33 | +│ └── CommonExceptionCode.enum |
| 34 | +│ └── ExceptionCode.interface |
| 35 | +│ └── GlobalExceptionHandler.class |
| 36 | +│ |
| 37 | +├── Controller 패키지 |
| 38 | +│ └── SlidingWindowCounterController.class |
| 39 | +│ |
| 40 | +├── dto 패키지 |
| 41 | +│ └── response 패키지 |
| 42 | +│ └── SlidingWindowCounterProfileResponse.class |
| 43 | +│ └── SlidingWindowCounterResponse.class |
| 44 | +│ |
| 45 | +├── exception 패키지 |
| 46 | +│ └── RateException.class |
| 47 | +│ └── RateLimitExceededException.enum |
| 48 | +│ |
| 49 | +├── service 패키지 |
| 50 | +│ └── SlidingWindowCounterService.class |
| 51 | +│ |
| 52 | +└── SlidingWindowCounterApplication.class |
| 53 | +
|
| 54 | +``` |
| 55 | + |
| 56 | +<br/> |
| 57 | + |
| 58 | +## ✏️ API 설명 |
| 59 | + |
| 60 | +--- |
| 61 | + |
| 62 | +### 1️⃣ 이동 윈도 카운터 생성 API |
| 63 | +- 이동 윈도 카운터 생성 API는 이동 윈도 카운터 알고리즘을 구현한 API입니다. |
| 64 | +- 이동 윈도 카운터 생성 API는 요청을 받으면 Redis에 이동 윈도 카운터를 생성하고 요청 횟수를 증가시킵니다. |
| 65 | +- 각 카운터는 고유한 **윈도 기간(60초)** 동안 유효하며, 이 기간 내의 요청 수를 카운트합니다. |
| 66 | +- 요청 수가 **고정된 최대 요청 허용 수(1000회)** 를 초과하면, 요청은 제한됩니다. |
| 67 | +- 요청이 성공적으로 처리되면, 현재 요청 카운터의 키와 요청 수를 반환합니다. |
| 68 | + |
| 69 | +``` Http |
| 70 | +POST /sliding-window-counter |
| 71 | +``` |
| 72 | + |
| 73 | +<br/> |
| 74 | + |
| 75 | +### 2️⃣ 이동 윈도 카운터 조회 API |
| 76 | +- 생성된 이동 윈도 카운터의 정보를 조회하는 API입니다. |
| 77 | +- 유효한 모든 이동 윈도 카운터의 키와 해당 키의 요청 수를 조회할 수 있습니다. |
| 78 | +- Redis에서 이동 윈도 카운터를 스캔하여, 현재의 요청 수와 함께 각 카운터 정보를 반환합니다. |
| 79 | + |
| 80 | +``` Http |
| 81 | +GET /sliding-window-counter |
| 82 | +``` |
0 commit comments