
DOOMQL
요약
SQLite를 단순한 데이터 저장소가 아닌 게임 엔진으로 활용하여 Doom 스타일의 게임을 구현한 DOOMQL 프로젝트를 소개합니다. 재귀적 CTE를 사용해 SQL 쿼리만으로 레이 트레이싱을 구현했으며, Python과 Datasette을 통해 실시간 게임 상태를 시각화할 수 있습니다.
핵심 포인트
- SQLite의 재귀적 CTE를 활용한 레이 트레이싱 구현
- SQL 쿼리가 게임의 이동, 충돌, 렌더링을 직접 제어
- Datasette 앱을 통해 실시간 게임 상태 및 미니맵 시각화 가능
- Python 터미널 환경에서 구동되는 독창적인 실험적 프로젝트
2026년 7월 13일 - Link Blog
DOOMQL (via) Peter Gostev가 GPT-5.6 Sol을 사용하여 제작했습니다. 이것은 정말 재미있습니다:
DOOMQL은 의도적으로 비합리적인 질문에서 시작되었습니다: 만약 SQLite가 단순히 게임 데이터를 저장하는 장소가 아니라, 게임 엔진 그 자체라면 어떻게 될까?
그 결과, SQL이 이동, 충돌, 적, 전투, 진행 상황 및 화면의 모든 RGB 픽셀을 제어하는 작고 독창적인 Doom 스타일의 게임이 탄생했습니다.
이것은 Python 터미널 스크립트로 구현되었습니다 - 저는 다음과 같이 테스트해 보았습니다:
cd /tmp
git clone https://github.com/petergpt/doomql
cd doomql
...

다음은 재귀적 CTE (Recursive CTE)를 사용하여 SQLite 내에서 완전한 레이 트레이서 (Ray Tracer)를 구현하는 거대한 SQL 쿼리입니다.
위의 스크립트를 실행하면 /tmp/doomql/.doomql/doomql.sqlite 파일이 생성됩니다.
이 SQLite 데이터베이스는 다음과 같이 Datasette을 사용하여 탐색할 수 있습니다:
uvx --prerelease=allow --with datasette-apps datasette \
/tmp/doomql/.doomql/doomql.sqlite \
-p 4444 --root --secret 1 --internal internal.db
--with datasette-apps 옵션은 새로운 Datasette Apps 플러그인을 설치하며, 이 플러그인은 Datasette 인터페이스 내에서 SQL 쿼리를 직접 실행할 수 있는 커스텀 HTML+JavaScript 앱을 생성하는 것을 지원합니다.
저는 새로운 앱을 만들고, 복사-붙여넣기용 프롬프트를 Claude chat (Fable 5)에 붙여넣은 뒤 다음과 같이 명령했습니다:
x, y, r, g, b 컬럼을 가진 frame_pixels 뷰를 사용하여 현재 화면 상태를 표시하는 앱을 만들어줘. 1초에 한 번씩 새로고침되도록 해.
이를 통해 제가 터미널에서 게임을 플레이하는 동안 현재 상태를 반영할 수 있는, Datasette 내부의 작동하는 HTML+JavaScript 앱을 얻을 수 있었습니다. 그 다음 저는 다음과 같이 추가했습니다:
미니맵을 추가해줘
이제 제 Datasette App은 다음과 같이 보입니다:

다음은 HTML 앱 코드입니다 - 직접 시도해 보려면 (위에서 언급한 uvx --with datasette-apps 레시피를 사용하여) 본인의 Datasette 인스턴스에 붙여넣으세요.
최근 기사
- 새로운 GPT-5.6 제품군: Luna, Terra, Sol - 2026년 7월 9일
- sqlite-utils 4.0, 이제 데이터베이스 스키마 마이그레이션 지원 - 2026년 7월 7일
- sqlite-utils 4.0rc2, 대부분 Claude Fable이 작성 (약 $149.25 소요) - 2026년 7월 5일
AI 자동 생성 콘텐츠
본 콘텐츠는 Simon Willison Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기