SQLite 백엔드 내부: 가상 머신, 스토리지, 그리고 빌드 프로세스

발행: (2026년 1월 11일 오후 09:00 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Virtual Machine (VDBE)

프론트엔드가 컴파일을 마치면 바이트코드 프로그램을 Virtual Database Engine (VDBE)에게 전달합니다.

바이트코드 프로그램은:

  • 명령어가 순차적으로 나열된 선형 시퀀스
  • 각 명령어는 opcode와 최대 다섯 개의 피연산자를 가짐
  • 한 번에 하나의 명령어씩 순차적으로 실행

VM은 데이터베이스 작업(테이블 스캔, 값 비교, 커서 관리, 트랜잭션 의미 보장 등)을 위해 특별히 설계된 맞춤형 CPU처럼 동작합니다.

Tree Module (B‑tree Storage)

SQLite는 트리 구조를 이용해 데이터를 저장합니다:

  • Tables → B+ 트리
  • Indexes → B‑트리

각 테이블과 인덱스는 독립적인 트리 구조를 가집니다. 구현 파일은 다음과 같습니다:

  • btree.c – 트리 로직
  • btree.h – 공개 인터페이스

트리 모듈은 검색, 삽입, 삭제, 업데이트 및 구조적 변경(예: 테이블·인덱스 생성·삭제)을 지원합니다.

Pager

페이저는 모든 파일 I/O를 중재하는 핵심 구성 요소입니다. 트리 모듈은 데이터베이스 파일에 직접 접근하지 않고, 페이저가 제공하는 고정 크기 페이지를 사용합니다.

페이저의 주요 역할:

  • 데이터베이스 페이지 읽기·쓰기
  • 메모리 내 페이지 캐시 유지
  • 파일 잠금 처리
  • 롤백 저널 관리
  • 트랜잭션 경계 강제

실질적으로 페이저는 데이터 관리자, 잠금 관리자, 로그 관리자, 트랜잭션 관리자 역할을 수행합니다. 소스 파일은:

  • pager.c
  • pager.h

페이저 덕분에 SQLite는 단일 데이터베이스 파일만으로 ACID 보장을 제공할 수 있습니다.

lovestaco@i3nux-mint:~/pers/sqlite$ ll /home/lovestaco/pers/sqlite/bld/sqlite3
-rwxrwxr-x 1 lovestaco lovestaco 6.9M Jan 11 17:14 /home/lovestaco/pers/sqlite/bld/sqlite3

Build Process

SQLite의 빌드 과정은 자체 포함성과 재현성을 중시하는 철학을 반영합니다. 총 여섯 단계로 구성됩니다:

  1. sqlite3.h 생성
  2. SQL 파서 빌드
  3. VM opcode 생성
  4. opcode 이름 생성
  5. SQL 키워드 테이블 생성
  6. 라이브러리 컴파일

빌드 중:

  • lemon.cparse.cparse.h를 생성
  • mkkeywordhash.ckeywordhash.h를 생성
  • awksedsqlite3.h, opcodes.h, opcodes.c를 생성

opcodes.h는 VM 명령어에 숫자 값을 할당하고, opcodes.c는 디버깅 및 진단에 유용한 인간이 읽을 수 있는 이름과 opcode를 매핑합니다.

최근 릴리스에서는 단일 통합 파일 sqlite3.csqlite3.h를 제공합니다. 통합 파일 사용의 장점은 다음과 같습니다:

  • 5–10 % 정도 성능 향상
  • 보다 공격적인 컴파일러 최적화 가능
  • 빌드 과정 단순화
  • 애플리케이션에 쉽게 임베드 가능

명령줄 유틸리티는 추가로 shell.c가 필요합니다.

Summary

  • SQL은 바이트코드로 컴파일되어 특수 설계된 VM에 의해 실행됩니다.
  • SQLite는 데이터베이스 수준 잠금을 통해 직렬 실행을 보장합니다.
  • 저널링은 원자성 및 복구를 보장합니다.
  • 각 데이터베이스는 sqlite_master가 앵커 역할을 하는 단일 네이티브 파일에 저장됩니다.

아키텍처는 모듈화되어 있으며, 깔끔하게 계층화되고, 퍼블릭 도메인에 완전 공개된 오픈 소스입니다.

Looking Ahead

다음 장에서는 데이터베이스와 저널 파일 저장 구조를 더 깊이 파헤쳐, SQLite의 디스크 상 레이아웃이 이러한 추상화를 어떻게 구현하는지 살펴볼 것입니다.

Further resources

  • My SQLite experiments:
  • FreeDevTools (open‑source hub for dev tools):

Reference: SQLite Database System: Design and Implementation. Sibsankar Haldar (n.d.).

Back to Blog

관련 글

더 보기 »