LocalStack: 폐쇄망에서도 AWS 개발이 가능한 로컬 클라우드 환경
LocalStack: 폐쇄망에서도 AWS 개발이 가능한 로컬 클라우드 환경
클라우드 기반 서비스를 개발하면서 AWS의 다양한 기능(S3, SQS, DynamoDB 등)에 의존하게 되면, 개발 및 테스트 환경에서도 해당 서비스에 접근할 수 있어야 합니다.
하지만 망분리(폐쇄망) 환경이나 사내 개발망에서는 외부 AWS에 접근이 어렵거나 불가능한 경우가 많습니다.
이럴 때, LocalStack은 AWS 서비스를 로컬에서 그대로 에뮬레이션할 수 있는 훌륭한 솔루션입니다.
🧾 LocalStack이란?
LocalStack은 AWS 클라우드를 로컬에서 시뮬레이션해주는 테스트 도구입니다.
- Docker 기반으로 손쉽게 실행
- 실제 AWS와 거의 동일한 API 제공
- 다양한 AWS 서비스 지원 (S3, SQS, SNS, DynamoDB, Lambda, Secrets Manager 등)
- 로컬 개발/테스트/CI 환경에서 사용 가능
🧑💻 실무 예시: 우리가 왜 LocalStack을 선택했나
기존에는 S3 관련 기능을 테스트할 때 MinIO를 사용했습니다.
하지만 MinIO는 **단일 서비스(S3)**만 에뮬레이션할 수 있고, 다른 AWS 서비스(SQS, SNS 등)와의 통합 테스트에는 한계가 있었습니다.
또한, 망분리 환경에서는 aws configure를 통한 인증이나 실제 AWS 리소스 접근이 불가능하므로, 로컬에서 다양한 서비스를 동시에 테스트할 수 있는 환경이 필요했습니다.
LocalStack은 이 모든 조건을 충족했습니다.
🐳 LocalStack 설치: Docker Compose로 빠르게 시작하기
yaml
복사편집
# docker-compose.yml
version: "3.8"
services:
localstack:
container_name: localstack
image: localstack/localstack:latest
ports:
- "4566:4566" # Edge endpoint (모든 서비스 진입점)
- "4571:4571"
environment:
- SERVICES=s3,sqs,sns,dynamodb
- AWS_ACCESS_KEY_ID=test
- AWS_SECRET_ACCESS_KEY=test
- AWS_DEFAULT_REGION=us-east-1
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./.localstack:/tmp/localstack"
명령어:
bash
복사편집
docker-compose up -d
컨테이너 접속:
bash
복사편집
docker-compose exec localstack bash
🛠️ CLI 사용: awslocal
LocalStack 전용 CLI인 awslocal을 설치하면 aws CLI와 동일하게 사용할 수 있습니다.
bash
복사편집
pip install awscli-local
예시: SQS 사용
bash
복사편집
# 큐 생성
awslocal sqs create-queue --queue-name dev-queue
# 메시지 보내기
awslocal sqs send-message \
--queue-url http://localhost:4566/000000000000/dev-queue \
--message-body "테스트 메시지"
# 메시지 수신
awslocal sqs receive-message \
--queue-url http://localhost:4566/000000000000/dev-queue
# 큐 삭제
awslocal sqs delete-queue \
--queue-url http://localhost:4566/000000000000/dev-queue
Tip: aws 대신 awslocal만 쓰면 됩니다. 내부적으로는 LocalStack의 엔드포인트로 라우팅됩니다.
🧪 통합 테스트와 CI에서 LocalStack 활용
LocalStack은 단순한 로컬 개발용 도구를 넘어서, CI 파이프라인에 통합해 테스트 자동화에도 자주 사용됩니다.
예를 들어:
- GitHub Actions에서 LocalStack 컨테이너를 실행하고, Lambda 함수 테스트 수행
- SQS, SNS를 사용한 이벤트 기반 아키텍처의 단위 테스트
- S3 파일 업로드 후 처리 로직 검증
이러한 구조에서 LocalStack은 AWS Mock 서버 역할을 하며, 개발 단계부터 배포 전 검증까지 일관된 환경을 제공합니다.
🏗 폐쇄망 환경에서의 진짜 강점
LocalStack의 가장 큰 장점 중 하나는 인터넷 연결이 필요 없다는 점입니다.
- 모든 서비스가 로컬에서 실행됨
- AWS 계정, IAM 설정 불필요
- S3, SQS, SNS, DynamoDB를 통합적으로 사용할 수 있음
즉, 인터넷 연결이 차단된 내부망에서도 AWS 의존 코드를 그대로 개발하고 테스트할 수 있습니다.
🔄 다음 포스팅 예고: MinIO vs S3, 오브젝트 스토리지를 대체할 수 있을까?
LocalStack은 통합된 AWS 테스트 환경을 제공하지만, 오직 S3에만 집중하고 싶다면 MinIO도 훌륭한 대안이 될 수 있습니다.
다음 포스팅에서는:
- MinIO vs S3 인터페이스 비교
- 로컬 개발 환경에서 S3 대체 활용법
- LocalStack과의 차이점
등을 다뤄보겠습니다.