와우자 엔진: ModuleTimedDisconnect로 스트리밍 세션 제한 및 비용 절감하기
라이브 스트리밍 평균 세션 시간은 26.4분이며 수 시간을 넘어갈 경우, 비정상 세션일 가능성이 높다. Wowza Streaming Engine은 최대 세션 시간 제한 모듈을 통해 세션 자동 종료 기능을 제공한다.
라이브 스트리밍 세션의 시간 제한이 필요한 이유는?
일반적인 라이브 스트리밍 세션 유지시간은?
스트리밍 데이터 분석 기관인 Conviva가 발표한 2019년 보고서에 따르면, 라이브 스트리밍 시청자의 평균 세션 유지 시간은 약 26.4분으로 조사되었다. 또한 스포츠 중계나 각종 이벤트의 중계, 속보와 같은 뉴스 이벤트의 경우에도 보통 3시간을 넘기지 않는 것이 일반적이다.
다시 말해, 어떤 세션이 평균 30분, 최대 3시간 넘게 유지되고 있다면, 해당 세션은 일반적인 사용자의 세션이 아닌, 비정상 세션일 가능성이 높다.
비정상 세션이 발생시키는 각종 비용
문제는 이런 비정상 세션들은 정상 세션과 마찬가지로 아래와 같은 여러가지 비용을 발생시킨다는 것이다.
- 직접비용
- CDN 비용
- 대부분의 CDN은 전송 데이터 양에 따라 비용이 발생한다.
- 불필요한 세션이 유지되는 동안 지속적으로 데이터가 전송되므로, 가장 직접적인 영향을 미친다.
- 각종 라이선스
- 시스템 구성요소에, 사용량에 따라 과금하는 종량제 라이선스가 적용되어 있다면 불필요한 비용이 발생한다.
- 컴퓨팅 자원
- 상면, 전력, CPU, RAM, 네트워크등의 증설 등이 요구되어 불필요한 세션을 처리하기 위한 컴퓨팅 비용이 발생한다.
- AWS, Azure 같은 클라우드 환경이라도 추가적인 인스턴스 사용 비용이 발생한다.
- 간접비용
- 기회비용
- 불량 세션이 선점한 자원을 사용하지 못하는 정상 사용자가 서비스 사용을 하지 못한다.
- 평판하락
- 불량 세션의 부하로 인해 정상 사용자들도 버퍼링, 지연시간 등의 품질 저하를 겪게 된다.
- 저품질 서비스는 사용자 불만으로 이어지며, 사용자가 다른 서비스로 이탈하게 한다
- 운영비용
- 저품질 및 장애에 대한 민원 처리 관련 조직의 운영 비용이 상승한다.
- 콘텐츠보안
- 불량세션을 통한 콘텐츠 유출로, 저작권 문제가 발생할 수 있다. (이거, 본 필자의 경험이다.)
시발비용결국 운영자만 죽어나는 상황이 펼쳐진다.
세션 시간으로 비정상 세션을 제어
이런 이유로, 서비스 운영자는 비정상 세션들을 감지하고 차단해야 할 필요가 있다. 이를 위해 세션과 사용자에 대한 여러가지 감사 기준을 세우고 모니터해 세션들을 제어해야 하는데, 그 중 비교적 간단하고 효과적으로 비정상 세션을 감지하고 처리하는 방법이 바로 세션의 최대 유지시간을 제한 하는 방법이다.
Wowza Streaming Engine(와우자 스트리밍 엔진, 이하 와우자)은 이러한 기능을 구현하기 위한 ModuleTimedDisconnect모듈을 사용할 수 있어, 손쉽게 최대 세션 유지 시간을 제어할 수 있다.
ModuleTimedDisconnect 모듈 설치 절차
ModuleTimedDisconnect
모듈을 적용하기 위해서는 다음의 절차에 따라 설치를 진행해 주면 된다. 참고로, 이 모듈은 서버 레벨이 아닌 어플리케이션 레벨에서 설치하는 것을 권장한다.
ModuleTimedDisconnect 모듈 다운로드 및 설치
- 와우자 스트리밍 엔진 확장 모듈 목록에서
ModuleTimedDisconnect
을 찾아 모듈 파일을 다운로드 받는다. - 다운로드 받은 확장 모듈의 압축을 풀고 와우자 서버에 설치한다. (와우자 스트리밍 엔진 확장 모듈 설치 방법을 참고)
- 적용할 어플리케이션의
Application.xml
의Module
섹션에 아래 내용을 등록해 준다. (와우자 XML 설정 파일 종류와 속성 변경 방법 참고)모듈 등록 정보 Name Description Fully Qualified Class Name ModuleTimedDisconnect 세션 시간 제한 com.wowza.wms.plugin.ModuleTimedDisconnect <Module> <Name>ModuleTimedDisconnect</Name> <Description>세션 시간 제한</Description> <Class>com.wowza.wms.plugin.ModuleTimedDisconnect</Class> </Module>
- 와우자 서비스를 재시작해 준다. (어플리케이션만 재시작 해 주면 모듈 적재가 되지 않음에 주의!)
사용할 어플리케이션에 모듈 적용
설치된 ModuleTimedDisconnect
를 적용할 와우자 어플리케이션에 아래의 속성을 추가시켜 준다. (와우자 속성 추가 방법을 참고)
Path | Name | Type | Value |
---|---|---|---|
/Root/Application | timedDisconnectTime | INT | 60 |
<Property>
<Name>timedDisconnectTime</Name>
<Value>60</Value> <!-- 최대 허용 60초 -->
<Type>Integer</Type>
</Property>
위의 필수 속성을 포함해, 추가 옵션으로 사용할 수 있는 속성들의 목록은 와우자의 공식 문서를 참고하기 바란다.
속성을 저장한 후, 해당 어플리케이션을 재시작 하면 적용된다.
진실의 시간 – 설정 테스트
설정이 잘 적용되었는지 확인하기 위해, 해당 어플리케이션에서 송출되는 스트림을 VLC, ffplay등의 외부 플레이어를 이용해 재생해 본다.
timedDisconnectTime
프로퍼티는 초단위로 입력하게 되어 있으나, 사실 완전히 딱 떨어지게 동작하지는 않는다. 예를 들어 30을 입력했다면, 1~2초 가량 재생이 더 진행되어, 실제로는 32초 정도에 연결이 끊기는 것을 확인할 수 있다.
적절한 제한 시간값을 찾는 것은 오로지 독자 제위의 몫이다. 콘텐츠와 서비스의 형태에 따라 적합한 값을 선택하기 바란다. 길다면 비정상 스트림을 차단한다는 목적을 달성할 수 없고, 짧다면 사용자 경험에 악영향을 주게 된다. 본 필자는 우선 3시간 정도로 시작해 시간을 조절해 보는 것을 추천한다.
마무리
Wowza Streaming Engine의 ModuleTimedDisconnect
모듈은 비정상적인 장기 세션을 자동으로 종료시켜, 매우 쉽게 스트리밍 서비스의 품질과 비용을 효율적으로 관리할 수 있는 매우 유용한 모듈 되겠다.
비정상 세션을 감지하는데에는 세션 유지시간 외에도 사용할 수 있는 여러 지표들이 존재한다. (지역, 접속형태, 접속품질, 클라이언트 정보 등) 독자 제위께서는 가급적 하나의 지표에만 의지하지 말고, 적절한 여러가지 지표들도 함께 사용해 좀 더 효과적인 세션 제어 정책을 구현하시길 권장하는 바이다.
요약 및 FAQ
- 라이브 스트리밍 세션 유지 평균시간은?
- 2019년 Conviva 보고서에 따르면 약 26.4분 이며, 라이브 이벤트의 경우에도 보통 3시간을 넘어가지 않는다.
- 비정상 라이브 스트림 세션을 제어해야 하는 이유는?
- 여러가지 형태의 직접/간접 비용을 발생시키며 콘텐츠의 저작권 문제까지 유발할 수 있기 때문이다.
- 비정상 세션을 효과적으로 감지하는 방법은?
- 여러가지 방법 중 가장 손쉽고 효과적인 방법은 시청시간이 비정상적으로 긴 세션을 찾는 것이다.
- 와우자 스트리밍 엔진에서 최대 세션 시간을 제한할 수 있는 방법은?
- ModuleTimedDisconnect 모듈을 사용하면 손쉽게 최대 세션 시간을 제한할 수 있다.
- ModuleTimedDisconnect 모듈로 제어할 수 있는 세션 유지시간의 설정 단위와 정확도는?
- 초 단위로 설정이 가능하다. 하지만 환경에 따라 약간의 지연(약 1~2초)이 발생할 수 있다.
- 긴 세션과 저작권 문제의 관계는?
- 긴 세션의 경우, 스트림을 다운로드 받거나 다른 오리진 서버로 중계해 재전송하려는 의도가 있을 수 있다. 이 경우 콘텐츠의 무단 반출을 방조한 것이 된다. 콘텐츠 제공자는 이러한 것을 매우 중대한 문제로 인식하며, 사용계약 해지 및 손해배상의 사유에도 해당된다.