Beenslab Blog

LocalStack: 폐쇄망에서도 AWS 개발이 가능한 로컬 클라우드 환경

beenchangseo·2025년 1월 13일Hits

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과의 차이점

등을 다뤄보겠습니다.