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

SQLite가 정확히 뭐야

~14 min · sqlite, architecture, library

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

SQL을 말할 줄 아는 C 라이브러리

SQLite는 작고 빠르고 자기 완결적이고 믿을 만하면서 SQL을 빠짐없이 구현한 C 라이브러리야. 이 형용사들이 하나씩 다 자기 몫을 해.

  • Serverless — 따로 도는 서버 프로세스가 없어. 라이브러리가 디스크 파일을 직접 읽고 써. 셋업할 것도, 관리할 것도, 띄워둘 데몬도 없지.
  • Zero-configuration — 설치 단계도 config 파일도 포트도 유저 계정도 없어. 파일을 열면 그걸로 끝이야.
  • Single-file — 테이블도 index도 trigger도 view도, DB 전체가 플랫폼 안 가리는 파일 하나에 들어가. 그 파일을 복사하면 그게 곧 백업이지.
  • Transactional — 모든 statement가 transaction 안에서 돌아. 쓰는 도중에 크래시가 나도 DB는 안 깨져. ACID를 다 지켜.
  • Self-contained — OS에 기대는 게 거의 없어. 컴파일하면 900 KB쯤 나오는데, 어지간한 JS 프레임워크 번들보다 작아.

이 다섯이 모이면 SQLite는 Postgres나 MySQL 같은 client-server DB와 결정적으로 갈라져. 서버도 네트워크 프로토콜도 포트도 없거든. SQLite는 네 앱 프로세스 안에서 돌아. 앱의 메모리와 file descriptor를 같이 쓰면서.

Principle: SQLite의 배포 단위는 파일이야. 백업은 cp고, 마이그레이션은 파일 교체고, 복제는 rsync야. 멘탈 모델이 통째로 파일 시스템 연산으로 내려앉는데, 그 단순함 자체가 기능이야.

Code

한 줄로 DB 띄우기·sql
-- myapp.db 열기 (없으면 생성)
sqlite3 myapp.db

-- 인터랙티브 SQL 세션 진입
CREATE TABLE notes (
  id         INTEGER PRIMARY KEY,
  body       TEXT NOT NULL,
  created_at TEXT DEFAULT (datetime('now'))
);

INSERT INTO notes (body) VALUES ('Hello, SQLite!');
SELECT * FROM notes;
-- 1|Hello, SQLite!|2026-05-03 12:00:00
Python으로 똑같은 거 — 세 줄·python
import sqlite3

conn = sqlite3.connect('myapp.db')
conn.execute('CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, body TEXT)')
conn.execute('INSERT INTO notes(body) VALUES (?)', ('Hello from Python',))
conn.commit()
for row in conn.execute('SELECT * FROM notes'):
    print(row)
conn.close()

External links

Exercise

배포에 드는 품을 직접 비교해 봐. 개인용 노트 앱 정도의 작은 제품에서 기능 하나를 내보낸다고 치고, Postgres로 갈 때와 SQLite로 갈 때 각각 뭐가 필요한지 다 적어. OS 패키지, 네트워크 설정, secret, 백업 전략, observability까지 빠짐없이. 그러고 나서 SQLite가 뭘 없애주고 뭘 다른 자리로 떠넘기는지 정리해.

Progress

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

댓글 0

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

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