한국어
    • 한국어
    • ENGLISH
    • 日本語
    • 中文-繁體

    2020.11.20 Platform

    PC와 모바일의 경계를 넘는 플레이의 시작, 게임 스트리밍 플랫폼 Yeti 개발기

    엔씨의 ‘플랫폼 센터’는 엔씨의 게임과 플레이어를 연결하는 플랫폼을 구축하고 그 기반 기술을 연구개발하는 조직입니다. 2019년, 플랫폼 센터는 국내 최초 스트리밍 플레이 서비스인 ‘Yeti’를 플레이어들에게 선보였습니다. PC 게임을 모바일에서도 플레이할 수 있는 Yeti 서비스는 이를 구현하는 기술뿐만 아니라, 강력한 보안과 안정적인 서비스로도 주목을 받았습니다. 이후 모바일 게임을 PC로 플레이할 수 있는 크로스 플랫폼 ‘퍼플(Purple)’의 게임 스트리밍 서비스 ‘퍼플on’ 개발까지 이어지면서, 엔씨의 다양한 게임이 장소의 한계를 허물며 플레이어들에게 즐거운 경험을 제공하게 되었는데요.

    블로그에서는 ‘퍼플on’ 서비스의 모태가 된 Yeti의 기술 개발 과정을 공개합니다. ‘언제 어디서나 쉽고 안전하게, 그러나 디바이스에 제한되지 않고 단절되지 않는 게임 서비스’를 만들기 위해 거쳐온 숱한 고민들과 그 과정을 공유합니다.

    ‘Yeti’ 개발은 “플레이어들은 어떤 걸 필요로 할까?”라는 궁금증에서 시작되었습니다. 예를 들면 PC에서 플레이하던 게임을 모바일에서 확인할 수 있는 기능이 있으면 좋겠다는 생각 말입니다. 이러한 고민은 스트리밍이나 클라우드 게이밍 서비스라는 용어가 아직 익숙하지 않던 시기부터 시작되었습니다. 2018년 초에는 내부 PoC*를 통해 서비스화 가능성을 확인했고, 곧이어 본격적으로 스트리밍 게이밍 서비스를 준비했습니다. 그리고 2019년, 드디어 Yeti를 세상에 선보였습니다.

    * Poc(proof of concept): 원리 또는 실현 가능성을 입증하기 위하여 어떤 방법이나 아이디어에 대한 실현성을 보여 주는 일.

    엔씨의 자체 기술 스트리밍 & 플레이 플랫폼 'Yeti'

    Yeti는 ‘스트리밍 플레이’ 서비스를 표방하고 있습니다만, 일반적으로 이 서비스는 스트리밍 게이밍 또는 클라우드 게이밍이라는 용어가 통용됩니다. 둘 중 스트리밍 게이밍이 클라우드 게이밍보다 넓은 의미로 사용되며, 스트리밍 게이밍 서비스를 클라우드 환경에서 제공하는 것이 클라우드 게이밍이라고 생각하시면 됩니다. 그러나 대부분의 스트리밍 게이밍 서비스가 클라우드를 기반으로 하는 만큼 스트리밍 게이밍과 클라우드 게이밍을 크게 구분해 사용하지는 않습니다.

    업계 동향을 살펴보면, 해외에서는 Google Stadia, Microsoft Xbox Game Pass Ultimate, nVidia GeForce Now, Amazon Luna, Sony Playstation Now 등 쟁쟁한 업체들이 치열하게 경쟁 중입니다. 국내에서는 이동통신사를 중심으로 SKT와 MS Xbox Game Pass Ultimate, KT 게임박스와 Ubitus, LGU+와 nVidia GeForce Now 등 해외 업체와 제휴 또는 협력을 통해 서비스를 제공하고 있습니다.

    이와 달리 엔씨 플랫폼 센터에서는 오픈소스 기반의 자체 기술로 스트리밍 게이밍 서비스를 개발했고, ‘스트리밍 & 플레이’라는 직관적 의미를 전달하기 위해 ‘스트리밍 플레이 서비스 Yeti’로 발표했습니다. Yeti의 기술은 크로스 플레이 서비스 ‘퍼플’에서 한 단계 더 발전한 형태의 스트리밍 게이밍 서비스 기술로 ‘퍼플on’에 적용되었고 ‘Yeti 스트리밍 플랫폼’으로 발전하고 있습니다. Yeti 스트리밍 플랫폼은 개인 PC 기반의 Yeti 서비스와 퍼플on 서비스 외에 클라우드 기반의 서비스도 준비하고 있습니다. 곧, 플레이어들도 경험할 수 있을 것입니다.

    'Yeti'의 작동 원리

    스트리밍 게이밍 서비스에 사용되는 기술은 크게 캡처링, 인코딩/디코딩, 스트리밍, 이벤트 처리 4가지로 나눌 수 있습니다.

    1) 캡처링(Capturing)

    스트리밍 게이밍을 위한 첫 번째 단계로 사용자의 PC(또는 클라우드 환경)에서 실행된 게임 클라이언트의 비디오/오디오 데이터를 캡처하는 것이 필요합니다.

    Yeti 스트리밍 플랫폼에서 사용하는 캡처링은 윈도우 인터페이스(Windows Interface)를 이용하는 방식과 게임 클라이언트의 비디오/오디오 메모리를 직접 연동하는 방식이 있습니다. 각각 장단점이 있어 필요에 따라 적절히 적용해 사용하고 있습니다.

    윈도우 인터페이스를 이용하는 방식은 표준화된 윈도우 인터페이스를 사용함으로써 게임별 특성에 영향을 받지 않고 비교적 손쉽게 캡처링을 할 수 있다는 장점이 있습니다. 반면 다소 속도가 느리고 각 윈도우 버전에 따른 특성이나 설정의 영향을 받는다는 단점이 있습니다(예: 화면 잠금, 오디오 설정 등).

    이에 반해, 게임 클라이언트의 비디오/오디오 메모리를 직접 연동하는 방식은 게임의 비디오/오디오 API 후킹(Hooking)을 통해 직접 연동함으로써 윈도우 버전별 특성이나 설정의 영향을 덜 받습니다. 그러나 게임 클라이언트가 사용하는 게임 엔진, 오디오 라이브러리 등 게임 클라이언트 환경의 영향을 받는다는 단점이 있습니다(예: OpenGL, Direct X version, Unreal Engine, Unity Engine 등).

    2) 인코딩/디코딩(Encoding/Decoding)

    두 번째로 앞에서 캡처한 비디오/오디오 데이터를 효율적으로 전송하기 위해서는 전송 전 인코딩과 전송 후 디코딩이 필요합니다.

    동영상 스트리밍 서비스에 많이 사용되는 코덱에는 H.264(AVC), H.265(HEVC), VP8, VP9, AV1 등이 있습니다. 동영상 스트리밍 서비스에서는 압축 효율이 좋은 코덱으로 ‘미리’ 인코딩해 두고 클라이언트에 적합한 인코딩 데이터를 보내면 됩니다. 그러나 ‘실시간’ 스트리밍 게이밍 서비스에서는 인코딩 부하, 압축 시간, 압축 효율 등 제약 조건이 훨씬 까다롭게 적용됩니다.

    예를 들어, 실시간 방송 서비스에서는 실시간 인코딩을 하지만 방송 효율을 위해 수초의 지연이 허용됩니다. 하지만 스트리밍 게이밍에서는 사용자가 지연을 느끼면 게임 플레이에 지장을 주게 되므로 최대 100~150ms 이상의 지연은 대상 게임에 따라 서비스 퀄리티에 영향을 줍니다.

    그 외에 압축 시간, 압축 효율 등의 조건을 다 만족하더라도 인코딩 시 하드웨어 부하가 많다면 고사양의 게임을 스트리밍 플레이하기에 적합하지 않습니다.

    3) 스트리밍(Streaming)

    다음으로는 1)과 2)의 과정을 거쳐 압축한 비디오/오디오 데이터를 사용자 PC에서 모바일 디바이스로 실시간 전송하는 기술이 필요합니다.

    Yeti 스트리밍 플랫폼은 오픈소스 실시간 커뮤니케이션 프레임워크인 WebRTC(Web Real-Time Communication)를 기반으로 만들어졌습니다. WebRTC는 구글이 2011년 오픈소스 프로젝트로 공개한 P2P(Peer to Peer) 기반의 실시간 커뮤니케이션 프레임워크로서 Google Meet(Hangout), Facebook Messenger, Discord 등에 사용되었습니다.

    위에 나열한 여러 서비스에 채택되었듯이 WebRTC는 P2P 기반이라 서버 부담 없이 실시간성을 높일 수 있습니다. 사용자 네트워크 환경에 따라 차이가 있지만 통계적으로 평균 80~90%의 사용자가 P2P 연결이 가능하며 나머지 10~20%의 사용자도 릴레이 연결을 통해 실시간 커뮤니케이션이 가능합니다.

    NAT/Firewall 환경에서는 UDP 홀 펀칭(Hole Punching)이라는 기술을 이용해 공용 네트워크에 있는 STUN 서버를 통해 외부에서 접속 가능한 IP, 포트를 찾아 P2P 연결이 가능합니다.
    ** P2P 연결이 어려운 환경에서는 TURN(Traversal Using Relays around NAT) 서버를 통해 릴레이(Relay) 연결해 실시간 커뮤니케이션을 할 수 있습니다.

    * Peer A가 Peer B에 WebRTC 연결되는 과정을 시퀀스 다이어그램으로 표시했습니다.

    4) 이벤트 처리(Event Handling)

    1), 2), 3)의 과정을 거쳐 사용자 PC 상 게임 클라이언트의 비디오/오디오 데이터를 캡처해 실시간 전송에 적합한 형태로 인코딩한 후 스트리밍 전송을 했습니다. 이제 사용자는 모바일 디바이스로 전송된 스트리밍 데이터를 디코딩해 게임 영상과 소리를 재생할 수 있습니다.

    사용자가 스트리밍 ‘플레이’를 즐기기 위해서는 게임 조작이 필요하므로 모바일 디바이스에서 사용자 입력을 받아 원격 PC의 게임 클라이언트에 전달해야 합니다. WebRTC에서 제공하는 Data Channel(데이터 채널)을 통해 비디오/오디오 데이터 외에 사용자 입력과 같은 이벤트를 게임 클라이언트로 전달할 수 있습니다.

    빠르게, 안전하게, 어떤 기기에서도 안정적으로

    WebRTC를 이용해 샘플 실시간 커뮤니케이션 애플리케이션을 만드는 것은 어렵지 않습니다. 그러나 이를 서비스화하기 위해서는 퀄리티 향상을 위해 다양한 노력을 기울이는 것은 물론이고, 다양한 사용자 환경을 고려해야 합니다.

    1) 성능 개선

    구간별 속도 측정

    원격에 있는 두 시스템의 구간별 속도를 측정해 성능 개선 기초자료를 추출하고, 성능 개선 후에는 개선 효과를 정량적으로 측정할 수 있습니다.

    * 자체 제작한 구간별 속도 측정 프로그램의 예

    * 구간별 속도 측정을 위한 값의 정의와 이를 활용한 측정값의 예

    2) 캡처링 개선

    비디오 메모리 복사(Copy) 최적화, 비디오 프레임/해상도 최적화, 오디오 최적화 등 다각도에서 진행되는 개선 작업이 누적되면 레이턴시(Latency, 지연) 최소화를 목표로 하는 스트리밍 게이밍에서 눈에 띄는 개선 효과를 기대할 수 있습니다.

    3) 인코딩 개선

    WebRTC에 기본 탑재된 VP8/9 코덱은 성능이 우수하지만 하드웨어 부하가 많습니다. 서비스에 맞는 최적의 코덱을 선택하는 것도 중요하지만 여기에 하드웨어 가속을 적용하면 인코딩 속도 개선은 물론이고, GPU로 부하를 분산시켜 고사양 게임을 원활하게 실행하는 데 도움을 줄 수 있습니다. 특히 4K 이상의 고해상도 게임을 스트리밍하기 위해서는 고성능 코덱의 적용이 필요하며, 하드웨어 가속이 반드시 지원되어야 합니다.

    * H.264하드웨어 가속 적용 전후 속도 측정의 예

    4) 스트리밍 개선

    스트리밍 게이밍과 같은 인터랙션 스트리밍은 일반 실시간 스트리밍보다 기대하는 실시간성이 훨씬 높습니다. 따라서 부드러운 영상, 영상과 소리의 동기화 등 일반적인 실시간 스트리밍에서 사용하는 FEC(Forward Error Correction), Jitter Buffer, Playout Delay 등을 최소화, 경우에 따라서는 포기함으로써 최소의 레이턴시를 확보할 필요가 있습니다.

    5) 보안 이슈

    스트리밍 게이밍은 게임을 직접 컨트롤하기 때문에 보안 이슈에 철저해야 합니다. 하지만 역으로 캡처 방식에 따라 게임 화면을 캡처하는 과정이 보안 프로그램에 의해 제한될 수 있으므로 이에 대한 대비도 필요합니다. 아이러니하게도 스트리밍 게이밍의 기본이 되는 PC 화면을 캡처해 네트워크로 전송하는 것이 보안 프로그램에서 해킹으로 인지될 수 있기 때문입니다.

    6) 사용자 경험

    사용자 환경에 따른 다양한 고민이 필요합니다. 특히 입력 장치와 대상 게임의 사용자 경험이 다른 경우에는 적절한 사용자 경험의 변환이 필요합니다.

    예를 들어 PC 게임을 모바일 디바이스에서 스트리밍 플레이할 경우, 모바일 디바이스에서의 터치 이벤트를 PC의 마우스 이벤트로 변환해 전달할 때 마우스 오른쪽 클릭을 모바일 디바이스에서 이질감이 없는 터치 이벤트로 구현해야 사용자 경험에 이질감이 생기지 않습니다.

    사용자 입력 장치는 서비스 환경에 따라 마우스, 터치 디바이스, 게임패드 등 다양하게 바뀔 수 있습니다. 따라서 입력 장치에 따른 사용자 이벤트 처리는 스트리밍 게이밍에서 게임성을 높여 주는 요소가 됩니다.

    플레이어에게 새로운 경험을 선사하기 위한, 플랫폼 센터의 도전

    ‘Yeti’ 서비스를 오픈한 지 1년 반, ‘퍼플on’ 서비스를 오픈한 지는 1년이 채 되지 않았습니다. 길다면 길고 짧다면 짧은 시간이 흐르는 동안 스트리밍/클라우드 게이밍 환경에 많은 변화가 있었습니다. 국내외 쟁쟁한 업체들이 모바일을 중심으로 다양한 스트리밍/클라우드 게이밍 서비스를 경쟁적으로 내놓았지만 콘텐츠 부족, 투자 비용 대비 BM의 불확실성 등 아직 시장이 무르익지 않은 상황에서 5G 인프라 역시 더딘 성장을 보이고 있습니다. 이런 흐름을 고려할 때 스트리밍 게이밍이 시장에 안착하기에는 아직 시간이 더 필요할 것 같습니다.

    그러나 ‘Yeti’ 서비스를 만들면서 쌓인 노하우는 ‘퍼플on’을 거치면서 차곡차곡 기술적 성장을 이루고 있고, Yeti 스트리밍 플랫폼은 연계 서비스로 확장해 적용할 수 있는 기반 기술로 발전하고 있습니다. 주변 여건은 쉽지 않지만 이 또한 성장 가능성이 큰 기회로 여기며 Yeti 스트리밍 플랫폼을 더욱 발전시켜 나가고 있습니다. 유저에게 새로운 경험과 가치 그리고 즐거움을 제공하고, 세상을 연결하는 또 하나의 창구가 되기 위해 ‘Connect NC to Universe’를 향한 플랫폼 센터의 도전은 계속됩니다.

    Yeti실