접속 대기열 시스템
프로젝트 목표
대량 트래픽 상황에서도 안정적인 사용자 경험 제공을 위한 대기열 시스템 개발
- 비동기 논블로킹 기반의 Spring Webflux, Reactive Redis를 활용해 시스템 설계
- JMeter를 통한 테스트 및 병목 지점 분석과 튜닝
요구사항
- 웹 페이지에 동시 진입할 수 있는 사용자 수를 제한한다.
- 대기열에 사용자를 등록하고, 순차적으로 진입을 허용한다.
- 대기 중인 사용자에게 현재 대기열 순위를 주기적으로 제공한다.
개발 스택
- Server: JDK 17, Spring Boot 3.x, Webflux, Reactive Redis
- Database: Redis
- Testing: JUnit5, Mockito, Reactor, JMeter
- Etc: Git, Docker, Gradle, Ubuntu, jacoco, SonarCloud
아키텍처
테스트 결과
Apache JMeter 사용
- Number of Threads (users):
1,000 - Ramp-up period (seconds):
10 - Loop Count:
infinite
테스트 환경 분리 후 Throughput이 약 65배 (297.6 → 19,332.1) 향상
| 환경 | Samples | Min (ms) | Max (ms) | Avg (ms) | Error (%) | Throughput (QPS) |
|---|---|---|---|---|---|---|
| 초기 테스트 (잡음 포함) |
887,063 | 0 | 256 | 49 | 0.11 | 297.6 |
| 환경 분리 후 테스트 | 1,016,596 | 0 | 185 | 46 | 0.10 | 19332.1 |
