📝 테스트 개요
- 테스트 유형 : 스파이크 테스트
- 테스트 목표 : 동시 접속 가능한 시청자 수의 임계점 테스트
- 테스트 기간 : 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
- 참고 시퀀스 다이어그램

📈 테스트 목표
- 목표 동시 시청자 : 200명
- 목표 에러율 : 0%
⚙️ 테스트 과정
- 시청 페이지 접속(HTTP Request)
- 웹소켓 onIceCandidate 메시지 전송(WebSocket Single Write Sampler)
- 웹소켓 viewer 메시지 전송(WebSocket request-response Sampler)
- 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개 개방
✅ 초기 테스트 결과

테스트 샘플 개수 : 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 결과

테스트 샘플 개수 : 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 결과

테스트 샘플 개수 : 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 결과

테스트 샘플 개수 : 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 결과

테스트 샘플 개수 : 200개
에러 발생 개수 : 2개
에러율 : 1%
🔍 테스트 결론
UDP 포트 400개 개방 시 동시 시청자 수 198명 허용 가능
🔨 추후 개선점
UDP 포트 증가는 임시방편
-> 방화벽, 라우터, NAT 설정 등 네트워크 인프라에서 많은 포트를 관리해야 하므로 설정 및 모니터링에 어려움이 있음.
다른 스트리밍 기술인 RTMP + HLS 사용
-> WebRTC는 양방향 통신으로 설계되어 각 클라이언트와 개별적으로 연결을 유지해야 하는 반면, RTMP + HLS는 단방향 스트리밍 방식
-> HLS는 HTTP 기반으로 동작하여 단순히 파일을 전송하는 역할을 하는데 최적화
-> 따라서 상대적으로 WebRTC에 비해 더 많은 사용자 지원 가능
📝 테스트 개요
- 테스트 유형 : 스파이크 테스트
- 테스트 목표 : 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
- 참고 아키텍쳐

📈 테스트 목표
- 목표 동시 시청자 : 1,000명
- 목표 에러율 : 0%
⚙️ 테스트 과정
- 시청 페이지 접속(HTTP Request)
- HLS 제공 URL 접속(bzm - Streaming Sampler)
- 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 테스트 결과

테스트 샘플 개수 : 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 테스트 결과

테스트 샘플 개수 : 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 테스트 결과

테스트 샘플 개수 : 1,000개
에러 발생 개수 : 0개
에러율 : 0%
🔍 테스트 결론
RTMP + HLS 사용 시 동시 시청자 수 1,000명 허용 가능(목표 동시 시청자 수 도달)
📊 결과 비교

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