Home LocalStack을 활용한 AWS SNS/SQS 테스트
Post
Cancel

LocalStack을 활용한 AWS SNS/SQS 테스트

1. 글을 작성하게 된 계기


AWS SNS/SQS 를 사용하며 테스트 코드를 어떻게 작성하는지에 대해 기록하기 위해 글을 작성하게 되었습니다.

LocalStack is a cloud service emulator that runs in a single container on your laptop or in your CI environment.







2. LocalStack 의존성 및 도커 설정 추가


먼저 의존성을 추가해줍니다.

1
2
testImplementation("org.testcontainers:junit-jupiter:1.19.3")
testImplementation("org.testcontainers:localstack:1.15.3")







이후 도커 컴포즈에 AWS SNS/SQS에 대한 설정을 추가합니다. 포트는 기본 4566으로, 자신이 원하는 번호를 넣어도 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
version: "3.7"
services:
  localstack:
    image: localstack/localstack
    ports:
      - "4566:4566"
    environment:
      - SERVICES=sns,sqs
      - AWS_DEFAULT_REGION=ap-northeast-2

  initializer:
    image: amazon/aws-cli
    depends_on:
      - localstack
    environment:
      - AWS_DEFAULT_REGION=ap-northeast-2
      - AWS_ACCESS_KEY_ID=test
      - AWS_SECRET_ACCESS_KEY=test
    command: >
      /bin/sh -c "
        while ! nc -z localstack 4566; do
          sleep 1;
        done;
        echo LocalStack started;
        aws --endpoint-url=http://localstack:4566 sns create-topic --name ${EVENT_DIVIDER_TOPIC};
        aws --endpoint-url=http://localstack:4566 sns create-topic --name ${USER_SEARCH_EVENT_TOPIC};
        aws --endpoint-url=http://localstack:4566 sqs create-queue --queue-name ${EVENT_DIVIDER_QUEUE};
        aws --endpoint-url=http://localstack:4566 sqs create-queue --queue-name ${USER_SEARCH_EVENT_QUEUE};
      "







이때, Topic과 Queue를 생성해야 하는데, 이는 다음과 같이 설정할 수 있습니다.

1
2
3
4
aws --endpoint-url=http://localstack:4566 sns create-topic --name ${EVENT_DIVIDER_TOPIC};
aws --endpoint-url=http://localstack:4566 sns create-topic --name ${USER_SEARCH_EVENT_TOPIC};
aws --endpoint-url=http://localstack:4566 sqs create-queue --queue-name ${EVENT_DIVIDER_QUEUE};
aws --endpoint-url=http://localstack:4566 sqs create-queue --queue-name ${USER_SEARCH_EVENT_QUEUE};

.env 파일에 각 값들을 관리하면 한 곳에서 편하게 이를 컨트롤할 수 있습니다.







이후 테스트를 진행하면 다음과 같이 컨테이너가 메시지를 수신을 하는 것을 볼 수 있습니다.

1
2
3
4
5
6
localstack-1   INFO --- AWS sqs.CreateQueue => 200
localstack-1   INFO --- AWS sqs.CreateQueue => 200
localstack-1   INFO --- AWS sqs.ReceiveMessage => 200
localstack-1   INFO --- AWS sqs.ReceiveMessage => 200
localstack-1   INFO --- AWS sqs.ReceiveMessage => 200
localstack-1   INFO --- AWS sqs.ReceiveMessage => 200







3. 정리


LocalStack를 활용해 SNS/SQS 테스트를 어떻게 하는지에 대해 살펴보았습니다. 외부 의존성이 들어가면 테스트 및 빌드가 정말 까다로워지는데요, LocalStack을 통해 이런 의존성 문제를 해결해줍시다.


This post is licensed under CC BY 4.0 by the author.

부하 조절-Polling

새로 배운 Git 브랜치 관리 전략