핵심 요약
"DB도 엣지에" 흐름이 2026년 본격화. 3개 솔루션을 같은 워크로드로 6개월 운영한 결과를 정리한다. 결론부터: 읽기 중심·간단한 모델은 모두 좋음. 쓰기 분산·일관성 요구는 여전히 어려움.
1. 아키텍처 한눈에
| 제품 | 모델 | 쓰기 | 읽기 |
|---|---|---|---|
| Turso (libSQL) | Primary + 글로벌 replicas | 한 리전 primary | 최근 리전 replica |
| LiteFS (Fly.io) | Primary + replicas (FUSE) | 한 리전 primary | 최근 리전 replica |
| Cloudflare D1 | Primary + 비동기 read replicas (베타) | 한 리전 primary | 최근 리전 (옵션) |
공통: 단일 라이터, 다중 리더. 이 구조에서 벗어나려면 별도 설계.
2. 일관성 — 무엇이 다른가
- Turso: 디폴트 결과적 일관성.
X-Replication-Index헤더로 "내 직전 쓰기 본 replica" 강제 가능 - LiteFS: read-your-writes를 같은 인스턴스에서 보장. 다른 리전 인스턴스는 lag
- D1: 베타의 read replicas는 결과적 일관성, primary는 강일관성
3. 쓰기 라우팅 — "한 곳"의 의미
Edge 함수에서 쓰기가 발생하면 자동으로 primary 리전으로 우회. Fly.io는 fly-replay 헤더, Cloudflare는 내부 라우팅, Turso는 SDK가 처리.
// Turso 클라이언트
import { createClient } from '@libsql/client'
const db = createClient({
url: 'libsql://app.turso.io',
authToken: TOKEN,
})
await db.execute({ sql: 'INSERT INTO x ...', args: [...] })
// SDK가 primary로 자동 라우팅
4. 성능 — 같은 앱 6개월
읽기 위주(95:5) e커머스 상품 페이지, 글로벌 사용자 분포.
| 지표 | Turso | LiteFS | D1 |
|---|---|---|---|
| P50 read (서울 → 가까운 replica) | 11ms | 14ms | 9ms |
| P50 read (싱가포르 → ) | 14ms | 16ms | 10ms |
| P50 write (전 세계 평균) | 72ms | 88ms | 140ms |
| 리전 수 | 30+ | Fly 리전 (30+) | CF 데이터센터 (300+) |
| 월 비용 (DB만, 50GB) | $29~ | 인스턴스 비용에 포함 | $5~ (D1 무료 후한 편) |
5. 마이그레이션 / 백업
- Turso: 매시간 자동 백업, point-in-time 복원 GA
- LiteFS: S3로 WAL 전송, 직접 백업 구성
- D1:
wrangler d1 backup, 시간 단위 자동
6. 트랜잭션·동시성
SQLite의 WAL 모드 덕에 다중 reader + 1 writer 모델. 동시 쓰기는 직렬화됨.
// 트랜잭션 — 모든 제품 지원
await db.transaction(async (tx) => {
await tx.execute('UPDATE products SET stock = stock - 1 WHERE id = ?', [id])
await tx.execute('INSERT INTO orders ...', [...])
})
7. 한계 — 안 맞는 워크로드
- 다수 동시 쓰기 (큐·이벤트 수집)
- 큰 트랜잭션 (분당 1MB+ WAL 생성)
- 지리적으로 분산된 쓰기 (글로벌 SaaS의 모든 리전 모두 쓰기)
이런 경우 PG/Spanner/CockroachDB가 답. SQLite at edge는 "사용자에게 가까운 읽기 + 한 리전 쓰기"가 적합.
8. 보안
- 각 제품 모두 mTLS 또는 토큰 인증
- Turso는 row-level 토큰 (멀티테넌트에 유리)
- D1은 Cloudflare Access와 통합
9. 결정 가이드
| 스택 | 추천 |
|---|---|
| Cloudflare Workers | D1 (네이티브) |
| Fly.io | LiteFS |
| 중립·SDK 자유 | Turso |
| 대용량·복잡 쿼리 | 위 셋 모두 부적합 → PG |
10. 흔한 함정
- "무한 확장": 쓰기는 한 리전 — 글로벌 라이트 워크로드엔 부적합
- 스키마 마이그레이션 중 lag: 큰 ALTER는 replica lag 폭증. 점진 적용
- FTS5 인덱스: SQLite 빌트인 풀텍스트. 한국어는 토크나이저 별도
- JSON 컬럼: SQLite JSON 함수 지원. 인덱스는 generated column으로
참고
- turso.tech/docs
- fly.io/docs/litefs
- developers.cloudflare.com/d1

댓글 0