이번 강의에서는 로컬 시스템에서 구현한 Resiliency 패턴을 Docker 컨테이너에서 테스트하는 방법을 다룹니다.
이미 각 마이크로서비스에 대한 Docker 이미지를 생성하고 Docker Hub에 푸시해 두었으며, 이제 이를 통해 Docker 환경에서 Resiliency 패턴을 테스트합니다.
모든 마이크로서비스의 pom.xml
파일에서 태그 이름을 s9
에서 s10
으로 변경한 후, Docker 이미지를 생성하고 이를 Docker Hub에 푸시합니다. 관련 명령어는 GitHub 저장소의 README
파일에 기재되어 있습니다.
Docker Compose
파일을 업데이트하여 Redis 서비스와 각 마이크로서비스를 s10
태그로 실행하도록 설정합니다.
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
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
s9
에서 s10
으로 변경합니다.업데이트된 Docker Compose
파일을 사용하여 Docker 컨테이너를 실행합니다.
docker compose up -d
이 명령어를 통해 모든 서비스가 백그라운드에서 실행되도록 설정했습니다.
Docker 컨테이너 환경에서 실행 중인 마이크로서비스에 대해 Resiliency 패턴을 테스트했습니다.
easybank/accounts/api/java-version
API를 여러 번 호출하여 RateLimiter가 작동하는지 확인했습니다. 초과 호출 시 Fallback 메서드가 실행되어 Java 17
이 반환되는 것을 확인했습니다.429 Too Many Requests
오류를 반환하는 것을 확인했습니다.다른 패턴(예: Retry, Circuit Breaker)은 Docker 환경에서 동일하게 동작할 것으로 기대되므로, 해당 테스트는 생략했습니다. 만약 추가적인 테스트가 필요하다면, 코드를 수정하고 이미지를 다시 생성한 후 테스트를 진행할 수 있습니다.