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 는 작고, 빠르고, 자체 완결적이고, 신뢰성 높고, full-featured SQL DB 엔진을 구현한 C 라이브러리야. 형용사 하나하나가 다 의미가 있어.

  • Serverless — 별도 서버 프로세스 없음. 라이브러리가 직접 디스크 파일을 읽고 써. 셋업 X, 관리 X, 데몬 X.
  • Zero-configuration — 설치 단계 없음, config 파일 없음, 포트 없음, 유저 없음. 파일 열면 끝.
  • Single-file — DB 전체 (테이블, index, trigger, view) 가 cross-platform 한 파일 하나에 들어가. 파일 복사하면 그게 백업이야.
  • Transactional — 모든 statement 가 transaction 안에서 돌아. 쓰기 도중에 크래시 나도 DB 안 깨져. 완전한 ACID.
  • Self-contained — OS 의존성 최소화. 컴파일하면 약 900 KB. 어지간한 JS 프레임워크 번들보다 작아.

이 속성 묶음이 SQLite 를 Postgres 나 MySQL 같은 client-server DB 와 결정적으로 다르게 만들어. 별도 서버 X, 네트워크 프로토콜 X, 포트 X. 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 로 배포할 때 vs SQLite 로 배포할 때 뭐가 필요한지 다 적어. OS 패키지, 네트워크 설정, secret, 백업 전략, observability 까지. SQLite 가 뭘 단순화하고 뭘 다른 데로 떠넘기는지.

Progress

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

댓글 0

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

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