개요

Floci는 계정 등록·인증 없이 즉시 실행 가능한 무료 오픈소스 로컬 AWS 에뮬레이터. LocalStack 커뮤니티 에디션의 2026년 3월 종료에 대비한 제한 없는 대안. 시작 시간 24ms, 메모리 13MiB, 이미지 90MB의 초경량 구조로 LocalStack 대비 100배 빠른 시작 속도10배 적은 메모리를 자랑.

  • GitHub: https://github.com/hectorvent/floci
  • 라이선스: MIT (상업적 사용 자유)
  • 이름 유래: 구름 형태 cirrocumulus floccus — “가볍고 부드럽고 항상 무료”

등장 배경: LocalStack 종료

LocalStack 커뮤니티 에디션 (2026년 3월 종료):
  ✗ 인증 토큰 요구
  ✗ CI 지원 중단
  ✗ 보안 업데이트 중지

→ Floci가 제한 없는 대안으로 등장

성능 비교

항목FlociLocalStack 커뮤니티
시작 시간24ms~수초 (100배 차이)
메모리 (idle)13MiB~150MiB+ (10배 차이)
이미지 크기90MB~수백 MB
SDK 테스트408/408 통과일부 미지원
인증불필요토큰 요구 (커뮤니티 종료)
CI 사용자유제한
라이선스MIT종료 후 폐쇄적

지원 AWS 서비스 (20+)

카테고리서비스
APIAPI Gateway v2 / HTTP API
인증Cognito, IAM, STS
스토리지S3 (Object Lock — COMPLIANCE/GOVERNANCE)
DBRDS (PostgreSQL, MySQL, IAM 인증), DynamoDB (Streams 포함)
캐시ElastiCache (Redis + IAM 인증)
메시징SQS, SNS, Kinesis
암호화KMS
컴퓨팅Lambda 등

→ LocalStack에서는 부분/미지원이던 기능들도 완전 지원


빠른 시작

docker-compose.yml

version: "3.8"
services:
  floci:
    image: hectorvent/floci:latest
    ports:
      - "4566:4566"
    volumes:
      - ./data:/data
    environment:
      - FLOCI_STORAGE_MODE=hybrid
      - FLOCI_DEFAULT_REGION=us-east-1

실행

docker compose up

AWS CLI 사용

# 자격 증명은 아무 값이나 OK
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1
 
# Floci 엔드포인트 사용
aws --endpoint-url=http://localhost:4566 s3 mb s3://my-bucket
aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name my-queue
aws --endpoint-url=http://localhost:4566 dynamodb list-tables

SDK 통합

Python (boto3)

import boto3
 
s3 = boto3.client(
    "s3",
    endpoint_url="http://localhost:4566",
    region_name="us-east-1",
    aws_access_key_id="test",
    aws_secret_access_key="test",
)
 
s3.create_bucket(Bucket="my-bucket")
s3.put_object(Bucket="my-bucket", Key="hello.txt", Body=b"Hello Floci")

Node.js (AWS SDK v3)

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
 
const s3 = new S3Client({
  endpoint: "http://localhost:4566",
  region: "us-east-1",
  credentials: { accessKeyId: "test", secretAccessKey: "test" },
  forcePathStyle: true,
});
 
await s3.send(new PutObjectCommand({
  Bucket: "my-bucket",
  Key: "hello.txt",
  Body: "Hello Floci",
}));

Java (AWS SDK v2)

S3Client s3 = S3Client.builder()
    .endpointOverride(URI.create("http://localhost:4566"))
    .region(Region.US_EAST_1)
    .credentialsProvider(StaticCredentialsProvider.create(
        AwsBasicCredentials.create("test", "test")))
    .build();

이미지 태그

태그특징
latest네이티브 이미지 (GraalVM), 1초 미만 시작 ⭐ 권장
latest-jvmJVM 기반, 플랫폼 호환성 중시
x.y.z버전 고정 (네이티브)
x.y.z-jvm버전 고정 (JVM)

→ 네이티브 이미지가 빠르지만, 특수 플랫폼은 JVM 사용


환경 변수 설정

변수기본값설명
QUARKUS_HTTP_PORT4566HTTP 포트
FLOCI_DEFAULT_REGIONus-east-1기본 리전
FLOCI_DEFAULT_ACCOUNT_ID000000000000기본 계정 ID
FLOCI_STORAGE_MODEhybridmemory / persistent / hybrid / wal
FLOCI_STORAGE_PERSISTENT_PATH./data영구 저장 경로

스토리지 모드

모드특징
memoryRAM만 사용, 재시작 시 데이터 소실
persistent디스크에 모든 데이터 저장
hybrid기본, 메모리 + 디스크 균형
walWrite-Ahead Log, 안전성 우선

활용 시나리오

시나리오방식
CI/CD 테스트통합 테스트 시 실제 AWS 대신 Floci
로컬 개발비용 0원으로 AWS 워크플로우 실험
온보딩신입 개발자 환경 즉시 구성
에어갭 환경인터넷 없이 AWS API 학습
마이그레이션 검증LocalStack → Floci 전환

LocalStack에서 마이그레이션

# Before (LocalStack)
services:
  localstack:
    image: localstack/localstack
    environment:
      - LOCALSTACK_AUTH_TOKEN=...   # 종료 후 필요
    ports:
      - "4566:4566"
 
# After (Floci) — 거의 동일, 토큰 불필요
services:
  floci:
    image: hectorvent/floci:latest
    ports:
      - "4566:4566"

엔드포인트 동일(localhost:4566) → 코드 변경 거의 없음


평가

장점

  • MIT 라이선스 (상업적 사용 자유)
  • 초경량 (24ms 시작, 13MiB)
  • LocalStack 호환 엔드포인트
  • 지원 서비스 풍부 (20+)
  • 인증 불필요

한계 (예상)

  • 신생 프로젝트 → 커뮤니티 작음
  • 일부 최신 AWS 서비스 미지원 가능
  • 실제 AWS 동작과 100% 일치하지 않을 수 있음 (모든 에뮬레이터 공통)

관련 항목