TECH 으로 돌아가기
TECH HACKER NEWS 어제 6분 읽기 37 READS

내 PC 게임을 거실 TV로, 스팀덱으로 — Rust로 새로 만든 게임 스트리밍 서버 'Moonshine'

내 PC 게임을 거실 TV로, 스팀덱으로 — Rust로 새로 만든 게임 스트리밍 서버 'Moonshine'

방 안 데스크톱에는 빵빵한 그래픽카드가 있는데, 정작 게임은 거실 소파에 누워서 하고 싶을 때 있잖아요. 이럴 때 쓰는 게 '게임 스트리밍'인데요, 클라우드 게임처럼 남의 서버를 빌리는 게 아니라 내 PC에서 게임을 돌리고 그 화면을 실시간으로 다른 기기에 쏴주는 방식이에요. 이 분야에 'Moonshine'이라는 새로운 오픈소스 프로젝트가 등장했어요. Rust로 작성된 게임 스트리밍 서버인데, 기존 생태계와 어떻게 이어지는지 알면 더 흥미로워요.

Moonlight과 Sunshine, 그리고 Moonshine

이 이름들이 뭐냐면, 사실 하나의 계보예요. 원조는 NVIDIA의 'GameStream'이라는 기능이었어요. 지포스 그래픽카드가 있으면 PC 게임을 다른 기기로 스트리밍해주는 기능이었는데, NVIDIA가 2023년에 이 서비스를 접어버렸거든요. 그런데 이 프로토콜을 분석해서 만든 오픈소스 클라이언트 'Moonlight'는 살아남았어요. 받는 쪽(클라이언트)은 있는데 보내는 쪽(호스트)이 사라진 상황이 된 거죠. 그 빈자리를 채운 게 'Sunshine'이라는 오픈소스 호스트고, 지금은 사실상 표준처럼 쓰여요. Moonshine은 여기에 새로 등장한 또 다른 호스트 구현체예요. Moonlight 프로토콜과 호환되게 만들어서, 스팀덱이든 안드로이드 TV든 아이패드든 라즈베리파이든 Moonlight 앱이 도는 기기라면 그대로 클라이언트로 쓸 수 있어요.

어떻게 동작하냐면

게임 스트리밍의 파이프라인은 생각보다 단순하면서도 까다로워요. 먼저 호스트 PC에서 게임 화면을 캡처하고, 이걸 GPU에 내장된 하드웨어 인코더(NVIDIA로 치면 NVENC)로 H.264나 HEVC 같은 영상 코덱으로 실시간 압축해요. 압축된 영상을 네트워크로 쏘면 클라이언트가 받아서 디코딩해 화면에 뿌리고요. 반대로 게임패드나 키보드 입력은 클라이언트에서 호스트로 거슬러 올라가요.

여기서 핵심은 지연시간(레이턴시)이에요. 유튜브 스트리밍은 몇 초 늦어도 아무 문제 없지만, 게임은 버튼을 누르고 화면이 반응하기까지의 왕복이 수십 밀리초 안에 끝나야 해요. 그래서 CPU가 아니라 GPU 하드웨어 인코더를 쓰는 거고, 중간에 쌓이는 버퍼를 최소화하는 설계가 필수거든요. Moonshine이 Rust로 작성됐다는 점이 눈에 띄는 이유도 여기 있어요. Rust는 가비지 컬렉터(안 쓰는 메모리를 자동으로 청소하다가 프로그램을 잠깐 멈추게 하는 장치) 없이도 메모리를 안전하게 다루는 언어라, 이런 실시간 처리와 궁합이 좋거든요. 기존 Sunshine이 C++로 만들어진 것과 대비되는 지점이에요.

다른 선택지들과 비교하면

이 분야엔 선택지가 몇 개 있어요. 스팀에 내장된 'Remote Play'는 설정이 제일 쉽지만 스팀 게임 위주고요. 'Parsec'은 품질이 좋고 원격 데스크톱 용도로도 쓰이지만 상용 서비스예요. Sunshine + Moonlight 조합은 완전한 오픈소스에 화질과 설정의 자유도가 높아서 셀프호스팅 쪽에서 인기가 많죠. Moonshine은 이 조합에서 호스트만 갈아 끼울 수 있는 대안인 셈인데, 아직 초기 프로젝트인 만큼 Sunshine만큼 기능이 넓지는 않을 수 있어요. 대신 새로 시작된 코드베이스라 구조가 깔끔해서 들여다보기 좋다는 매력이 있고요. 하나의 프로토콜을 두고 서버 구현체가 여럿 경쟁하는 그림 자체가 오픈소스 생태계가 건강하다는 신호이기도 해요.

한국 개발자에게는

일단 실용적으로, 집에 게이밍 PC가 있는 분이라면 주말에 한 번 세팅해볼 만해요. 한국은 기가 인터넷과 와이파이 환경이 좋아서 로컬 스트리밍 품질이 잘 나오는 편이거든요. 그리고 공부 소재로도 훌륭해요. 화면 캡처, 하드웨어 인코딩, 실시간 네트워크 전송, 입력 처리까지 이어지는 파이프라인은 화상회의나 원격제어 같은 실시간 미디어 서비스의 축소판이라서, Rust로 시스템 프로그래밍을 배우고 싶은 분에게 살아있는 교재가 될 수 있어요.

정리하면, Moonshine은 회사가 버린 프로토콜 위에서 오픈소스 커뮤니티가 얼마나 단단한 생태계를 키워냈는지 보여주는 프로젝트예요. 여러분은 게임 스트리밍 어떤 조합으로 쓰고 계세요? Sunshine에서 갈아탈 만한 이유가 뭐가 있을지도 궁금하네요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/hgaiser/moonshine
SHARE
처리 중...