- 원본 프로젝트 https://github.com/chaezerojj/BOOKLUV
- 성능 테스트 및 기능 최적화 회고 https://velog.io/@thdgus79/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81
| 지표 | 최적화 전 | 최적화 후 | 개선 수치 | 핵심 개선 요인 |
|---|---|---|---|---|
| 연결 성공률 | 1.4% | 100.00% | 전원 연결 성공 | Traffic Shaping: 0.3s 순차 입장 및 Retry Storm 차단 |
| 메시지 레이턴시 (P95) | 4,460ms | 0ms (1ms 미만) | 무지연 달성 | Payload 경량화: 전송 데이터 키값 단축 및 구조 최적화 |
| 연결 지연 시간 (Avg) | 14,620ms | 48.68ms | 약 300배 단축 | MessagePack: JSON 파싱 오버헤드 제거 (이진 직렬화) |
| Network I/O (Traffic) | 11,100 MB | 19.2 MB | 99.8% 절감 | 이진 직렬화: 데이터 크기 물리적 압축 및 중복 I/O 제어 |
| 서버 CPU 사용률 | 9.82% (Full-load) | 0.05% | 약 196배 효율화 | 연산 최적화: 문자열 파싱을 바이너리 처리로 전환 |
- 목표 환경: Railway 무료 플랜 리소스 제한 재현 (Docker Compose 적용)
- 리소스 제약: 공유 CPU 0.1 vCPU / Memory 512MB
- 부하 시나리오: k6 기반 가상 사용자(VU) 1,000명 동시 접속 및 실시간 메시징
- Problem: 0.1 vCPU 환경에서 수천 건의 핸드셰이크가 동시 발생하며 서버가 마비되고, 클라이언트의 무분별한 재접속(Retry Storm)으로 부하가 가중됨.
- Solution: 트래픽 쉐이핑을 도입하여 서버가 감당 가능한 리듬(0.3s Delay)으로 접속을 분산하고, 1인당 재시도 횟수를 제한하여 정상 연결 처리에 자원을 집중함.
- Problem: JSON 형식의 텍스트 데이터 오버헤드로 인해 동시 접속자 비례 네트워크 부하가 11GB까지 폭증하고 처리가 지연됨.
- Solution: MessagePack 이진 직렬화를 채택하여 페이로드를 99.8% 압축. 데이터 전송 효율을 극대화하여 p95 레이턴시를 1ms 미만으로 단축함.
- Problem: 저사양 환경에서 '문자열 파싱(JSON)' 연산이 CPU 자원의 대부분을 점유하여 병목 발생.
- Solution: 연산량이 적은 바이너리 처리로 로직을 전환하고, 커널 수준의 컨텍스트 스위칭을 유발하는 에러 트래픽을 차단하여 자원 효율성을 약 200배 향상.
- 힘들지만 뿌듯한 경험이었다. 관련 CS 및 네트워크 지식들을 더욱 꼼꼼히 공부해야겠다고 생각했다.
- 트래픽 처리 역시 시스템 설계의 한 부분이라는 것을 알 수 있는 기회였다.