MiniStack: LocalStack 유료화 이후 나온 무료 오픈소스 AWS 에뮬레이터
LocalStack이 핵심 서비스를 유료 플랜 뒤로 옮긴 뒤 등장한 MiniStack의 아키텍처, 지원 서비스, LocalStack과의 비교를 정리한다.
2026-08-12 · 최초 발행 2026-04-03
2026년 3월, LocalStack이 Community Edition의 무료 제공을 종료하고 핵심 AWS 서비스를 월 39달러 유료 플랜 뒤로 이동시켰다. 이에 대응해 등장한 MiniStack은 MIT 라이선스 기반의 완전 무료 AWS 에뮬레이터로, 34개 AWS 서비스를 단일 Docker 컨테이너에서 지원한다.
등장 배경
2026년 3월 23일, LocalStack은 Community Edition에서 S3, Lambda, DynamoDB 등 핵심 서비스를 Pro 플랜(월 39달러)으로 이전하는 정책 변경을 단행했다. 이는 Redis에서 Valkey로, Terraform에서 OpenTofu로 옮겨간 흐름과 마찬가지로, 오픈소스 도구의 상업화에 대한 커뮤니티 반발을 촉발시킨 사건이다.
MiniStack은 이 상황에서 Nahuel Nucera가 개발한 MIT 라이선스 기반 무료 대체재다. 프로젝트가 공개된 지 불과 7일 만에 커뮤니티에서 큰 관심을 받았으며, "다음 LocalStack을 목표로 하는 것이 아닌" 실용적 대안으로 자리매김하고 있다.
시스템 아키텍처
MiniStack은 단일 Docker 컨테이너 안에서 모든 AWS 서비스를 에뮬레이션하며, 특히 RDS, ElastiCache, ECS는 실제 Docker 컨테이너를 내부에서 구동하는 방식을 택했다.
가장 독특한 설계 결정은 RDS에서 CreateDBInstance를 호출하면 실제 PostgreSQL 또는 MySQL Docker 컨테이너를 구동하고, ElastiCache에서 CreateCacheCluster를 호출하면 실제 Redis 컨테이너를 시작한다는 점이다. 이는 목(mock) 응답을 반환하는 방식과 달리 실제 데이터베이스 동작을 테스트할 수 있게 해준다.
지원 AWS 서비스 상세
MiniStack은 현재 34개의 AWS 서비스를 지원한다.
핵심 서비스
| 서비스 | 주요 기능 | 구현 방식 |
|---|---|---|
| S3 | 버킷, 객체, 버저닝, 암호화, 라이프사이클, CORS, Object Lock, 복제 | 네이티브 에뮬레이션 |
| DynamoDB | 테이블 CRUD, 쿼리, 스캔, 트랜잭션, TTL, GSI | 네이티브 에뮬레이션 |
| Lambda | Python/Node.js 실행, 웜 워커, SQS 이벤트 소스 매핑, Layers | 실제 서브프로세스 |
| SQS | 표준/FIFO 큐, DLQ, 배치, 가시성 타임아웃 | 네이티브 에뮬레이션 |
| SNS | 토픽, 구독, SQS 팬아웃, 배치 발행 | 네이티브 에뮬레이션 |
인프라 서비스
| 서비스 | 주요 기능 | 구현 방식 |
|---|---|---|
| RDS | PostgreSQL, MySQL 인스턴스 | 실제 Docker 컨테이너 |
| ElastiCache | Redis 클러스터 | 실제 Docker 컨테이너 |
| ECS | 컨테이너 서비스 | 실제 Docker 컨테이너 |
| IAM | 사용자, 역할, 정책, 그룹, 인스턴스 프로파일, OIDC | 네이티브 에뮬레이션 |
| STS | 임시 보안 자격 증명 | 네이티브 에뮬레이션 |
관리 및 모니터링 서비스
| 서비스 | 주요 기능 |
|---|---|
| Secrets Manager | 비밀 값 저장/조회/순환 |
| SSM Parameter Store | 파라미터 저장/조회 |
| CloudWatch Logs | 로그 그룹/스트림 |
| EventBridge | 이벤트 버스, 규칙, 대상 |
Lambda 웜 워커 메커니즘
MiniStack의 Lambda 구현에서 주목할 만한 기술적 특징은 웜 워커(warm worker) 메커니즘이다. Python Lambda 함수가 최초 호출되면 핸들러 모듈이 영속적 서브프로세스에 임포트되고, 이후 호출에서는 임포트 단계를 건너뛰어 콜드 스타트 지연을 제거한다. Node.js 런타임(nodejs14.x~nodejs22.x)의 경우에도 로컬 Node 서브프로세스 또는 Docker를 통해 실행된다.
MiniStack과 LocalStack 비교
| 비교 항목 | MiniStack | LocalStack (2026년 이후) |
|---|---|---|
| 라이선스 | MIT (완전 무료) | Pro: 월 39달러 |
| 지원 서비스 수 | 34개 | 100개 이상 |
| Docker 이미지 크기 | 약 150MB | 약 1GB 이상 |
| 유휴 시 메모리 | 약 30MB | 약 500MB 이상 |
| 시작 시간 | 2초 이내 | 30초 이상 |
| RDS/ElastiCache | 실제 컨테이너 구동 | 목(mock) 응답 (CE) |
| IaC 도구 호환 | boto3, CLI, Terraform, CDK, Pulumi | 동일 |
| 성숙도 | 초기 단계 (2026년 3월~) | 2017년부터 운영 |
MiniStack은 지원 서비스 수에서는 LocalStack에 미치지 못하지만, Docker 이미지 크기 1/7, 메모리 사용량 1/16, 시작 시간 15배 이상이라는 성능상 이점이 있다. RDS와 ElastiCache에서 실제 컨테이너를 구동하는 방식도 LocalStack Community Edition의 목 응답 방식보다 실질적인 테스트 환경을 제공한다.
설치와 사용
# Docker로 실행
docker run -d -p 4566:4566 ministack/ministack:latest
# AWS CLI 설정
export AWS_ENDPOINT_URL=http://localhost:4566
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
# S3 버킷 생성 테스트
aws s3 mb s3://my-bucket --endpoint-url http://localhost:4566
# DynamoDB 테이블 생성 테스트
aws dynamodb create-table \
--table-name MyTable \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST \
--endpoint-url http://localhost:4566
MiniStack은 34개 서비스를 150MB Docker 이미지에서 2초 이내에 구동하는 경량 AWS 에뮬레이터로, RDS와 ElastiCache에서 실제 컨테이너를 구동하는 설계는 로컬 개발 환경에서의 테스트 정확도를 끌어올린다. 다만 프로젝트가 아직 초기 단계이므로, 프로덕션 의존성으로 채택하기보다는 개발·테스트 보조 도구로 쓰는 편이 현실적이다.