LocalStack이 Docker 이미지를 인증 뒤로 이동시키자 moto, Floci, Testcontainers 3가지 대체 도구의 트레이드오프를 비교한 마이그레이션 가이드
LocalStack Is Gone. Floci vs. Moto vs. Testcontainers: Which One Replaces It?
AI 요약
Context
2026년 3월 23일 LocalStack이 GitHub 저장소를 아카이브하고 Docker 이미지를 인증 필수로 변경해, 토큰 없이 CI 파이프라인에서 docker pull localstack/localstack을 실행하는 모든 팀의 빌드가 중단되었다. LocalStack Community Edition의 코드는 여전히 Apache 2.0 라이선스이지만 배포 방식이 변경되어 테스트 인프라 전면 재검토가 필요해졌다.
Technical Solution
- moto 도입(Python 스택): boto3 호출을 @mock_aws 데코레이터로 프로세스 내부에서 직접 차단 및 모킹, Docker 불필요, 네트워크 왕복 제거
- Floci 도입(Docker 기반): 2026년 3월 22일 출시된 Go 서비스로 포트 4566에서 실행, LocalStack과 동일한 엔드포인트 규칙 사용, 인증 토큰 불필요
- LocalStack에서 moto로 마이그레이션: conftest.py 픽스처만 수정하여 AWS SDK 클라이언트를 mock_aws 컨텍스트로 감싸기, 테스트 함수는 변경 없음
- LocalStack에서 Floci로 마이그레이션: Docker Compose의 image를 localstack/localstack에서 hectorvent/floci:latest로 변경, LOCALSTACK_AUTH_TOKEN 환경변수 제거, 엔드포인트 URL과 테스트 코드 유지
- testcontainers-python과의 통합: DockerContainer로 Floci 컨테이너를 직접 관리하고 wait_for_logs로 "Ready" 신호 대기 (전용 패키지 미출시)
Impact
moto는 네트워크 지연과 컨테이너 시작 오버헤드 제거로 단위 테스트 실행 속도를 향상시킨다. Floci는 GitHub Stars 48시간 내 1,600+ 획득 및 51개 포크로 빠른 커뮤니티 채택을 보여준다. LocalStack Hobby 토큰은 비상업용으로 무료이며 CI 실행 횟수 제한이 없다.
Key Takeaway
AWS 테스트 전략에서 단위 테스트는 moto의 in-process 모킹으로, 멀티 서비스 또는 인프라 검증은 Floci의 HTTP 엔드포인트로 계층을 나누어 도입하면, 각 도구의 강점을 보완하면서 인증 의존성을 제거할 수 있다.
실천 포인트
LocalStack에 의존하는 Python 테스트 팀에서 단위 테스트는 moto @mock_aws 데코레이터로 전환하고, 다중 AWS 서비스 간 통신이 필요한 통합 테스트는 Floci를 docker run -d -p 4566:4566 hectorvent/floci:latest로 시작하면, 인증 토큰 관리 없이 2분 내 기존 엔드포인트 URL을 유지한 마이그레이션이 가능하다.