[2025.03.20] 라이브 스트리밍 동시 시청자 한계 테스트(스파이크 테스트)

아스라이지새는달·2025년 6월 11일
0
post-thumbnail

🧪 WebRTC 기반 Kurento Media Server 스파이크 테스트

📝 테스트 개요

  • 테스트 유형 : 스파이크 테스트
  • 테스트 목표 : 동시 접속 가능한 시청자 수의 임계점 테스트
  • 테스트 기간 : 2025.03.18 ~ 2025.03.20
  • 테스트 환경
    • 테스트 기기 : Apple M1 맥북에어, RAM 8GB
    • 스트리밍 기술 : WebRTC 기반 Kurento Media Server(UDP 포트 50개 개방), HLS(Nginx-RTMP 모듈)
    • 테스트 Tool : Apache JMeter 5.6.3
    • 사용 Plugin : WebSocket Samplers by Peter Doornbosch
  • 참고 시퀀스 다이어그램
    sequence diagram

📈 테스트 목표

  • 목표 동시 시청자 : 200명
  • 목표 에러율 : 0%

⚙️ 테스트 과정

  1. 시청 페이지 접속(HTTP Request)
  2. 웹소켓 onIceCandidate 메시지 전송(WebSocket Single Write Sampler)
  3. 웹소켓 viewer 메시지 전송(WebSocket request-response Sampler)
  4. Response value가 accepted인지 검증(rejected라면 에러 발생)

💻 초기 테스트 시나리오

  • 10초 동안 동시 시청자 초당 2.5명 즉시 증가
  • 응답 시간 6초 이내
  • 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 25
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
  • KMS(Kurento Media Server) 설정 - UDP 포트 50개 개방

✅ 초기 테스트 결과

Image

테스트 샘플 개수 : 25개
에러 발생 개수 : 2개
에러율 : 8%

🔨 개선점

일반적으로 KMS(Kurento Media Server)는 클라이언트와의 연결에서 미디어 스트림 하나당 UDP 포트 2개를 사용하므로 목표 동시 시청자 수 200명에 맞게 UDP 포트를 50개에서 400개로 추가 개방하여 테스트 추가 진행.

추가 테스트는 직전 테스트 성공 시 Numbers of Threads를 직전 테스트 설정값의 2배로 설정하여 진행.

💻 추가 테스트 시나리오 1

  • 10초 동안 동시 시청자 초당 2.5명 즉시 증가
  • 응답 시간 6초 이내
  • 목표 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 25
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
  • KMS(Kurento Media Server) 설정 - UDP 포트 400개 개방

✅ 추가 테스트 시나리오 1 결과

Image

테스트 샘플 개수 : 25개
에러 발생 개수 : 0개
에러율 : 0%

💻 추가 테스트 시나리오 2

  • 10초 동안 동시 시청자 초당 5명 즉시 증가
  • 응답 시간 6초 이내
  • 목표 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 50
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
  • KMS(Kurento Media Server) 설정 - UDP 포트 400개 개방

✅ 추가 테스트 시나리오 2 결과

Image

테스트 샘플 개수 : 50개
에러 발생 개수 : 0개
에러율 : 0%

💻 추가 테스트 시나리오 3

  • 10초 동안 동시 시청자 초당 10명 즉시 증가
  • 응답 시간 6초 이내
  • 목표 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 100
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
  • KMS(Kurento Media Server) 설정 - UDP 포트 400개 개방

✅ 추가 테스트 시나리오 3 결과

Image

테스트 샘플 개수 : 100개
에러 발생 개수 : 0개
에러율 : 0%

💻 추가 테스트 시나리오 4

  • 10초 동안 동시 시청자 초당 20명 즉시 증가
  • 응답 시간 6초 이내
  • 목표 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 200
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
  • KMS(Kurento Media Server) 설정 - UDP 포트 400개 개방

✅ 추가 테스트 시나리오 4 결과

Image

테스트 샘플 개수 : 200개
에러 발생 개수 : 2개
에러율 : 1%

🔍 테스트 결론

UDP 포트 400개 개방 시 동시 시청자 수 198명 허용 가능

🔨 추후 개선점

UDP 포트 증가는 임시방편
-> 방화벽, 라우터, NAT 설정 등 네트워크 인프라에서 많은 포트를 관리해야 하므로 설정 및 모니터링에 어려움이 있음.

다른 스트리밍 기술인 RTMP + HLS 사용
-> WebRTC는 양방향 통신으로 설계되어 각 클라이언트와 개별적으로 연결을 유지해야 하는 반면, RTMP + HLS는 단방향 스트리밍 방식
-> HLS는 HTTP 기반으로 동작하여 단순히 파일을 전송하는 역할을 하는데 최적화
-> 따라서 상대적으로 WebRTC에 비해 더 많은 사용자 지원 가능


🧪 RTMP + HLS 기반 Media Server 스파이크 테스트

📝 테스트 개요

  • 테스트 유형 : 스파이크 테스트
  • 테스트 목표 : RTMP + HLS 도입 전 동시 접속 가능한 시청자 수의 임계점 테스트
  • 테스트 기간 : 2025.03.18 ~ 2025.03.20
  • 테스트 환경
    • 테스트 기기 : Apple M1 맥북에어, RAM 8GB
    • 스트리밍 기술 : HLS(Nginx-RTMP 모듈)
    • 테스트 Tool : Apache JMeter 5.6.3
    • 사용 Plugin : BlazeMeter - HLS Plugin
  • 참고 아키텍쳐
    Image

📈 테스트 목표

  • 목표 동시 시청자 : 1,000명
  • 목표 에러율 : 0%

⚙️ 테스트 과정

  1. 시청 페이지 접속(HTTP Request)
  2. HLS 제공 URL 접속(bzm - Streaming Sampler)
  3. Streaming Sampler의 media playlist와 media segment Executions Sample 개수가 설정한 Number of Threads와 같은지 확인

💻 테스트 시나리오 1

  • 10초 동안 동시 시청자 초당 20명 즉시 증가
  • 목표 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 200
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
    • Video duration(seconds) : 5

✅ 시나리오 1 테스트 결과

Image

테스트 샘플 개수 : 200개
에러 발생 개수 : 0개
에러율 : 0%

💻 테스트 시나리오 2

  • 10초 동안 동시 시청자 초당 50명 즉시 증가
  • 목표 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 500
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
    • Video duration(seconds) : 5

✅ 시나리오 2 테스트 결과

Image

테스트 샘플 개수 : 500개
에러 발생 개수 : 0개
에러율 : 0%

💻 테스트 시나리오 3

  • 10초 동안 동시 시청자 초당 100명 즉시 증가
  • 목표 에러율 0%
  • JMeter 설정
    • Number of Threads(users) : 1,000
    • Ramp-up period(seconds) : 10
    • Loop Count : 1
    • Video duration(seconds) : 5

✅ 시나리오 3 테스트 결과

Image

테스트 샘플 개수 : 1,000개
에러 발생 개수 : 0개
에러율 : 0%

🔍 테스트 결론

RTMP + HLS 사용 시 동시 시청자 수 1,000명 허용 가능(목표 동시 시청자 수 도달)


📊 결과 비교

Image

🔨 최종 추후 개선 사항

RTMP + HLS는 WebRTC에 비해 상대적으로 더 많은 시청자를 지원할 수 있지만 송출 시청 간 Delay가 높아 WebRTC와 RTMP, HLS를 접목시킨 스트리밍 서비스를 구축하는 것이 목표

profile
웹 백엔드 개발자가 되는 그날까지

0개의 댓글