나는 Cloudflare R2와 Turso를 사용해 오픈 소스 “Microsoft Edge Drop” 대체품을 만들었습니다
Source: Dev.to

개요
저는 최근 Cliff Drop이라는 자체 호스팅, 크로스 디바이스 텍스트 및 파일 공유 앱을 Microsoft Edge Drop에서 영감을 받아 만들었습니다. 흥미로운 부분은 UI가 아니라 저장소 아키텍처입니다.
저장소 아키텍처
구조화된 데이터 → Turso (엣지‑호스팅 SQLite)
메시지, 메타데이터, 인증에는 Turso (libSQL) 를 사용했습니다.
왜 Turso인가?
- 엣지‑호스팅 SQLite
- 전 세계 저지연 읽기
- 익숙한 SQL 문법
- 무거운 데이터베이스 작업이 필요 없음
- Drizzle ORM과 완벽 호환
SQLite의 단순함에 분산 데이터베이스 특성을 더해 주므로 Postgres 클러스터나 복잡한 복제 설정이 필요 없습니다.
파일 저장소 → Cloudflare R2 (S3‑호환)
파일 업로드와 이미지 저장에는 Cloudflare R2 를 사용했습니다.
왜 R2인가?
- S3‑호환 API
- 아웃바운드 비용 0원
- 대규모 객체 스토리지
- Node.js와 원활한 통합
- 로컬 폴백 옵션 제공
이를 통해 다음을 할 수 있습니다.
- 대용량 파일 업로드 저장
- 썸네일 생성
- 전 세계에 파일 제공
- 예기치 않은 대역폭 비용 방지
벤더 락인 없이 가능합니다.
실시간 및 보안
- 실시간 동기화를 위한 네이티브 WebSocket
- Argon2id 비밀번호 해싱
- HTTP‑only 쿠키
- CSRF 방어
- CSP 헤더
- 안전한 파일 처리
구성 요소
- SvelteKit (adapter‑node)
- Tailwind CSS
- Node.js
- Drizzle ORM
- Turso
- Cloudflare R2
왜 이 아키텍처가 중요한가
Cliff Drop은 구조화된 데이터와 객체 스토리지를 분리하고, 엣지 데이터베이스와 S3‑호환 인프라를 활용하는 클라우드‑네이티브 저장 설계를 보여줍니다. Linux 환경에서 (systemd / PM2 / Nginx) 프로덕션 수준으로 바로 배포할 수 있습니다.
현대 풀스택 엔지니어링은 단순히 React + API가 아니라 각 책임에 맞는 저장 레이어를 선택하는 것입니다:
- 데이터베이스 → 데이터 무결성
- 객체 스토리지 → 파일 관리
- 엣지 → 성능 최적화
- Node → 제어권 확보
작은 사이드 프로젝트라도 실제 시스템처럼 설계할 수 있습니다. 저장소를 적절히 분리하고, 지연 시간, 확장성, 비용을 고려해 프로젝트 수준을 한 단계 끌어올리세요.
GitHub 저장소: