Floci (LocalStack 대안) 스토리지 모드: 서비스별로 적절한 트레이드오프 선택 (그리고 비용은 절감)
I’m happy to translate the article for you, but I’ll need the text of the article itself. Could you please paste the content you’d like translated (excluding the source line you’ve already provided)? Once I have the text, I’ll keep the source link at the top unchanged and translate the rest into Korean while preserving all formatting and technical terms.
개요
docker compose down 후에도 살아남는 상태는 생각하지 않던 것 중 하나—테스트 스위트가 필요하고, 로컬 개발이 필요하며, CI 파이프라인에서는 절대 필요하지 않을 때까지.
Floci는 네 가지 저장 모드(모두 무료, 모두 코어에 포함)를 제공하고, 서비스별 오버라이드가 가능해 작업에 맞는 적절한 트레이드오프를 선택할 수 있게 합니다.
스토리지 모드
| 모드 | 재시작 시 유지 | 쓰기 동작 | 최적 사용 사례 |
|---|---|---|---|
| memory | ❌ | Pure RAM | CI, 단위 테스트, 일시적인 통합 테스트 |
| hybrid | ✅ | 디스크에 비동기 플러시 | 로컬 개발 (최적 지점) |
| persistent | ✅ | 변경마다 동기식 쓰기 | “마지막 쓰기를 잃지 않음” 워크플로우 |
| wal | ✅ | 추가 전용 로그 + 압축 | 고처리량 내구성 워크로드 |
전역 기본값을 설정하고, 다른 동작이 필요할 경우 서비스별로 재정의합니다.
Configuration examples
Memory (default) – ideal for CI
# docker-compose.yml
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
environment:
FLOCI_STORAGE_MODE: memory
모든 것이 RAM에 저장됩니다. 컨테이너를 재시작하면 데이터가 초기화됩니다. 가능한 가장 빠른 쓰기 속도와 최소한의 용량을 제공합니다.
Hybrid – local development
# docker-compose.yml
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
environment:
FLOCI_STORAGE_MODE: hybrid
읽기와 쓰기가 메모리에서 이루어지고, 백그라운드 플러시가 약 5 초마다 데이터를 디스크로 이동합니다. Docker‑compose down을 실행해도 미리 채워진 테스트 데이터가 삭제되지 않습니다.
Persistent – when losing the last write hurts
# docker-compose.yml
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
environment:
FLOCI_STORAGE_MODE: persistent
모든 변경 사항이 응답하기 전에 디스크에 동기화됩니다. 쓰기 속도는 느리지만, 확인된 데이터는 실제로 디스크에 저장됩니다—Docker가 컨테이너를 강제 종료하더라도 마찬가지입니다.
WAL – high‑write workloads that still need durability
# docker-compose.yml
services:
floci:
image: floci/floci:latest
ports: ["4566:4566"]
volumes:
- ./data:/app/data
environment:
FLOCI_STORAGE_MODE: wal
FLOCI_STORAGE_WAL_COMPACTION_INTERVAL_MS: 30000
변경 사항은 먼저 추가 전용 로그에 기록되고, 주기적으로 압축됩니다. 영구 모드의 랜덤 쓰기 비용 없이 내구성을 확보할 수 있습니다.
전역 기본값 및 서비스별 오버라이드
# docker-compose.yml
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
environment:
FLOCI_STORAGE_MODE: memory # everything is ephemeral by default
FLOCI_STORAGE_SERVICES_DYNAMODB_MODE: persistent # keep DynamoDB on disk
FLOCI_STORAGE_SERVICES_S3_MODE: hybrid # keep S3 buckets across restarts
전체적으로 빠른 테스트이지만, 재시작 시에도 시드된 DynamoDB 테이블과 S3 버킷을 유지합니다.
LocalStack (Pro)와 비교
| 기능 | LocalStack (Pro) | Floci |
|---|---|---|
| 비용 | 유료 플랜 | 무료, MIT‑licensed |
| 세분화 | Global on/off | 네 가지 모드, per‑service overrides |
| 쓰기 전략 | Snapshots (point‑in‑time) | Sync, async, or WAL — your choice |
| 스냅샷 중 | Service is locked, requests block | No locking, writes never pause |
| 버전 간 호환 | Snapshots may break across versions | Plain on‑disk format |
| 구현 | Python pickle serialization | Native, format per service |
잠금 부분은 대부분의 사람들이 예상하지 못하는 부분입니다. LocalStack의 스냅샷 메커니즘은 서비스가 저장되는 동안 요청을 차단합니다—종료 시에는 허용될 수 있지만 테스트 중간에 나타나면 놀라울 수 있습니다. Floci는 절대 쓰기를 일시 중지하지 않으며, 내구성은 선택한 저장 모드에서 제공됩니다. 이는 얼려서 덤프하는 방식이 아닙니다.
일반적인 설정
CI
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
environment:
FLOCI_STORAGE_MODE: memory
로컬 개발
services:
floci:
image: floci/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
environment:
FLOCI_STORAGE_MODE: hybrid
인증 토큰 없음, 프로 티어 없음, 놀라운 잠금 없음. 영속성은 기본적인 개발자 편의성으로, 기업 전용 기능이 아닙니다.
링크
- 🔗 https://github.com/floci-io/floci
- 📚 저장소 문서 (repo에 링크)
- 💬 커뮤니티 Slack: https://floci.slack.com