무계정·무토큰 로컬 AWS 에뮬레이터, 69개 서비스·네이티브 Docker 통합
Floci는 로컬에서 AWS 호환 서비스를 경량·무료로 에뮬레이트하여 기존 AWS SDK·CLI·IaC 워크플로를 그대로 실행하게 한다.
TL;DR
Floci는 LocalStack Community의 제약 이후 무계정·무토큰 대안으로 등장한 로컬 AWS 에뮬레이터로서 69개 서비스 커버리지와 네이티브 Docker 통합을 제공한다. 내부적으로 HTTP 라우터(JAX-RS/Vert.x)가 무상태·상태저장·컨테이너형 서비스로 요청을 분기하고 memory, hybrid, persistent, wal 같은 저장소 모드로 내구성과 성능을 조정하며 일부 서비스는 실제 Docker 컨테이너를 실행하여 높은 충실도를 유지한다. README에 제시된 수치로는 네이티브 이미지가 약 24ms에 시작하고 유휴 메모리가 약 13MiB로 나타나 CI 친화적인 경량성을 확보했으며 LocalStack 호환 계층과 Testcontainers 모듈로 기존 파이프라인 전환 비용을 낮춘다. 다만 Docker-backed 서비스는 도커 소켓 접근과 더 큰 이미지, 호스트 권한 고려가 필요하므로 단순 기능 테스트와 고충실도 통합 테스트 사이에서 적절한 모드 선택이 요구된다.
주요 기능
- 로컬에서 표준 AWS 클라이언트가 작동하도록 HTTP 엔드포인트를 노출하여 기존 SDK, CLI, Terraform, CDK, OpenTofu 워크플로를 수정 없이 재현할 수 있다. 이 구성은 endpoint를 http://localhost:4566로 맞추기만 하면 동작하며 자격 증명은 기본적으로 비어 있지 않은 값이면 허용된다. 따라서 개발과 CI에서 클라우드 계정 없이 애플리케이션 통합 테스트가 가능하다.
- 실제 Docker를 사용하는 서비스는 컨테이너를 띄워 런타임·DB·브로커와 같은 시스템 수준 동작을 그대로 재현한다. Lambda, RDS, OpenSearch, MSK, Neptune 등은 호스트 Docker API를 사용하여 실제 엔진과 프로토콜을 제공하므로 얕은 목(fake) 대신 높은 충실도를 얻는다. 이 방식은 통합 테스트에서 프로토콜 호환성과 성능 특성을 로컬 환경에서 검증해야 할 때 특히 중요하다.
- 여러 저장소 모드를 제공하여 속도와 내구성 사이의 요구를 조정할 수 있다. memory 모드는 완전 인메모리로 CI용으로 빠르게 동작하고 hybrid 모드는 메모리 성능에 5초 주기 비동기 플러시를 더해 개발 중 상태 보존을 제공하며 persistent와 wal 모드는 각각 즉시 디스크 플러시와 쓰기 앞선 로그로 더 높은 내구성을 보장한다. 이 구성 옵션은 테스트 종류에 따라 적절한 내구성 레벨을 선택하게 한다.
- Drop-in 호환성을 목표로 하여 LocalStack 환경 변수와 초기화 스크립트 호환 계층을 제공하고 포트·자격증명 패턴을 유지한다. 기존 LocalStack 기반 설정을 이미지 이름 교체와 일부 변수 매핑만으로 전환할 수 있으며 init 스크립트의 경로와 Ready 로그 라인도 유지되어 Testcontainers 같은 도구의 대기 전략과 호환된다. 이러한 호환성은 마이그레이션 비용을 낮추어 기존 파이프라인을 빠르게 전환할 수 있게 한다.
어떻게 동작하는가
Floci는 HTTP 라우터(JAX-RS / Vert.x)를 통해 요청을 수신하고 무상태 서비스, 상태저장 서비스, Docker-backed 컨테이너 서비스로 라우팅하여 각 유형에 맞는 실행 방식을 선택한다. 상태 저장은 memory, persistent, hybrid, wal 같은 저장소 모드로 동작하며 wal 모드에서는 모든 변이 전 로그 기록을 통해 최대 내구성을 확보한다. Docker-backed 서비스는 호스트의 Docker API와 소켓을 사용하여 실제 컨테이너를 띄우고 SigV4 같은 인증 경로와 런타임 환경을 재현하므로 높은 충실도의 통합 테스트가 가능하다.
해결 문제
클라우드 계정, 인증 토큰, 또는 유료 기능 제약 없이 로컬에서 AWS 호환 서비스를 재현하는 문제를 해결한다. Floci는 표준 AWS 엔드포인트, 자격증명 패턴, SDK/CLI/IaC 호환성을 유지하여 기존 워크플로를 수정하지 않고 로컬로 전환할 수 있게 한다. 또한 LocalStack Community의 제약과 보안 업데이트 중단으로 생긴 공백을 대체하여 무료로 유지되는 대안 기능을 제공한다.
지금 주목받는 이유
LocalStack Community의 기능 제한과 보안 업데이트 중단 이후 무계정·무토큰 대안으로 주목받았다. README에 제시된 빠른 시작 시간과 낮은 유휴 메모리, 그리고 69개 서비스라는 광범위한 커버리지가 실제 개발자·CI 니즈와 맞아떨어졌다. 또한 테스트컨테이너 통합과 Docker-backed 서비스로 높은 충실도를 제공하는 점이 관심을 끌었다.
차별점
- 실제 컨테이너를 사용하는 Docker-backed 서비스로 런타임과 데이터베이스의 운영상 특성을 로컬에서 재현하므로 얕은 모킹보다 높은 충실도를 제공한다. 이 접근법은 RDS, Lambda 실행, OpenSearch, MSK 등 프로토콜과 성능이 중요한 서비스에서 유효하며, Docker 소켓 공유를 통해 엔진을 직접 실행한다. 충실도 향상은 더 현실적인 통합 테스트를 가능하게 하지만 호스트 권한과 이미지 크기 같은 운영상의 고려를 동반한다.
- 시작 시간과 유휴 메모리 측면에서 경량을 추구하여 본문에 제시된 수치로는 네이티브 이미지가 약 24ms에 시작하고 유휴 메모리가 약 13MiB 수준으로 나타났다. 이러한 경량 특성은 CI 파이프라인에서 빠른 부팅과 낮은 리소스 소비로 테스트 병렬화를 확대할 수 있다. 반면 일부 고충실도 서비스는 추가 Docker 이미지와 리소스를 요구하므로 상황에 따라 트레이드오프가 존재한다.
- LocalStack Community와의 호환성 계층을 제공하여 기존 LocalStack 기반 설정을 최소한의 변경으로 전환할 수 있으며 LocalStack 변수와 init 스크립트를 자동으로 매핑한다. 이 호환성은 마이그레이션 비용을 낮추고 도구 생태계의 연속성을 보장한다. 동시에 Floci는 MIT 라이선스 하에 보안 업데이트를 계속 제공하도록 설계되어 커뮤니티 유지 관점에서 차별화된다.
사용 사례
- 로컬 개발 중 기존 AWS SDK·CLI·IaC 코드를 수정 없이 실행하여 기능 및 통합을 검증하는 용도이다. 개발자는 endpoint를 Floci로 가리키고 정적 자격 증명만 제공하면 실제 서비스 호출 흐름을 로컬에서 재현할 수 있다. 이 방식은 네트워크 의존성을 줄이고 반복 가능한 로컬 테스트 사이클을 빠르게 만든다.
- CI 파이프라인에서 가벼운 에뮬레이터를 사용하여 테스트 속도를 높이고 인프라 의존성을 제거하는 시나리오이다. memory 또는 hybrid 저장소 모드를 사용하면 테스트 실행 속도를 높이면서도 필요한 경우 persistent나 wal로 내구성을 높여 검증 환경을 조정할 수 있다. 빠른 시작 시간과 낮은 유휴 메모리는 병렬 테스트 실행 비용을 줄인다.
- 통합 테스트 또는 엔드투엔드 환경에서 실제 컨테이너 기반 서비스를 띄워 데이터베이스, 메시지 브로커, Lambda 런타임 등 운영 레벨 특성을 검증하는 상황이다. Docker-backed 서비스는 운영 체제 수준의 상호작용과 프로토콜 호환성을 제공하므로 로컬에서 서브시스템 간 상호작용을 점검하는 데 적합하다. 다만 이 경우 Docker 소켓 접근과 더 큰 이미지 다운로드가 필요하다.
시작하기
가장 빠른 시작 방법은 공식 CLI를 설치한 뒤 floci start를 실행하고 eval $(floci env)로 환경 변수를 내보내는 것이다. Docker Compose를 선호하면 간단한 compose.yaml에서 floci/floci:latest 이미지를 선언하고 docker compose up으로 기동한 뒤 AWS_ENDPOINT_URL 등 환경 변수를 수동으로 설정하면 된다. Docker-backed 서비스를 사용하려면 도커 소켓을 컨테이너에 마운트하여 docker run 또는 Compose에서 -v /var/run/docker.sock:/var/run/docker.sock 같은 설정을 적용해야 한다.
요구사항
- Docker 엔진이 있어야 Docker-backed 서비스(Lambda, RDS, OpenSearch 등)를 실제 컨테이너로 실행할 수 있다. Docker 소켓을 마운트하면 호스트의 도커 API에 접근하므로 권한과 보안 관련 주의가 필요하다. 단순 인프로세스 서비스만 필요하면 Docker가 없어도 동작하나 고충실도 테스트를 위해서는 Docker가 권장된다.
벤치마크
| 벤치마크 | 지표 | 값 | 비교 |
|---|---|---|---|
| Startup time | time | ~24 ms | vs LocalStack Community: ~3.3 s |
| Idle memory | memory | ~13 MiB | vs LocalStack Community: ~143 MiB |
| Docker image size | size | ~90 MB | vs LocalStack Community: ~1.0 GB |
이미지 분석
17.8k
Stars
1.8k
Forks
+220
Trending
0
조회수
관련 토론
아직 관련 토론이 없습니다.
댓글
댓글을 작성하려면 로그인이 필요합니다.