Open Infrastructure Community Day Korea 2020는 오픈소스 Infrastructure를 주제로 하는 콘퍼런스답게 콘퍼런스 운영과 영상 송출 시스템 등 모든 인프라가 오픈소스와 클라우드 기술의 환상적인 조화를 통해 만들어졌습니다. 이번 콘퍼런스에 네이버 클라우드에서 네이버 클라우드 플랫폼을 후원해주셨습니다. 한 달이라는 짧은 준비 기간 동안 영상 송출 상품(Live Station)과 CDN 그리고 가상서버와 OBS(Open Broadcast System)을 활용하여 발표 영상을 안정적으로 송출할 수 있었습니다. 이 글에서는 우리가 네이버 클라우드 플랫폼과 OBS로 어떻게 콘퍼런스 영상을 송출했는지 소개합니다.
클라우드와 OBS를 활용하여 온라인 콘퍼런스를 운영한 경험을 이야기하는 글로, OBS의 직접적인 사용 방법은 다루지 않습니다.
왜 유튜브나 줌이 아닌 자체 영상 송출 인프라를 만들었나요?
발표 영상은 미리 녹화되어있어서, 사실 가장 쉬운 방법은 유튜브에 영상을 올려두고 행사 당일 공개하는 방법입니다. 행사를 준비하는 초반에 이런 상황에 대한 해결방법을 마련해놓고 싶었습니다. ‘발표 영상이 갑자기 바뀔 때에는?’ ‘참가자들에게 쉬는 시간에 새로운 안내 메시지를 보내고 싶을 때?’ ‘새로운 영상을 추가하고 싶다면..?’
다른 플랫폼을 사용하더라도 각각의 상황에 맞는 대처방안은 찾을 수 있지만, 최대한 사람들의 페이지 이동을 줄이면서 마치 방송을 보듯이 한 페이지에서 계속 발표를 볼 수 있고 운영진도 실시간 대응이 가능한 영상 송출 환경을 만들고 싶었습니다.
그리고 오픈소스 Infrastructure를 주제로 하는 콘퍼런스인 만큼, 기술적인 시도를 해보고 싶었던 마음도 일부 담아 OBS를 이용해서 영상 송출 인프라를 구성하였습니다.
어떤 기술을 사용해야 할까?
행사가 크게 성행해서, 많은 사람이 동시에 접속해서 영상을 보더라도 버퍼링이 없으면서 고화질의 영상을 볼 수 있는 환경을 어떻게 만들어야 할지 고민이 많았습니다. 다행히 네이버 클라우드 플랫폼에는 “Live Station” 이라는 우리의 요구사항을 다 만족시켜주는 좋은 상품이 있었습니다. Live Station은 RTMP 프로토콜을 지원하며 OBS에서 RTMP 주소를 Live Station에서 제공하는 주소를 사용할 수 있습니다. 그리고 송출되는 영상은 CDN에 자동으로 올라가서 HLS, DASH 프로토콜로 사용자에게 전달되는 구조입니다. 참가자에게 영상을 안정적으로 전달하는 환경은 “Live Station”을 사용하기로 했습니다.
그다음으로 고민해야 하는 것은 송출할 컴퓨터를 마련해야 합니다. 몇 번의 테스트 결과 개인 컴퓨터에 OBS를 설치하고 영상을 “안정적으로” 송출하기 위해서는 안정적인 인터넷 환경과 좋은 CPU가 필요하다는 결론을 내렸습니다. 좋은 CPU는 지극히 주관적인 기준이지만, OBS 송출을 하는 순간 그 컴퓨터는 송출용으로만 써야 하는 단점이 생깁니다. 행사 당일에는 영상 송출 외에도 많은 일을 동시에 해야하기에 개인 컴퓨터를 이용하는 것은 큰 무리가 있었습니다. 무엇보다 4개 트랙을 송출할 4대의 컴퓨터를 구하고 각각의 인터넷 환경도 안정적으로 만들기는 어려웠습니다.
어느 날 Live Station이 네이버 클라우드 플랫폼에 있으니, 원본 영상을 송출하는 곳도 네이버 클라우드 플랫폼에 있으면 안정적이지 않을까? 라는 생각이 들었습니다. 우리는 OBS로 영상을 송출하는 시스템을 네이버 클라우드 플랫폼에서 제공하는 윈도우 서버 vm에서 테스트해보았고, 현장에 여러 문제가 생기더라도 영상은 네이버 클라우드 플랫폼에서 안정적으로 송출할 수 있음을 확인하였습니다. OBS는 생각보다 메모리를 많이 사용하지 않고, CPU를 많이 사용하고 있었습니다. 그래서 최종적으로 송출용 VM의 성능은 8vCPU, 16GB Mem로 선택하였습니다.
아키텍처
여러가지 시행착오를 통해 만들어진 최종 모습입니다. 영상 송출 인프라뿐 아니라 대용량의 영상 파일을 빠르게 주고받을 수 있도록 발표자 / 스튜디오와 공유하는 저장소를 기가비트 수준의 네트워크로 구성했습니다. 이 글을 빌어 넉넉한 저장공간과 좋은 네트워크 환경을 제공해준 Cafe24에 감사의 인사를 드립니다.
발표자 / 스튜디오와 영상을 공유하는 저장소는 Ubuntu 서버에 owncloud(https://owncloud.com/) 를 설치해서 운영했습니다. 구글 드라이브를 이용해 공유하는 것 보다 저장공간의 제약이 적고, 무엇보다 파일 전송에 네트워크 속도가 안정적인 환경이 필요하여 owncloud를 이용해 영상 파일을 공유했습니다.
OBS가 설치된 윈도우 vm으로 영상 스트림을 Live Station에서 제공하는 RTMP 서버로 전송하고, CDN을 통해 사용자에게 전달되는 구조입니다. 모든 스트리밍이 네이버 클라우드 내부에서 이루어지므로, 운영진이 모인 장소의 네트워크 상황이 좋지 않더라도, 발표 영상은 안정적으로 송출할 수 있었습니다.
ownCloud를 직접 구축하고 싶다면, 네이버 클라우드 플랫폼을 활용한 ownCloud 파일 공유 서비스 구축하기 를 참고하시면 큰 도움이 됩니다.
OBS 설정 및 운영하기
발표 영상을 송출하는 가장 쉬운 방법은 트랙의 모든 발표 영상과 쉬는 시간 영상을 하나의 긴 영상 파일로 합쳐서 행사 당일에는 영상 재생만 하는 것입니다. 이를 위해서 적어도 행사 3일 전에는 모든 발표 영상이 준비되어야합니다. 하지만 30여개의 발표가 3일전에 완성본이 나오기는 현실적으로 어려웠습니다. 여러 가지 상황으로 트랙의 모든 발표를 하나의 영상으로 만들지 못하고 OBS에서 사람이 손으로 조작하는 방향으로 준비했습니다. 그리고 이 방식이 행사 날 정말 유연하게 운영할 수 있는 가장 큰 이유가 되었습니다.
Scenes 만들기
발표, 쉬는 시간, 대기 화면을 모두 시간표 순으로 Scene으로 만들고, 발표가 끝나거나 시작하는 시간에 맞춰서 영상을 Transition 하는 방식으로 운영했습니다.
위는 실제로 행사를 위해 설정한 Scenes입니다. 오프닝 전 대기화면부터 클로징까지 모두 Scene으로 만들었고, Track 4개 vm에 모두 동일하게 설정해주었습니다. 트랙별 Scene의 Source는 “다음 발표 안내 이미지”와 “발표 영상”으로 구성하고, 쉬는 시간 Scene은 “ 다음 발표 안내 이미지”와 “스폰서 홍보 영상”으로 구성하였습니다.
화면 전환
발표 영상이 끝나고 쉬는 시간 영상으로 넘어갈 때, 쉬는 시간 영상에서 발표 영상으로 넘어갈 때 모두 사람이 조작해야 합니다. 이전 영상을 중지하고 새로운 영상을 재생하는 지연 시간 없이 화면을 전환할 때 가장 필요한 기능은 다음에 보일 영상을 미리 보고 정상 여부를 확인하는 것입니다. OBS의 왼쪽 아래에 controls 패널에는 Studio Mode 버튼이 있습니다.
이 버튼을 누르면 하나의 화면만 나오던 구성이 아래와 같이 2개로 보이게 됩니다. 왼쪽 화면은 전환할 화면 미리 보기, 오른쪽 화면은 현재 송출 중인 화면입니다.
이 구성을 통해 다음 화면을 준비하면서 화면 크기가 안 맞거나, 재생되지 않는 문제를 확인할 수 있었습니다. 정말로 실시간 방송을 하고 있지만, 방송국에서 방송하는 느낌도 들어서 꽤 재미있었습니다. 발표 종료 후 쉬는 시간 영상은 발표마다 끝나는 시간이 다르기 때문에 영상이 끝나는 시점에 맞춰서 쉬는 시간 영상으로 전환하면 되지만, 발표 시작은 모든 세션이 동일하므로 트랙별 OBS 담당자가 신호에 맞춰 발표 영상으로 전환하였습니다.
VM 리소스 사용량
OBS로 송출할 때 의외로 CPU 사용량이 많았습니다. 그래픽카드가 있었다면 결과가 다를 수 있겠지만, 클라우드의 VM을 이용할 경우 CPU 코어는 8개로 할당하는 것이 안정적인 운영에 큰 도움이 되는 것을 경험했습니다. 위 화면은 행사 당일 VM의 리소스 사용량을 캡처한 것입니다. CPU는 모든 코어가 약 50%의 사용률을 보였습니다. 네이버 클라우드 플랫폼에서 제공하는 모니터링 지표를 봐도, 꾸준히 50%~60%의 사용량을 보이었습니다.
메모리 사용량도 6GB~7GB를 사용하며, 생각했던 것보다 많은 사용량은 아녔습니다. 네트워크 사용량이 예상을 벗어나서 매우 놀랐습니다. 1080p 의 고화질 영상을 송출하면서 네트워크 사용량이 매우 많고 높은 bandwidth가 필요할 것으로 예상했었습니다. 하지만 실제로 송출을 해본 결과, 캡처한 이미지를 보면 알 수 있듯이 2~3Mbps 정도의 bandwidth를 사용하는 것을 볼 수 있습니다. 네이버 클라우드 플랫폼 모니터링의 네트워크 outbound 지표는 30분 간격으로 합산되어 비교적 낮은 수치를 보이지만 네트워크 bandwidth 는 매우 낮은 수치입니다.
그렇다면 네트워크가 크게 중요하지 않은 것인지 생각해볼 수 있는데 여기에는 rtmp 서버까지의 latency는 측정되지 않았기 때문에, bandwidth만 가지고 네트워크가 큰 고려사항이 되지 않는다고 판단하기는 어렵지 않을까 생각합니다.
정리하면, 한 트랙의 영상 송출용 vm의 스펙은 다음과 같습니다.
- CPU : 8core
- Memory: 16GB
- 네이버 클라우드 플랫폼의 서버 스펙 코드 : [Standard] 8vCPU, 16GB Mem, 100GB Disk [g1]
Live Station 설정
OBS에서 재생하는 영상을 스트리밍할 대상이 필요합니다. youtube로 송출할 경우 youtube의 RTMP 서버를 OBS에 설정하면 되지만, 우리는 네이버 클라우드 플랫폼의 Live Station을 이용했습니다. Live Station의 가장 큰 장점은 송출을 미리 테스트해볼 수 있다는 것과 CDN에 바로 적용해준다는 점입니다. Live Station 상품을 활성화한 후, 채널 생성 버튼으로 Live 채널을 생성합니다. 채널을 생성하는 과정은 매우 간단합니다. 이름과 화질을 선택하고 마지막으로 DVR을 사용할 것인지 체크합니다.
설정을 완료하면, 다음과 같이 채널 정보가 표시됩니다. 여기에서 화질별 play url 을 얻을 수 있고 가장 중요한 스트림 정보를 확인할 수 있습니다.
스트림 정보 옆의 버튼을 클릭하면 다음과 같이 rtmp 서버 주소와 스트림키를 확인할 수 있습니다. 이 정보를 OBS의 스트리밍 정보에 넣으면 송출할 준비가 끝납니다.
OBS에서 송출하는 화면을 미리 보고 싶다면, “모니터링” 버튼을 눌러 방송될 화면을 미리 볼 수도 있습니다. 이 기능으로 OBS 설정을 이리저리 변경하며 최적의 방송 설정을 만들 수 있었습니다.
인력 분배
준비 과정만큼이나 중요한 것이 행사 당일 원활한 운영입니다. 특별한 문제가 생기지 않는다면 4개 트랙을 혼자서 조작할 수 있지만, 문제가 생길 경우 그 문제를 해결하다 보면 4개 트랙 모두 원활하게 운영하지 못하는 경우가 생깁니다. 온라인 콘퍼런스를 준비하고 운영하는 대부분의 행사 운영진이 고민했을 문제로 행사 당일 인력을 어떻게 분배할 것인가 그리고 필요한 장비는 무엇인가에 대한 내용입니다.
우리는 아래와 같이 인력을 분배했습니다.
- 발표 트랙 OBS 운영 : 4명
- OBS를 직접 조작하는 사람으로, 행사 시작부터 종료까지 OBS 조작만 담당합니다.
- 발표 영상이 재생되는 동안은 특별히 할 일이 없지만, 이 사람에게 그 시간 동안 다른 일을 주어서는 안 됩니다.
- 참가자 및 관계자(발표자/스폰서) 문의 대응 : 1명
- 행사 당일 문의 사항에 대응하는 일은 매우 중요합니다. 운영진은 행사의 모든 내용을 알지만 참가자와 관계자는 그렇지 않기 때문입니다.
- 문의가 전혀 오지 않을 수 있지만 SNS 반응을 포함해 참가자 반응을 지속해서 모니터링할 인원은 필요합니다.
- 문제가 있는 영상 실시간 편집 : 1명
- 행사 날에는 모든 영상이 완벽한 상태로 준비되면 최상의 상태입니다. 하지만 간혹 영상에 문제가 있다는 것이 뒤늦게 발견되거나, 급하게 편집이 필요한 경우가 있습니다.
- 그 외에 급하게 영상을 만들어야 하는 경우 (공지용 / 갑자기 떠오른 아이디어를 방송하기 위해 등.) 를 대비하기 위한 인력을 배치합니다.
- 운영 총괄 및 인프라 모니터링 : 1명
- 총괄은 언제나 필요합니다. 모든 상황을 알고 있으며, 문제가 생겼을 때 대응하고 의사 결정할 사람이 필요합니다.
- 또한, 송출 시스템들이 정상적으로 작동하고 있는지 전체적인 인프라 현황을 모니터링하는 역할을 수행하며 행사가 잘 운영될 수 있도록 지원하는 인력입니다.
전체 비용
온라인 콘퍼런스의 모든 인프라를 클라우드에 구축하여 하루 동안 진행한 비용입니다. 이 자료를 토대로 앞으로 상용 솔루션이 아닌 자체적으로 플랫폼을 구축하여 온라인 콘퍼런스를 진행하는 커뮤니티에 많은 도움이 되기를 희망합니다.
- Instance : 약 57만원 (1개월 사용 기준)
- Network: 약 2만 원
- Live Station : 약 30만 원
- 채널 개수 : 4채널
- 채널 당 사용 시간 : 약 12시간
- 트랜스코더 개수 : 16 (채널당 4개)
- 1080p + 720p + 480p + 360p
- CDN (4개) : 약 10만 원
- 총 : 약 100만 원
Zoom이나 다른 화상회의 / 콘퍼런스 솔루션을 이용하는 것에 비해 비용은 많이 들지만, 오픈소스 인프라 커뮤니티인 만큼 오픈소스와 클라우드를 활용해 온라인 콘퍼런스를 진행했다는 점에서 의미 있는 시도라고 생각합니다.
마치며
“OBS와 클라우드를 이용해 온라인 콘퍼런스 운영하기”는 성공적이었습니다. 행사 시작부터 클로징 영상까지 모든 영상이 매우 매끄럽게 재생이 되었고, OBS Scene을 세분화한 덕분에 급하게 영상을 교체해야 하는 경우에도 유연하게 대응할 수 있었습니다. 그리고 네이버 클라우드 플랫폼의 live station의 안정적인 인프라 덕분에 참가자분들도 영상의 끊김이나 지연 없이 원활하게 시청할 수 있었습니다.
우리의 이 경험을 통해 많은 커뮤니티에서 오픈소스와 클라우드를 활용해 다양한 모습의 온라인 콘퍼런스를 개최해볼 수 있기를 기대합니다.
P.S OBS 프로젝트에 후원
오픈소스 프로젝트의 도움으로 온라인 행사를 성공적으로 진행하였고, 그에 대한 감사의 의미로 행사 후 남은 금액의 일부를 OBS 프로젝트에 기부하였습니다.