Docker 컨테이너를 사용한 Resiliency 패턴 테스트

날아올라돼지야·2024년 8월 29일
0

이번 강의에서는 로컬 시스템에서 구현한 Resiliency 패턴을 Docker 컨테이너에서 테스트하는 방법을 다룹니다.

이미 각 마이크로서비스에 대한 Docker 이미지를 생성하고 Docker Hub에 푸시해 두었으며, 이제 이를 통해 Docker 환경에서 Resiliency 패턴을 테스트합니다.

1. Docker 이미지 생성 및 Docker Hub에 푸시

모든 마이크로서비스의 pom.xml 파일에서 태그 이름을 s9에서 s10으로 변경한 후, Docker 이미지를 생성하고 이를 Docker Hub에 푸시합니다. 관련 명령어는 GitHub 저장소의 README 파일에 기재되어 있습니다.

2. Docker Compose 파일 업데이트

Docker Compose 파일을 업데이트하여 Redis 서비스와 각 마이크로서비스를 s10 태그로 실행하도록 설정합니다.

  • Redis 서비스 추가: RateLimiter 패턴 구현을 위해 Redis 서비스를 추가합니다.
services:
  redis:
    image: redis
    ports:
      - "6379:6379"
    healthcheck:
      test: [ "CMD-SHELL", "redis-cli ping | grep PONG" ]
      timeout: 10s
      retries: 10
    extends:
      file: common-config.yml
      service: network-deploy-service
  • Gateway 서버 업데이트: Redis 의존성을 추가하고, Redis와의 연결 설정을 위한 환경 변수를 추가합니다.
  gatewayserver:
    image: "eazybytes/gatewayserver:s10"
    container_name: gatewayserver-ms
    ports:
      - "8072:8072"
    depends_on:
      accounts:
        condition: service_healthy
      loans:
        condition: service_healthy
      cards:
        condition: service_healthy
      redis:
        condition: service_healthy
    environment:
      SPRING_APPLICATION_NAME: "gatewayserver"
      SPRING_DATA_REDIS_CONNECT-TIMEOUT: 2s
      SPRING_DATA_REDIS_HOST: redis
      SPRING_DATA_REDIS_PORT: 6379
      SPRING_DATA_REDIS_TIMEOUT: 1s
    extends:
      file: common-config.yml
      service: microservice-eureka-config
  • 각 마이크로서비스 태그 업데이트: 모든 마이크로서비스의 Docker 이미지 태그를 s9에서 s10으로 변경합니다.

3. Docker Compose 실행

업데이트된 Docker Compose 파일을 사용하여 Docker 컨테이너를 실행합니다.

docker compose up -d

이 명령어를 통해 모든 서비스가 백그라운드에서 실행되도록 설정했습니다.

4. Resiliency 패턴 테스트

Docker 컨테이너 환경에서 실행 중인 마이크로서비스에 대해 Resiliency 패턴을 테스트했습니다.

  • RateLimiter 패턴 테스트 (Accounts 서비스): easybank/accounts/api/java-version API를 여러 번 호출하여 RateLimiter가 작동하는지 확인했습니다. 초과 호출 시 Fallback 메서드가 실행되어 Java 17이 반환되는 것을 확인했습니다.
  • Apache Benchmark 사용한 RateLimiter 테스트 (Gateway 서버): Apache Benchmark 도구를 사용해 Gateway 서버의 RateLimiter 패턴을 테스트했습니다. 10개의 요청 중 8개가 429 Too Many Requests 오류를 반환하는 것을 확인했습니다.

5. 기타 패턴 테스트

다른 패턴(예: Retry, Circuit Breaker)은 Docker 환경에서 동일하게 동작할 것으로 기대되므로, 해당 테스트는 생략했습니다. 만약 추가적인 테스트가 필요하다면, 코드를 수정하고 이미지를 다시 생성한 후 테스트를 진행할 수 있습니다.

profile
무슨 생각하며 사니

0개의 댓글