최근 프로그래밍 커뮤니티에서 실행 파일(executable)을 SQLite 데이터베이스로 활용하는 혁신적인 아이디어인 '쿼리 가능한 실행 파일(Queryable Executable)'이 큰 관심을 받고 있습니다. 이 개념은 프로그램 코드뿐만 아니라 애플리케이션의 모든 상태(데이터, 로그 등)를 단일 파일 내에 데이터베이스 형태로 저장하고 관리하는 것을 목표로 합니다. 이는 기존의 복잡한 파일 시스템 구조에 대한 의존성을 줄이고, SQL을 통해 프로그램의 모든 요소를 쿼리하고 조작할 수 있게 해줍니다.
이 아이디어의 핵심은 'SELF'라는 포맷으로, 프로그램 자체가 SQLite 데이터베이스입니다. 리눅스의 binfmt_misc 기능을 활용하여 커스텀 인터프리터가 실행 파일을 데이터베이스처럼 읽고, 세그먼트 테이블의 로우(row)를 매핑하여 프로그램의 진입점(entry point)으로 점프합니다. 이를 통해 기존의 다양한 바이너리 툴링이 SQL 하나로 통합될 수 있습니다. 저자는 'self-httpd'라는 개념 증명 웹 서버를 통해 이 가능성을 시연했습니다. 이 웹 서버는 단일 파일로 구성되며, 프로그램 코드, 웹사이트 콘텐츠, 라우팅 정보, 심지어 방문자 로그까지 모든 상태를 실행 파일 내의 SQLite 데이터베이스에 저장하고 트랜잭션 방식으로 업데이트합니다. 이는 /var, /tmp, /home과 같은 별도의 파일 시스템이 필요 없음을 의미합니다.
이 접근 방식은 저스틴 투니(Justine Tunney)의 'redbean' 프로젝트에서 영감을 받았습니다. redbean은 자체 압축 ZIP 아카이브를 포함하는 단일 파일 웹 서버로, '진정으로 휴대 가능한 실행 파일(Actually Portable Executable)'을 표방합니다. 반면 SELF는 '진정으로 쿼리 가능한 실행 파일(Actually Queryable Executable)'을 지향하며, ZIP과 같은 별도의 아카이브 포맷 없이 데이터베이스 자체가 컨테이너 역할을 합니다. redbean이 Lua 훅(hook)을 통해 응답을 조작한다면, SELF에서는 핸들러 테이블에 새로운 로우를 삽입하는 방식으로 동일한 기능을 SQL로 처리할 수 있습니다. 이는 개발 및 배포 프로세스를 극도로 단순화하고, 프로그램의 상태를 SQL이라는 보편적인 언어로 관리할 수 있게 하여 개발자에게 강력한 유연성을 제공할 것으로 기대됩니다.