ilreb이라는 개발자가 1996년 고전 게임 엔진인 Quake를 최신 웹 브라우저 안으로 옮겨왔다. Quake-SRP(slop rust port)라는 이름의 이 프로젝트는 외부 종속성을 일절 배제했으며, 코드베이스 전체에서 단 한 줄의 unsafe 블록도 허용하지 않는다. 30년 전의 C 언어 소스 코드를 온전히 안전한 Rust로 번역한 뒤 WebAssembly로 컴파일하여 백그라운드 Web Worker에서 구동한다. 사용자는 로컬 디스크에 보관된 순정 pak1.pak 파일이나 공식 미션 팩, 심지어 CD 오디오 트랙까지 브라우저 화면에 직접 드래그 앤 드롭하여 플레이할 수 있으며, 모든 연산은 외부 전송 없이 로컬 기기에서 완전히 수행된다.
C 소스 전체를 WASM으로 컴파일해 Web Worker에 위임하다
id Software가 1996년에 오픈소스로 공개한 Quake 소스 코드는 수동 메모리 관리와 포인터 연산으로 얽힌 거대한 미로와 같다. 이번 이식 프로젝트에서 개발자는 WebGL이나 WebGPU를 활용한 현대적인 GPU 가속 렌더링 경로를 선택하는 대신, 원작 WinQuake의 CPU 소프트웨어 래스터라이저와 8비트 색상 팔레트를 그대로 보존했다. WebGL2는 최종 계산된 프레임버퍼 픽셀을 화면에 복사해 뿌려주는 마지막 블릿(blit) 작업만을 담당한다. 에피소드 2부터 4까지의 콘텐츠를 담은 pak1.pak과 미션 팩의 pak0.pak, 배경음악용 CD 오디오 트랙까지 브라우저에 바로 끌어다 놓을 수 있으며, 어떤 데이터도 브라우저 밖으로 빠져나가지 않는다.
저수준 하드웨어 제어에 깊게 의존하던 고전 세대의 엔진을 Web Worker 안에 격리하는 것은 구조적인 차원의 근본적 전환이다. 모든 WebAssembly 로직은 백그라운드 스레드에서 CPU 단일 코어를 온전히 사용하며 실행되고, 메인 스레드는 마우스와 키보드 입력 이벤트를 전달하고 공유 메모리(SharedArrayBuffer)에서 렌더링된 픽셀 화면과 오디오 스트림을 가져오는 역할만 맡는다. 최신 GPU 하드웨어 파이프라인을 과감히 포기하고 브라우저 단일 코어의 연산력으로 30년 전 소프트웨어 렌더링 로직을 정면 돌파한 선택은, 복잡한 런타임 환경에서 발생하는 실행 불확실성을 최소화하는 결과로 이어졌다. 투박해 보이는 이 접근법 덕분에 자칫 방향을 잃기 쉬웠던 방대한 크로스 플랫폼 재구축 작업이 순수한 입출력 번역 문제로 단순화되었다.
완성도를 판가름하는 기준: 프레임 단위 픽셀 비교
Quake-SRP 프로젝트를 지탱하는 진정한 엔지니어링의 핵심은 자동화된 검증 프레임워크다. 대규모 언어 모델(LLM)을 활용한 코드 이식의 정확성을 엄격히 보장하기 위해, 개발자는 원본 WinQuake C 소스 코드로부터 헤드리스(headless) 바이너리를 별도로 컴파일하여 전체 테스트 파이프라인의 유일한 기준 진실(오라클)로 삼았다. 테스트 스위트는 몬스터들이 활성화된 상태의 9개 맵, 2가지 해상도에서 수백 개의 프레임을 실행하며, 새로 작성된 엔진의 렌더링 픽셀, UI 요소, 오디오 출력 파형, 데모 재생 중 게임 내부 상태를 C 레퍼런스 구현체와 프레임 단위로 철저하게 대조한다. README 문서는 확인된 차이점을 투명하게 기록하고 있을 뿐, 검증되지 않은 무결성을 섣불리 단언하지 않는다.
에뮬레이터 개발 생태계에서 시각적 회귀 테스트는 낯선 개념이 아니며, Dolphin 같은 프로젝트는 포괄적인 시각적 CI 파이프라인을 오랜 기간 운용해 왔다. 그러나 3D 렌더링 시퀀스 전체를 프레임 단위의 픽셀로 비교하고 밉맵(mipmap) 샘플링 경계나 조명 그라데이션의 미세한 차이까지 제어하는 작업은 프런트엔드의 DOM 스냅샷 테스트와는 차원이 다른 난도를 지닌다. 모델이 한 번에 얼마나 많은 코드를 쏟아낼 수 있는가는 성공을 결정짓는 핵심이 아니며, 기계가 픽셀 단위의 오차를 스스로 식별할 수 있는지가 코드 생성을 현실 세계에 안착시키는 핵심 닻 역할을 한다. 레퍼런스 오라클이 녹색 불을 켜지 않는다면 아무리 문법적으로 유려한 코드라도 결코 채택될 수 없다.
그림: Classic 프리셋 환경의 E1M1 화면(1280×960). 원작 WinQuake의 동작을 정확하게 재현한다. 출처: quake-srp 저장소 스크린샷
그림: 기본 프리셋 환경에서의 동일한 스테이지(1920×1080). 와이드스크린 시야각과 프레임 제한 해제가 적용되어 있다. 출처: quake-srp 저장소 스크린샷
모든 테스트 통과 시에만 브랜치를 머지하는 조정 에이전트
프로젝트 저장소의 README에는 인간과 기계 사이의 명확한 역할 분담이 상세히 기록되어 있다. Claude(Claude Code 환경)가 코드 작성, 리팩터링, 문서화의 주요 집필자 역할을 수행했고, 인간 엔지니어는 제약 조건 설정, 실제 플레이를 통한 동작 검증, 버그 보고, Git 브랜치 간 작업 조율을 전담했다. 나아가 프로젝트에는 조정(chair) 에이전트가 별도로 배치되어 모든 자동화 테스트와 시각 검증을 완벽하게 통과한 브랜치만을 메인에 병합했다.
이러한 협업 구조는 코드의 정확성을 판별하는 고된 검증 작업을 결정론적인 레퍼런스 구현체에 위임함으로써, 인간이 기계가 생성한 코드를 한 줄씩 들여다봐야 하는 검토 부담을 완전히 덜어주었다. 프로젝트는 원작의 동작을 충실히 모사하는 ?classic 파라미터와 더불어, 와이드스크린 뷰포트와 프레임레이트 제한 해제를 기본 적용한 ?slop 모드를 제공한다. 인간은 최종 산출물의 플레이 경험 품질에 대해서만 책임을 지며, 시행착오와 메모리 누수, 포인터 경계 침범을 수정하는 반복 비용은 생성기 루프 안에서 완전히 해소되었다.
그림: 원근 텍스처 매핑의 화면 정렬 비교 다이어그램. 프로젝트 자체 시각 검증 도구가 실행 중 추출한 슬라이스다. 출처: quake-srp 저장소 스크린샷
메인프레임의 레거시 COBOL 전환으로 확장 가능한 청사진
Quake 엔진의 재구축은 고전 게임 복원의 가치를 넘어, 소프트웨어 엔지니어링 업계가 안고 있는 가장 거대한 기술 부채를 해결할 실마리로 주목받았다. Hacker News의 토론에서 한 개발자는 유사한 엔진 리버스 엔지니어링 작업에 Claude를 활용한 경험을 공유했다. 모델이 스스로 리플레이 스크립트를 실행하고 주기적으로 스크린샷을 찍어 양방향 검증을 수행했으며, 원본 코드를 분석해 상태 머신이 결정론적으로 작동하도록 패치를 적용했다는 것이다. 기계 주도의 검증과 코드 재작성이 충분히 신뢰할 만하다는 사실이 확인되자, 토론은 자연스럽게 핵심 금융 시스템을 여전히 지탱하고 있는 메인프레임의 COBOL 현대화 과제로 이어졌다.
천문학적인 수작업 검증 비용과 일일이 파악하기 힘든 예외 로직의 미로는 금융권의 핵심 시스템이 오랫동안 클라우드 네이티브 아키텍처로 전환되지 못한 근본적인 원인이다. 비즈니스 로직 자체는 레거시 코드 안에 고스란히 기술되어 있지만, 복잡하게 얽힌 종속성 때문에 누구도 시스템 재구축의 책임을 지려 하지 않았다. 바로 이 지점이 고정밀 오라클 기반의 양방향 검증 체계가 가장 강력한 위력을 발휘하는 영역이다. 정밀한 입출력 대조 검증기가 안정적으로 가동되는 순간, 메인프레임의 구조 전환은 팀의 명운을 건 위험천만한 모험에서 컴퓨팅 파워와 개발 일정을 투입해 위험을 상쇄하는 계산된 리팩터링 공정으로 탈바꿈한다.
프로토콜 인터페이스 위조로 악용될 수 있는 이중성
그러나 이러한 기술적 역량이 긍정적인 방향으로만 작용하는 것은 아니다. 코드 생성 모델과 자동 검증기로 구성된 피드백 루프가 오류 수정과 차이 대조를 거듭하여 1990년대의 복잡한 3D 엔진을 손실 없이 번역해낼 수 있다면, 이는 미지의 폐쇄형 시스템이 지닌 내부 상태 전이 규칙을 분석하고 복제해내는 역량 역시 갖추었음을 의미한다. 개발자 커뮤니티의 또 다른 논점은 이 기술의 공격적 잠재력에 집중되었다. 이러한 고효율 블랙박스 리버스 엔지니어링이 기간 인프라를 표적으로 악용될 경우, 기존 방어 체계를 기만할 수 있는 위조 명령 체계나 가짜 통신 인터페이스가 손쉽게 만들어질 수 있다는 경고다. 일각에서는 복제 가능한 시스템 자체가 ‘모호성을 통한 보안’에 안주했을 뿐이라며 이를 드러내는 것이 시스템 쇄신을 촉진할 것이라고 반박했으나, 산업용 제어 시스템(HMI)의 명령 규격이 복제될 경우 초래될 파급력은 단순 금융 거래 사고와는 비교할 수 없다는 재반박이 곧바로 이어졌다.
차이점의 특성을 식별하고 논리적 빈틈을 메워나가는 모델의 본질은 계산 가능한 논리 체계를 끊임없이 근사해가는 최적화 장치에 불과하며, 분석 대상이 오픈소스 게임인지 엄격히 통제된 산업 제어 기반인지 구분하지 않는다. 다시 Quake-SRP 프로젝트로 돌아오면, 단 한 줄의 unsafe도 없는 Rust 코드가 입증한 사실은 명료하다. 방대하고 오래된 논리의 미로와 마주했을 때, 인간이 인공지능이 생성한 코드의 바다에서 직접 오류를 건져 올리려 애쓰기보다는 극도로 정밀한 자동화 픽셀 검증기를 구축하는 데 집중해야 한다는 점이다. 이 정밀 검증기는 레거시 시스템을 부활시키는 강력한 엔진이자, 코드 생성 인공지능을 통제하는 확고한 안전장치다.
참고 링크:
- GitHub 저장소 소개
- Quake-SRP 브라우저 라이브 데모
- Hacker News 커뮤니티 토론