
또 DOOM이요?
DOOM은 1993년에 나온 FPS 게임인데요, 개발자 커뮤니티에서는 "모든 것 위에서 DOOM을 돌린다"는 게 일종의 전통이에요. 임신 테스트기, ATM, 냉장고 화면, 심지어 마인크래프트 안에서 DOOM을 돌린 사람들이 있을 정도거든요. 이번에는 한 발 더 나가서, DNS 레코드만으로 DOOM을 플레이할 수 있게 만든 프로젝트가 등장했어요.
"DNS 레코드로 게임을 돌린다"는 게 대체 무슨 소리인지 감이 안 잡히시죠? 차근차근 풀어볼게요.
DNS가 뭔데요?
먼저 DNS(Domain Name System)를 간단히 짚고 갈게요. 우리가 브라우저에 google.com을 치면, 컴퓨터는 이 이름을 실제 서버의 IP 주소로 바꿔야 해요. 이 "이름 → 주소 변환"을 해주는 시스템이 DNS예요. 전화번호부 같은 거라고 생각하면 돼요.
DNS 레코드에는 여러 종류가 있는데, 가장 흔한 건 A 레코드(도메인 → IP 주소 매핑)이고, TXT 레코드(임의의 텍스트 저장)도 있어요. 이 프로젝트는 바로 이 DNS 레코드의 특성을 기발하게 활용한 거예요.
어떻게 동작하나요?
doom-over-dns 프로젝트의 구조는 이래요. 서버 쪽에서 DOOM 게임 엔진이 돌아가고 있고, 매 프레임의 화면 정보를 DNS TXT 레코드로 인코딩해서 내보내요. 클라이언트는 DNS 질의(query)를 보내서 이 레코드를 받아오고, 받아온 데이터를 디코딩해서 화면에 그려주는 거죠.
플레이어의 입력(앞으로 이동, 총 쏘기 등)은 DNS 질의의 서브도메인 부분에 인코딩돼요. 예를 들어 forward.move.doom.example.com을 질의하면 "앞으로 이동" 명령이 서버에 전달되는 식이에요. 서버는 이 입력을 게임 엔진에 전달하고, 새로운 프레임을 다시 DNS 레코드로 응답하고요.
이게 뭐냐면, 결국 DNS 프로토콜을 데이터 전송 채널로 사용한 거예요. HTTP나 WebSocket 같은 일반적인 통신 방식 대신, DNS라는 아주 원시적이고 제한적인 프로토콜 위에서 게임 데이터를 주고받는 거죠.
당연히 한계가 있어요. DNS 응답의 크기는 제한되어 있고(보통 UDP 512바이트, EDNS로 확장해도 수 KB 수준), 속도도 느려요. 그래서 해상도는 극도로 낮추고, 프레임레이트도 아주 제한적이에요. 쾌적하게 게임을 즐기기 위한 프로젝트가 아니라, "이론적으로 가능한가?"를 증명하는 프로젝트인 거죠.
왜 이런 걸 만들까?
"쓸모없는 짓 아니야?"라고 생각할 수도 있는데, 사실 이런 류의 프로젝트에서 배울 게 꽤 많아요.
첫째, 프로토콜의 본질을 이해하게 돼요. DNS가 결국 "질의와 응답"이라는 단순한 구조라는 걸 체감하게 되고, 이 위에 임의의 데이터를 실어 보낼 수 있다는 걸 직접 확인하게 되거든요. 이건 실제로 보안 분야에서 중요한 개념이에요. DNS 터널링이라고 해서, 방화벽을 우회하기 위해 DNS를 데이터 전송 채널로 사용하는 기법이 실제로 존재하거든요. 기업 보안 팀에서는 이걸 탐지하고 차단하는 게 중요한 과제 중 하나예요.
둘째, 극한의 제약 속에서 최적화하는 경험이에요. 512바이트 안에 게임 화면 한 프레임을 우겨넣으려면 인코딩, 압축, 데이터 표현 방식을 정말 치밀하게 설계해야 해요. 이런 제약 조건 하의 문제 풀이 능력은 임베디드 개발이나 네트워크 최적화 같은 실무에서도 큰 도움이 되고요.
비슷한 프로젝트들
DNS를 창의적으로 활용한 프로젝트는 이것만 있는 게 아니에요. iodine이라는 도구는 DNS 터널링을 통해 IP 트래픽을 DNS 위에 실어 보내는 실용적인 도구이고, dnscat2는 DNS를 이용한 C2(Command and Control) 채널을 구현한 보안 연구 도구예요. DOOM 프로젝트는 이런 개념을 가장 재미있는 방식으로 보여준 사례라고 할 수 있어요.
"모든 것 위에서 DOOM 돌리기" 챌린지도 계속 이어지고 있는데요, 최근에는 PDF 파일 안에서 DOOM을 돌리거나, 키보드의 OLED 스크린에서 DOOM을 돌리는 프로젝트도 나왔어요. 이런 프로젝트들의 공통점은, 특정 플랫폼이나 프로토콜의 한계를 탐구하면서 깊은 기술적 이해를 쌓는다는 거예요.
한국 개발자에게 주는 시사점
이런 프로젝트를 직접 따라 만들어보는 건 네트워크 프로토콜을 공부하는 정말 좋은 방법이에요. DNS의 동작 원리를 RFC 문서로 읽는 것보다, 직접 DNS 레코드에 데이터를 실어 보내보면서 배우는 게 훨씬 기억에 남거든요.
특히 보안 분야에 관심이 있다면 DNS 터널링은 반드시 알아둬야 할 개념이에요. CTF(Capture The Flag) 대회에서도 DNS 관련 문제가 자주 출제되고, 실무에서 네트워크 이상 탐지를 할 때도 DNS 트래픽 분석은 기본 중의 기본이에요.
GitHub에서 코드를 직접 살펴볼 수 있으니, 주말에 시간 여유가 있다면 한번 클론 받아서 돌려보는 것도 추천해요.
마무리
"쓸모없어 보이는 것"을 만드는 과정에서 가장 깊은 학습이 일어나요. DNS 위에서 DOOM을 돌리는 건 장난처럼 보이지만, 그 안에는 프로토콜 설계, 데이터 인코딩, 네트워크 최적화에 대한 진지한 고민이 담겨 있거든요.
여러분이 만약 "쓸모없지만 기술적으로 도전적인" 프로젝트를 하나 만든다면, 어떤 걸 만들어보고 싶으신가요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공