핵심 요약
SurrealDB 2.0을 사내 SaaS(MAU 2.5만, 그래프 + 관계형 혼합 워크로드)에 6개월 적용. 단일 DB로 사용자·관계·이벤트를 모두 처리하면서 코드량 -35%, 인프라 비용 Postgres + Neo4j 대비 -45%. 단, 학습 곡선과 일부 운영 도구 미성숙은 감수.
1. 무엇을 잘하나
- 한 쿼리에 문서 + 그래프 + 관계형
- WebSocket Live Query — 실시간 구독 1급
- 임베디드부터 분산 클러스터까지 동일 코드
- SurrealQL — SQL-like + 확장
2. 쿼리 예시
-- 관계 정의
RELATE user:alice->follows->user:bob;
-- 그래프 쿼리
SELECT id, name, ->follows->user.* AS following
FROM user:alice;
-- 라이브 쿼리
LIVE SELECT * FROM message WHERE room = $room;
3. 성능
| 워크로드 | Postgres+Neo4j | SurrealDB |
|---|---|---|
| 1단계 관계 조회 | 4ms | 3ms |
| 3단계 그래프 탐색 | 45ms(Neo4j) | 38ms |
| document scan | 22ms | 30ms |
| writeops/s | 8.5K | 11K |
4. Live Query — WebSocket 구독
채팅·알림·실시간 대시보드에서 강력. Redis Pub/Sub + 폴링 조합을 제거. 클라가 SQL 결과를 구독하면 변경 시 자동 푸시.
5. 운영
- 분산 클러스터는 TiKV(2.0)·SurrealKV(2.0+)·FoundationDB 선택
- 백업: 노드 별 snapshot. 증분 백업은 아직 운영자 부담
- 모니터링: Prometheus exporter 기본 제공
6. 함정
- 스키마 진화 — schemaless로 시작했다가 부분 schemafull로 가는 마이그레이션이 번거로움
- SurrealQL 학습 — 팀 평균 1주
- 오래된 ORM 도구 없음 — 직접 작성 또는 SDK 사용
7. 결정 가이드
- 그래프·관계·문서를 모두 다루는 신규 SaaS → SurrealDB
- Postgres 성숙 자산 큼 → Postgres + age(graph) 또는 별도 그래프 DB
- 실시간 구독이 핵심 → SurrealDB Live Query 매력
자주 묻는 질문
Q. 한국어 풀텍스트? 2.0에서 stemming·tokenizer 한국어 지원 추가됐지만 PG nori 수준은 아님. 검색이 핵심이면 OpenSearch 별도.

댓글 0