Skip to content

Greenery367/BOOKLUV

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

📖BOOKLUV : 웹소켓 채팅 기능 최적화 해보기

📊 핵심 성과 (1,000 VU | 0.1 CPU 기준)

지표 최적화 전 최적화 후 개선 수치 핵심 개선 요인
연결 성공률 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배 효율화 연산 최적화: 문자열 파싱을 바이너리 처리로 전환

🎯 테스트 및 목표 환경 (Environment)

  • 목표 환경: Railway 무료 플랜 리소스 제한 재현 (Docker Compose 적용)
  • 리소스 제약: 공유 CPU 0.1 vCPU / Memory 512MB
  • 부하 시나리오: k6 기반 가상 사용자(VU) 1,000명 동시 접속 및 실시간 메시징

🔍 지표별 상세 분석 (Deep Dive)

1. 연결 성공률 및 지연 시간 (Connection & Success Rate)

  • Problem: 0.1 vCPU 환경에서 수천 건의 핸드셰이크가 동시 발생하며 서버가 마비되고, 클라이언트의 무분별한 재접속(Retry Storm)으로 부하가 가중됨.
  • Solution: 트래픽 쉐이핑을 도입하여 서버가 감당 가능한 리듬(0.3s Delay)으로 접속을 분산하고, 1인당 재시도 횟수를 제한하여 정상 연결 처리에 자원을 집중함.

2. 메시지 레이턴시 및 Network I/O (Latency & Traffic)

  • Problem: JSON 형식의 텍스트 데이터 오버헤드로 인해 동시 접속자 비례 네트워크 부하가 11GB까지 폭증하고 처리가 지연됨.
  • Solution: MessagePack 이진 직렬화를 채택하여 페이로드를 99.8% 압축. 데이터 전송 효율을 극대화하여 p95 레이턴시를 1ms 미만으로 단축함.

3. 서버 CPU 효율성 (Resource Efficiency)

  • Problem: 저사양 환경에서 '문자열 파싱(JSON)' 연산이 CPU 자원의 대부분을 점유하여 병목 발생.
  • Solution: 연산량이 적은 바이너리 처리로 로직을 전환하고, 커널 수준의 컨텍스트 스위칭을 유발하는 에러 트래픽을 차단하여 자원 효율성을 약 200배 향상.

🐧 엔지니어링 회고

  • 힘들지만 뿌듯한 경험이었다. 관련 CS 및 네트워크 지식들을 더욱 꼼꼼히 공부해야겠다고 생각했다.
  • 트래픽 처리 역시 시스템 설계의 한 부분이라는 것을 알 수 있는 기회였다.
스크린샷 2026-01-02 오후 6 49 59

About

Fork 후 웹소켓 성능 최적화 해보기

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Roff 46.7%
  • Vue 21.6%
  • Python 17.9%
  • JavaScript 6.8%
  • HTML 6.6%
  • CSS 0.3%
  • Shell 0.1%