SQS → Consumer 파이프라인에서 메시지 수신이 실패한 상황에서 그 원인과 대응 전략을 회고하기 위한 글이다. 무슨 일이 있었나?SNS → SQS → Consumer 구조는 AWS에서 흔하게 쓰이는 패턴이다. 우리도 이 시스템을 채택하고 있었고 한 서비스가 하나의 큐를 리스닝하고 있는 구조이다. 그러나 운영 중에 서비스가 동작하지 않는다는 제보가 생겼고 큐를 확인했더니 메인 큐에 여러 메시지가 쌓여있는 것을 보았다. 🤯 하지만 DLQ에는 쌓여있는 메시지가 0개였다. 실패된 메시지에 대해서는 3번 재시도 후 DLQ로 빠지고 DLQ의 메시지 수가 증가하면 알림이 트리거 되어야 한다. 하지만 메시지가 DLQ에도 없고 메인 큐에서도 지속적으로 증가하지 않고 메시지가 증가했다가 사라지는 패턴을 반복하..
2025.09.12 - [Server/Architecture] - 🎯 Resilience4J 라이브러리의 개념과 Circuit Breaker의 동작 과정 🎯 Resilience4J 라이브러리의 개념과 Circuit Breaker의 동작 과정Resilience4j 란?fault tolerance (결함 허용) 라이브러리이다. 즉 오류나 장애가 발생해도 서비스가 중단되지 않게 안정적으로 도와주는 서비스이다. 이 기능을 구현하기 위한 여러 Resilience4j 모듈이 있mingyum119.tistory.com 여기서 어떻게 라이브러리의 목적이 무엇인지 알아보고, 이 목적을 구현하기 위한 여러 모듈 중 Circuit Breaker에 대해 알아보았다. 2025.09.12 - [Framework/Spring..
Resilience4j 란?fault tolerance (결함 허용) 라이브러리이다. 즉 오류나 장애가 발생해도 서비스가 중단되지 않게 안정적으로 도와주는 서비스이다. 이 기능을 구현하기 위한 여러 Resilience4j 모듈이 있다.장애가 전파되지 않도록 차단하는 CircuitBreaker실패 시 자동 재시작으로 장애 극복을 시도하는 Retry결과를 캐시해 장애가 나더라도 결과를 전달하게 하는 Cacjhe갑작스럽게 트래픽이 폭증한 상황에서 요청량을 제어하는 RateLimiter자원을 배분해서 장애가 나도 다른 서비스에서 작동하도록 하는 BulkHead응답시간 초과 시 타임아웃으로 지연 장애가 전파되지 않도록 하는 TimeLimiter 이 포스팅에서는 Circuit Breaker 모듈에 집중해서 알아보도..
2023.08.27 - [Server/Architecture] - Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) 시스템 아키텍쳐 해당 프로젝트에서 사용한 시스템 아키텍쳐는 다음과 같다. 1. 개발자가 코드를 수정하고, 배포를 원하는 브랜치로 Github에 Push한다. 2. Github Actions에서 정해진 워크플로우에 따 mingyum119.tistory.com 위 포스팅에 이어서, Github Actions 워크플로우를 실행하고 CodeDeploy, S3를 이용해 EC..
시스템 아키텍쳐 해당 프로젝트에서 사용한 시스템 아키텍쳐는 다음과 같다. 1. 개발자가 코드를 수정하고, 배포를 원하는 브랜치로 Github에 Push한다. 2. Github Actions에서 정해진 워크플로우에 따라 두 가지 작업을 수행한다. (1) CodeDeploy에 배포 요청을 보낸다. (2) Gradle 빌드를 수행한 후 생성된 jar 파일을 S3 버킷에 저장한다. 3. 배포 요청을 받게 되면, CodeDeploy Agent (배포 작업을 수행하는 프로그램) 가 EC2 서버 내에서 개발자가 직접 작성한 appspec.yml를 스캔 후 빌드 스크립트를 실행하게 된다. 4. 빌드 스크립트 내에서 두 개의 포트를 번갈아가며 스위칭하여, 블루/그린 배포를 수행한다. 이 결과 8081 포트가 작동 중일 ..
Could not create service of type ScriptPluginFactory \ using BuildScopeServices.createScriptPluginFactory(). > Could not create service of type CrossBuildFileHashCache \ using BuildSessionScopeServices.createCrossBuildFileHashCache(). ./gradlew build를 입력했을 때 위와 같은 에러가 뜨면서 Build가 실패되었다. ./gradlew build --stacktrace로 예외클래스를 찾아보니 ServiceCreationException이라는 친구였다. * Exception is: org.gradle.internal..
RUN apt-get install -y apache2 FROM ubuntu:20.04 MAINTAINER MINGYUM KIM RUN apt-get updatee RUN apt-get install -y apache2 EXPOSE 80 CMD ["apachectl", "-D", "FOREGROUND"] Dockefile을 위와 같이 작성하고 Docker 이미지를 빌드하였다. 그러나 아래 코드에서 "Geographic Area:"를 출력한 후 Building이 더 진행되지 않는 문제가 있었다. RUN apt-get install -y apache2 해결 방법 (1) apt 패키지 관리자가 지역 설정을 찾지 못하는 경우 FROM ubuntu:20.04 MAINTAINER MINGYUM KIM # 로케일 ..
터빈 서버란 ? 마이크로서비스에 설치된 히스트릭스 (Hystrix) 클라이언트 스트림 메시지를 터빈 서버로 통합하여 관리한다. 히스트릭스 클라이언트 스트림이란, 마이크로서비스에 설치된 ‘히스트릭스 클라이언트’ 에서 서비스 처리 요청에 대한 결괏값을 스트림으로 전달해준다. 사용자는 이를 통해 서비스가 잘 돌아갔는 지 확인할 수 있게 된다. 터빈 서버 구축하기 터빈 서버를 마이크로서비스에 등록하기 위해서는, 먼저 터빈 서버를 생성하고 build.gradle에 아래 라이브러리를 추가해준다. implementation 'org.springframework.cloud:spring-cloud-starter-netflix-turbine' 터빈 서버의 application.yml을 보면 아래와 같다. server: p..