터미널에서 curl로 둠을 플레이하는 시대
개발자라면 한 번쯤 "이걸 이렇게까지 해야 하나?"라고 생각하면서도 결국 끝까지 만들어버리는 프로젝트를 본 적 있을 거예요. 이번에 등장한 curl-doom이 딱 그런 프로젝트인데요. 말 그대로 터미널에서 curl 명령어 하나를 치면 1993년에 나온 전설의 FPS 게임 둠(DOOM)을 플레이할 수 있게 만든 거예요.
curl이 뭐냐면, 터미널에서 URL을 통해 데이터를 주고받을 때 쓰는 아주 기본적인 도구거든요. 보통은 API 테스트하거나 파일 다운로드할 때 많이 쓰는데, 이걸 게임 클라이언트로 쓴다는 발상 자체가 상당히 기발해요.
어떻게 동작하는 걸까?
이 프로젝트의 핵심 아이디어는 생각보다 단순하면서도 영리해요. 서버 쪽에서 둠 게임 엔진이 돌아가고 있고, 매 프레임마다 게임 화면을 ASCII 아트 또는 ANSI 이스케이프 코드로 변환해서 HTTP 응답으로 스트리밍하는 방식이에요.
좀 더 풀어서 설명하면 이런 구조예요. 서버에서는 둠 엔진(보통 C로 작성된 오픈소스 구현체)이 돌아가면서 게임 상태를 계속 업데이트하고, 각 프레임을 렌더링해요. 그런데 이 렌더링 결과를 모니터에 띄우는 게 아니라, 터미널에서 표현할 수 있는 문자 기반 그래픽으로 변환하는 거예요. 그리고 이걸 HTTP chunked transfer encoding이라는 방식으로 클라이언트에 계속 흘려보내요. chunked transfer encoding이 뭐냐면, 전체 응답의 크기를 미리 알려주지 않고 데이터를 조각조각 나눠서 보내는 HTTP 기법인데요, 라이브 스트리밍처럼 데이터를 실시간으로 계속 전달할 수 있게 해주는 거예요.
사용자 입력은 curl의 인터랙티브 기능을 활용하거나, 별도의 입력 채널을 통해 서버로 전달돼요. 방향키나 슈팅 같은 기본적인 게임 조작이 가능하도록 키 매핑이 되어 있고요.
"It runs DOOM" 밈의 계보
사실 둠을 별의별 기기에서 돌리는 건 개발자 커뮤니티에서 하나의 전통 같은 거예요. 이걸 "It runs DOOM"이라는 밈으로 부르는데, 임신 테스트기, ATM 기기, 트랙터 계기판, 심지어 세균 배양체 안에서까지 둠을 돌린 사례가 있어요. 둠이 이런 밈의 대상이 된 이유는 게임 자체가 1993년 작품이라 요구 사양이 매우 낮고, id Software가 소스 코드를 공개한 덕분에 다양한 환경으로 포팅하기 쉽기 때문이에요.
curl-doom이 재미있는 건 하드웨어가 아니라 프로토콜 위에서 둠을 돌렸다는 점이에요. 지금까지는 주로 "이 기기에서 둠이 돌아간다"가 포인트였다면, 이번에는 "HTTP 프로토콜과 curl이라는 CLI 도구만으로 게임이 된다"는 새로운 방향의 도전이거든요. 비슷한 맥락에서 SSH 위에서 게임을 돌리는 프로젝트나, 텔넷으로 스타워즈 에피소드 4를 ASCII로 보여주는 towel.blinkenlights.nl 같은 클래식 프로젝트도 있었어요.
기술적으로 배울 점
장난처럼 보이지만 이 프로젝트에서 배울 수 있는 기술적 포인트가 꽤 있어요.
첫 번째로 HTTP 스트리밍의 활용이에요. chunked transfer encoding이나 Server-Sent Events 같은 HTTP 스트리밍 기법은 실무에서도 많이 쓰여요. 챗봇 응답을 실시간으로 보여준다거나, 로그를 실시간으로 모니터링하는 대시보드를 만들 때 이런 기술이 필요하거든요. curl-doom은 이런 스트리밍 기법을 극단적으로 활용한 사례라 원리를 이해하는 데 좋은 참고 자료가 돼요.
두 번째는 터미널 그래픽 렌더링이에요. ANSI 이스케이프 코드를 사용해서 터미널에 색상과 위치를 제어하는 기법은 CLI 도구를 만들 때 유용해요. 예쁜 프로그레스 바나 대시보드를 터미널에 그리는 TUI(Terminal User Interface) 라이브러리들이 내부적으로 같은 원리를 쓰고 있어요.
세 번째는 서버-클라이언트 아키텍처에 대한 색다른 시각이에요. 모든 게임 로직이 서버에서 돌아가고 클라이언트는 순수하게 렌더링만 담당하는 구조는 사실 클라우드 게이밍 서비스의 기본 원리와 같아요. NVIDIA GeForce Now나 Xbox Cloud Gaming 같은 서비스가 바로 이런 방식이거든요. 물론 이런 서비스들은 비디오 코덱으로 압축하지만, 근본적인 아키텍처는 curl-doom과 크게 다르지 않아요.
한국 개발자에게 주는 시사점
실무에서 curl-doom을 쓸 일은 당연히 없겠지만, 이런 프로젝트가 주는 가치는 다른 데 있어요. 하나의 도구를 본래 목적과 전혀 다르게 활용해보는 실험은 그 도구의 한계와 가능성을 깊이 이해하게 해주거든요. curl의 스트리밍 기능, HTTP 프로토콜의 유연성, 터미널의 렌더링 능력 — 이런 것들을 평소에는 피상적으로만 알고 있다가 이런 프로젝트를 통해 "아, 여기까지 가능하구나"하고 체감하게 되는 거예요.
또 개인 프로젝트나 포트폴리오 관점에서도 이런 "장난 같지만 기술적으로 탄탄한" 프로젝트는 좋은 레퍼런스가 돼요. 면접에서 "curl로 둠 돌리는 프로젝트를 분석해봤는데, HTTP 스트리밍이 이렇게 동작하더라"고 이야기할 수 있다면 꽤 인상적이겠죠.
마무리
한 줄로 정리하면, curl-doom은 HTTP 스트리밍과 터미널 렌더링을 극한까지 활용해서 게임을 돌린 창의적인 실험이에요. 기술의 깊이를 보여주는 동시에 개발의 재미가 뭔지 떠올리게 해주는 프로젝트예요.
여러분이라면 평소 쓰는 도구를 가장 엉뚱한 방식으로 활용한다면 뭘 만들어보고 싶으세요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공