~/VibeHandbook
$39

데이터베이스

sqlite.org

SQLite

무엇인가

SQLite는 전체 데이터베이스를 단일 파일에 저장하는, 자립적이고 서버가 없는 관계형 데이터베이스입니다. 실행하거나 관리할 별도의 프로세스가 없습니다; 애플리케이션이 라이브러리를 직접 링크해 파일을 읽고 씁니다. 전화기, 브라우저, 그리고 수많은 앱에 내장되어 있어 세계에서 가장 널리 배포된 데이터베이스입니다.

강점

  • 설정이 필요 없고 운영할 서버가 없습니다.
  • 전체 데이터베이스가 이식 가능한 하나의 파일이라 복사하거나 백업하기 쉽습니다.
  • 로컬 읽기와 적당한 쓰기 작업에 빠릅니다.
  • 트랜잭션과 외래 키를 포함한 완전한 SQL 지원.
  • 테스트, 프로토타입, 엣지 런타임, 임베디드 용도에 훌륭합니다.

트레이드오프

  • 동시 쓰기가 제한적입니다(한 번에 한 명의 작성자; WAL 모드가 도움이 됩니다).
  • 많은 네트워크 클라이언트나 높은 쓰기 처리량을 위해 만들어지지 않았습니다.
  • 고급 타입이 적고 기본 사용자/권한 시스템이 없습니다.
  • 단일 호스트를 넘어 확장하려면 다른 저장소나 Turso/LiteFS 같은 레이어가 필요합니다.

언제 사용하나

로컬 앱, CLI 도구, 데스크톱 및 모바일 소프트웨어, 테스트 스위트, 그리고 읽기가 지배적인 소규모~중규모 사이트에 SQLite를 사용하세요. 호스팅된 복제본을 통해 엣지에서도 점점 더 활용 가능해지고 있습니다.

바이브 코딩 적합성

AI에게 지시할 때는 먼저 안전한 기본값을 켜도록 요청하세요: PRAGMA foreign_keys = ON과 WAL 저널링을 켜세요. SQLite는 외래 키를 기본적으로 꺼 두기 때문입니다. 파라미터화된 문을 사용하게 하고 스키마 마이그레이션을 버전 관리되는 .sql 파일에 두게 하세요. 유용한 팁: 쓰기가 직렬화된다는 점을 AI에게 알려서, 삽입을 하나의 트랜잭션 안에 묶고 장시간 지속되는 쓰기 락을 피하도록 하세요. 데이터베이스가 단지 파일이므로, 도구에 간단한 백업 단계(파일을 복사하거나 .backup 명령 사용)를 포함하도록 AI에게 요청하세요.

PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;

CREATE TABLE notes (
  id         INTEGER PRIMARY KEY AUTOINCREMENT,
  title      TEXT NOT NULL,
  body       TEXT,
  created_at TEXT NOT NULL DEFAULT (datetime('now'))
);

-- 속도를 위해 여러 삽입을 하나의 트랜잭션에 묶기
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;