최근 'SELF'라는 새로운 개념의 실행 파일 형식이 등장해 개발자 커뮤니티의 주목을 받고 있습니다. SELF는 프로그램 코드뿐만 아니라 웹사이트 콘텐츠, 라우트 정보, 사용자 방문 기록, 심지어 애플리케이션의 현재 상태까지 모든 것을 하나의 SQLite 데이터베이스 파일 안에 저장하는 방식입니다. 이는 기존의 프로그램과 데이터를 분리하여 관리하던 방식에서 벗어나, 모든 것을 단일 파일로 통합하는 혁신적인 접근입니다.
SELF의 핵심은 리눅스의 'binfmt_misc' 기능을 활용해 전용 인터프리터가 실행 파일을 SQLite 데이터베이스로 인식하고 처리한다는 점입니다. 인터프리터는 실행 파일 내부의 'segments' 테이블을 메모리에 매핑하고 프로그램 진입점으로 이동합니다. 프로그램은 'argv[0]'을 통해 자기 자신을 SQL 데이터베이스처럼 읽고 쓸 수 있습니다. 개념 증명으로 공개된 웹서버 'self-httpd'는 'routes', 'visits', 'presses' 같은 테이블을 사용해 페이지 요청이나 버튼 클릭 결과를 실행 중인 SQLite 실행 파일 내부에 직접 기록합니다. 콘텐츠 수정은 일반적인 ACID 트랜잭션(ACID transaction)으로 처리되어 서버 재시작이나 재배포 없이 즉시 반영되거나 롤백될 수 있으며, 'sqldiff'나 'FTS5' 같은 기존 SQLite 도구들도 그대로 활용 가능합니다.
이러한 통합 방식은 여러 면에서 중요한 의미를 가집니다. 첫째, 배포가 극도로 단순해집니다. 코드와 데이터가 하나의 파일에 담겨 있으므로, 'scp' 명령 한 번으로 전체 애플리케이션을 배포할 수 있습니다. 둘째, 애플리케이션 상태 관리가 용이해집니다. 별도의 파일 시스템 경로('/var/', '/tmp/', '/home/') 없이도 프로그램이 자신의 상태를 같은 파일에 저장하고 트랜잭션으로 관리할 수 있습니다. 셋째, 재배포 시 데이터 마이그레이션(data migration)이 간편해집니다. 기존 실행 파일의 데이터를 새 파일로 'INSERT... SELECT' 구문을 통해 쉽게 옮길 수 있어, 프로그램 업데이트 후에도 이전 상태를 유지할 수 있습니다.
SELF는 저스틴 터니(Justine Tunney)의 'redbean' 프로젝트에서 영감을 받았지만, ZIP 아카이브 대신 SQLite 데이터베이스 자체를 컨테이너로 사용해 모든 것을 SQL이라는 단일 영역으로 통합합니다. 이는 실행 파일을 단순한 바이트 덩어리가 아닌 '쿼리 가능한 실행 파일(Actually Queryable Executable)'로 변모시켜, 수십 년간 별도로 사용해 온 다양한 도구들을 대체하고 프로그램과 데이터베이스의 경계를 허무는 잠재력을 보여줍니다. 비록 아직 초기 단계의 개념 증명 수준이지만, 이 아이디어는 소프트웨어 배포, 관리, 그리고 개발 방식에 대한 근본적인 재고를 촉발할 수 있습니다.