| 스레드 수 | 스레드 당 호출 수 | 스레드 생성 단위초 | 호출하는 API |
|---|---|---|---|
| 1000개 | 1000회 | 1초 | 로그인, 테스트 API |
1, 테스트용 API 호출 결과
| Label | Samples | Avg | Median | 90% Line | 95% Line | 99% Line | Min | Maximum | Error % | Throughput | Received KB/sec | Sent KB/sec |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MySQL | 1,000,000 | 217 | 133 | 360 | 735 | 1993 | 0 | 19302 | 0.0 | 4300.575847105928 | 1842.577311922379 | 1398.5271065295644 |
| Redis | 1,000,000 | 171 | 203 | 250 | 267 | 313 | 1 | 648 | 0.0 | 5745.838576411034 | 2461.676603376255 | 1868.5197714305416 |
| 개선율 | 21.19816% | -52% | 30.5% | 63.6735% | 84.295% | 96.6428% | 33.6063% |
평가 : 평균적인 요청응답 시간의 개선율은 크지 않지만, 기존보다 90%, 95%, 99% Line이 명백히 낮아진 것을 보면, 응답시간의 편차가 크지 않은 것으로 보아 대량 트래픽에 대한 처리 안정성이 높아진 것으로 보임.
| Label | Samples | Avg | Median | 90% Line | 95% Line | 99% Line | Min | Maximum | Error % | Throughput | Received KB/sec | Sent KB/sec |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MySQL | 101,675 | 22081 | 22348 | 32097 | 33027 | 36315 | 0 | 46428 | 0.0646668 | 45.231587507495966 | 45.96537482077525 | 19.459385284708762 |
| Redis | 101,125 | 11638 | 11659 | 13353 | 13944 | 15160 | 4 | 19439 | 0.0098888 | 85.72857633340257 | 79.32347973509975 | 21.800446968821927 |
| 개선율 | 47.2941% | 47.8298% | 58.3980% | 57.7800% | 58.2542% | 58.1309% | 84.7082% | 89.5325% | 72.5722% | 12.0305% |
평가 : 로그인 과정에서 토큰을 인메모리/관계형 DB에 저장하는 연산이 있다. 평균 응답 시간이 47% 이상 개선되었다. 90%, 95%, 99% Line도 거의 60% 이상 개선되면서, 전체적인 편차도 줄어들었다.
가장 눈에 띄는 것은 초당 처리율로 많은 트래픽에 대해 효율적인 관리가 가능하다.
기존의 토큰 인증 시스템에선 관계형 DB에 이전 토큰들을 관리하였고, 여기서 isExprired 같은 컬럼으로 유효성을 확인했다. 그러나, 어떤 토큰이 유효한지 검사하는 과정에서 다른 토큰들과 비교하는 것은 불필요한 연산으로 유효한 토큰만 기록하고 있다면, 검증에 문제가 없다.
관계형 DB는 토큰 유효기간 동안만 존재하는 데이터를 각 사용자 당 하나만 저장하는 것에 테이블을 제공해야하며, 자동으로 만료 처리가 어렵기 때문에 비용이 크다.
레디스는 인메모리 DB로 테이블이 아닌 Key 값으로 접근하며, 만료시간 설정이 가능하기 때문에 추가적인 로직 구현이 불필요하며, 읽고 쓰는 IO 연산에서 큰 비용을 요구하지 않는다.
대규모 트래픽을 상정한 서비스의 경우 Redis의 적용이 필수적으로 보인다. 캐싱 등을 제공하는 것이 트래픽 처리 응답시간에 큰 영향을 미침을 확인할 수 있었다.