C.W.K.
Stream
Lesson 03 of 10 · published

Serverless 는 데몬이 없다는 뜻

~12 min · sqlite, architecture, in-process

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

클라우드 단어와 충돌

SQLite 가 자기를 serverless 라고 부를 때, 그건 AWS Lambda 나 Cloudflare Workers 가 말하는 serverless 와 다른 의미야. 진짜로 서버 프로세스 자체가 없어. 백그라운드 데몬 없고, 연결할 소켓 없고, 네트워크 프로토콜 자체가 없어.

대신 SQLite 는 네 앱이 링크 하는 라이브러리야. 앱이 SQLite 함수를 호출하면, 라이브러리가 디스크 파일을 직접 읽고 써. DB 엔진이 네 앱 프로세스 안에서 — 앱 메모리, CPU, file descriptor 를 같이 써가며 — 도는 거야.

이 아키텍처가 가져오는 함의가 깊어:

  • Latency overhead 0 — 네트워크 round-trip 없음. PK SELECT 가 로컬 파일에서 ~0.01 ms. localhost Postgres 도 TCP 라서 ~1–10 ms 걸려.
  • Connection pooling 불필요 — PgBouncer 없음, max_connections 없음, connection leak 버그 없음.
  • 인증 레이어 없음 — 접근 제어가 파일 시스템 권한으로 이뤄져. SQL GRANT 안 써.
  • 배포 없음 — 바이너리 보내면 DB 엔진이 같이 따라가.
Tip: in-process 라서 SQLite 는 edge compute, embedded 시스템, 모바일 앱, CLI 도구, Cloudflare Workers / Fly Machines 류 serverless 함수처럼 persistent 한 DB 연결을 못 쓰는 환경에 딱이야.

반대로도 똑같이 사실이야: 다른 머신의 웹 서버 10 개가 같은 logical DB 에 동시에 쓰는 시나리오면 SQLite 는 잘못된 도구야. '네트워크 프로토콜 없음' 속성은 양날의 검이거든.

Code

Latency 비교 — 로컬 SQLite·python
import sqlite3, time

# SQLite: open 거의 공짜, query 는 그냥 함수 호출
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE t(id INTEGER PRIMARY KEY, v TEXT)')
conn.execute('INSERT INTO t VALUES (1, "hello")')

start = time.perf_counter_ns()
for _ in range(10000):
    conn.execute('SELECT v FROM t WHERE id = 1').fetchone()
elapsed_us = (time.perf_counter_ns() - start) / 10000 / 1000
print(f'SQLite per query: {elapsed_us:.2f} µs')
# SQLite per query: ~3–10 µs

External links

Exercise

SQLite 의 in-process 모델이 명백히 이기는 제품 시나리오 3 개, 명백히 아픈 시나리오 3 개 적어. 각각 어떤 속성 (네트워크 없음, 인증 레이어 없음, 파일 시스템 권한, 단일 writer 등) 이 그 판단을 끌었는지 같이.

Progress

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

댓글 0

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

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