What
LocalStack이란
- AWS 클라우드 서비스 에뮬레이터 이다.
- 실제 AWS를 셋팅하고 웹 애플리케이션을 로컬 환경에서도 실제 연결하는 비용 없이 간단하게 Local환경에서 AWS 클라우드 서비스를 이용하는 환경처럼 사용할 수 있다.
- LocalStack은 AWS Lambda, S3, Dynamodb, Kinesis, SQS, SNS 등과 같이 점점 더 많은 AWS 서비스를 지원한다(무료)
- 지속 가능한 코드임을 증명하기 위한 테스트코드에서 손쉽게 통합테스트 환경을 구축할 수 있다.
Why
- 가장 큰 것은 비용이다. 개발 환경을 위한 클라우드를 따로 만들면 되지만 그렇지 못한다면 지속적으로 동작가능한 코드임을 증명하지 못한다.
- S3 의존성이 추가된 가운데 외부 스토리지에 대한 호출용 클라우드가 없다면 웹 애플리케이션 테스트는 불가능하게 된다.
- 단순히 Mock을 통해 할 수 있지만 실제 기능 동작 여부를 지속적으로 파악할 필요가 있기 때문이다.
- 그리고 AWS에 대한 환경변수들의 보안 이슈가 될 여지가 있다.
How
- 컨테이너 테스트를 활용한 LocalStack
- 해당 코드를 test 디렉토리 하위에 위치시킨다. 그러면 해당 testContainer가 실행하면서 LocalStack도 띄어준다.
- 그러면 실제 파일 업로드, 가져오기, 삭제 등을 진행할 때 AWS환경이랑 유사하게 테스트가 가능하고 실제 환경에서도 환경의 불일치를 격지 않을 수 있다.
/** * @Document: aws s3 에뮬레이터 */ @TestConfiguration public class LocalStackS3Config { private static final DockerImageName LOCAL_STACK_IMAGE = DockerImageName.parse("localstack/localstack"); @Value("${cloud.aws.s3.bucket}") private String bucket; @Bean(initMethod = "start", destroyMethod = "stop") public LocalStackContainer localStackContainer() { DockerImageName parse = DockerImageName.parse("localstack/localstack"); return new LocalStackContainer(LOCAL_STACK_IMAGE) .withServices(LocalStackContainer.Service.S3); } @Bean public AmazonS3 amazonS3(LocalStackContainer localStackContainer) { AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard() .withEndpointConfiguration(localStackContainer.getEndpointConfiguration(S3)) .withCredentials(localStackContainer.getDefaultCredentialsProvider()) .build(); amazonS3.createBucket(bucket); return amazonS3; } }
- 실제 개발 환경에서 사용하기 위한 LocalStack
- Docker로 에뮬레이터를 띄어나야 한다.
REFER
localstack
localstack • Updated May 2, 2025