테스트 수행 : 주식회사 알파서클 연구원 박동빈
테스트 목표
- 동시접속자가 1 만 명일 때, 각각의 접속자들이 Spring/STOMP 서버로부터 응답을 받기까지 걸린 시간 값들을 측정하여 통계적 분포를 파악합니다.
- 해당 데이터로 서버 내부 동작을 파악하여, EverChat 재개발 프로젝트의 아키텍처 설계에 활용합니다.
결과 요약
- Spring/STOMP 서버는 메시지를 동시접속자들에게 Concurrent 하게 전송하지 않고, Single Thread로 순차적으로 전송합니다.
- 그 결과, 서버의 성능은 충분한데 Msg Tx Queue 에서 후순위에 있을수록 선순위 클라이언트보다 응답시간이 선형적으로 증가하는 문제가 발생합니다.
- 동시접속자 숫자 별 Server → Client 까지 걸린 시간의 분포입니다.
- Spring/STOMP 서버는 c6i.xlarge EC2에서 실행되었습니다.
- 소수점 첫째자리까지 표기합니다.
| 동시접속자 수 | 최소(ms) | 최대(ms) | 평균(ms) | 표준편차(ms) | P99 Latency
(ms) |
| --- | --- | --- | --- | --- | --- |
| 10 K | 199.0 | 854.8 | 608.0 | 171.0 | 851.4 |
| 5 K | 74.4 | 347.9 | 238.4 | 78.9 | 346.9 |
| 2.5 K | 74.2 | 246.3 | 166.5 | 48.7 | 245.3 |
- 동시접속자 수 별 c6i.xlarge EC2 내의 변화는 아래와 같습니다.
| 동시접속자 수 |
CPU Usage(%) |
Heap Memory(Gb) |
Physical Thread Count(EA) |
| 10 K |
동시접속 시 최대 60% 까지 |
|
|
| 상승 후 0 % 대로 하락 |
약 1.2 ~ 1.7 |
30(서버 시작할 때) |
|
| ~ 56(대규모 동시 접속 완료 후) |
|
|
|
| 5 K |
동시접속 시 최대 60% 까지 |
|
|
| 상승 후 0 % 대로 하락 |
약 0.75 ~ 1.2 |
30(서버 시작할 때) |
|
| ~ 56(대규모 동시 접속 완료 후) |
|
|
|
| 2.5 K |
동시접속 시 최대 38% 까지 |
|
|
| 상승 후 0 % 대로 하락 |
약 0.2 ~ 0.63 |
30(서버 시작할 때) |
|
| ~ 56(대규모 동시 접속 완료 후) |
|
|
|
테스트 방법

- 순수하게 Spring/STOMP 서버의, 메시지 전송을 위한 처리시간을 측정하기 위하여 모든 EC2들을 AWS 내 동일 VPC 안에 정의합니다.
- EC2 인스턴스의 네트워크 성능이 성능 테스트에 영향을 주지 않도록 10 Gbps 이상의 네트워크 속도를 보장하는 고성능 EC2(c6i.xlarge, m6i.large)를 사용합니다.
- 1 만 명의 Fan(클라이언트)은 JDK 21의 Virtual Thread를 이용하여 만들어냅니다.