본문 바로가기
C.W.K.
Stream
Lesson 05 of 10 · published

SQLite가 옳은 선택인 경우

~12 min · sqlite, fit, architecture-decisions

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

빛나는 자리

아래 중 하나라도 걸리면 SQLite가 맞는 DB야.

  • 머신 한 대로 끝나는 워크로드 — 데스크탑 앱, CLI 도구, 모바일 앱, embedded 기기, 서버 한 대짜리 웹 앱. 데이터가 코드 도는 자리에 같이 살아.
  • 노드 하나에 몰리는 read 트래픽 — WAL 모드면 reader는 동시에 몇이든 붙을 수 있어. 파일 하나에서 초당 수만 건씩 읽어내는 것도 거뜬해.
  • Local-first 제품 — 오프라인으로 돌다가 나중에 sync하는 앱들 말이야. Linear의 local-first 모드, Obsidian sync, 모바일 앱 같은 것들. 데이터 레이어가 사용자 기기 안에 있지.
  • 테스트 fixture와 CI:memory:나 temp 파일로 새 DB를 즉석에서 뽑아. Docker도 필요 없고 Postgres 컨테이너가 뜨기를 기다릴 일도 없어.
  • Edge와 serverless — Cloudflare Durable Objects, Fly.io의 Litestream과 LiteFS, Turso, D1. DB 파일이 compute를 따라다녀.
  • Append-only와 observability — 로그, metric, event store. 요즘 SQLite에 WAL을 얹으면 몰아치는 append도 우아하게 받아내.
  • Document, config, cache — 예전 같으면 JSON이나 XML로 떨궜을 자리야. 그런 용도라면 SQLite가 더 나은 application file format이지.
Self-reference: 피파의 conversation은 전부 JSONL을 ground truth로 두고 SQLite를 mirror로 두는 방식으로 남겨. SQLite가 인덱싱하고 query할 수 있는 view를 맡고, JSONL이 지워지지 않는 append-only event log를 맡지. 둘이 서로를 떠받쳐. JSONL을 replay하면 SQLite를 다시 세울 수 있고, SQLite 인덱스가 WebUI를 빠르게 해줘.

SQLite 르네상스라는 말이 도는 이유가 여기 있어. 2024년에서 2026년 사이의 웹이 위 항목들을 통째로 다시 발견하고 있거든. edge compute가 '데이터를 코드 옆에'를 현실로 만들었고, Postgres-on-RDS 청구서가 비싸지면서 local-first가 다시 매력적으로 보이기 시작했어.

Code

CLI 도구의 영속 레이어 — 8 줄·python
import sqlite3, sys, pathlib

DB = pathlib.Path.home() / '.mytool' / 'state.db'
DB.parent.mkdir(exist_ok=True)

conn = sqlite3.connect(DB)
conn.execute('''
  CREATE TABLE IF NOT EXISTS commands(
    id INTEGER PRIMARY KEY,
    cmd TEXT, ts TEXT DEFAULT (datetime('now'))
  )''')
conn.execute('INSERT INTO commands(cmd) VALUES (?)', (' '.join(sys.argv[1:]),))
conn.commit()

External links

Exercise

매일 쓰는 도구나 제품 중에 안에서 SQLite를 돌리고 있을 것 같은 걸 하나 골라. DB 파일을 찾아내(Spotlight, locate, lsof가 도움이 돼) sqlite3 CLI로 read-only로 열어봐. 테이블을 훑고 schema를 보면서 그 제품이 데이터를 어떻게 모델링했는지 정리해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.