전체 글

😼 Github : https://github.com/Mingyum-Kim
Server/MQ

SQS 메시지 유실이 발생하는 원인을 CloudWatch 지표로 분석하기

SQS → Consumer 파이프라인에서 메시지 수신이 실패한 상황에서 그 원인과 대응 전략을 회고하기 위한 글이다. 무슨 일이 있었나?SNS → SQS → Consumer 구조는 AWS에서 흔하게 쓰이는 패턴이다. 우리도 이 시스템을 채택하고 있었고 한 서비스가 하나의 큐를 리스닝하고 있는 구조이다. 그러나 운영 중에 서비스가 동작하지 않는다는 제보가 생겼고 큐를 확인했더니 메인 큐에 여러 메시지가 쌓여있는 것을 보았다. 🤯 하지만 DLQ에는 쌓여있는 메시지가 0개였다. 실패된 메시지에 대해서는 3번 재시도 후 DLQ로 빠지고 DLQ의 메시지 수가 증가하면 알림이 트리거 되어야 한다. 하지만 메시지가 DLQ에도 없고 메인 큐에서도 지속적으로 증가하지 않고 메시지가 증가했다가 사라지는 패턴을 반복하..

Other/기록

일로, 여행으로 가득 채운 2025 하반기 🛫👩‍💻

2025가 끝나고 하반기를 돌아보았다. 엄마와 함께 유럽 여행 2025년 하반기에 가장 뜻깊었던 일이라면 엄마와 단둘이 유럽 여기저기를 다닌 것이다.스무살 되고 나서 본가와 먼 학교에서 자취하며 지내다보니 성인 이후 부모님과 교류가 적었다. 그래서 나 자신에 대해서 알아갈 시간은 많았지만 부모님에 대해서 알아갈 시간은 적었던 것 같다. 그러던 중 해외살이를 시작하게 되었고, 부모님은 많은 걱정을 하며 나를 보내주셨다.그렇게 3개월 정도가 지나 엄마가 시간 여유가 생겨 유럽에 놀러오게 되었고, 내친김에 2개월 넘게 독일 살이를 결정하셨다. 엄마와 시간을 보내면서 가장 놀라웠던 것은 엄마의 강인함이다. 워낙 안정성을 추구하시고 소녀같은 분이라 유럽 살이가 괜찮으실 지 걱정했는데, 필요한 것만 몇 개 알려드..

Server/Architecture

🎯 왜 OpenFeign과 Circuit Breaker를 함께 사용할까?

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..

Framework/Spring

🎯 Spring Cloud OpenFeign의 개념과 사용 방법 알아보기

팀 코드를 살펴보다가 외부 서비스와 연동하여 API를 호출하기 위해 @FeignClient 라는 어노테이션을 사용하는 것을 보았다.어떤 원리로 REST API로 서비스와 연동을 하고 있는 지 파악하기 위해 글을 작성한다. Feign 은 HTTP API 호출을 쉽게 해주는 자바 라이브러리이다. Feign 에서 구현된 인터페이스와 어노테이션으로 HTTP API를 호출할 수 있다. 순수한 Feign을 사용해도 좋지만, Spring와 함께 사용해서 DI와 JSON 직렬화/역직렬화 기능을 사용한다면 더욱 확장성 있게 사용할 수 있다. Spring Cloud에서는 Feign을 Spring Boot 환경에서 쓸 수 있게 통합한 모듈로, Spring Cloud OpenFeign 라이브러리를 도입했다.💡 Sprin..

Server/Architecture

🎯 Resilience4J 라이브러리의 개념과 Circuit Breaker의 동작 과정

Resilience4j 란?fault tolerance (결함 허용) 라이브러리이다. 즉 오류나 장애가 발생해도 서비스가 중단되지 않게 안정적으로 도와주는 서비스이다. 이 기능을 구현하기 위한 여러 Resilience4j 모듈이 있다.장애가 전파되지 않도록 차단하는 CircuitBreaker실패 시 자동 재시작으로 장애 극복을 시도하는 Retry결과를 캐시해 장애가 나더라도 결과를 전달하게 하는 Cacjhe갑작스럽게 트래픽이 폭증한 상황에서 요청량을 제어하는 RateLimiter자원을 배분해서 장애가 나도 다른 서비스에서 작동하도록 하는 BulkHead응답시간 초과 시 타임아웃으로 지연 장애가 전파되지 않도록 하는 TimeLimiter 이 포스팅에서는 Circuit Breaker 모듈에 집중해서 알아보도..

Language/Kotlin

[Kotlin] runBlocking을 사용해 코루틴 함수 호출하기

업무 중 다른 팀이 개발한 프로젝트를 라이브러리로 가져와 사용할 일이 있었다. 메서드를 사용하던 와중에 처음 보는 컴파일 에러를 발견했다.Suspend function 'suspend fun test()' can only be called from a coroutine or another suspend function. 호출한 메서드가 suspend 함수이기 때문에 코루틴이나 다른 suspend 함수 내에서만 호출 가능하다는 문구이다. suspend 함수란?코루틴에서 함수를 실행할 때 도중에 멈출 수 있음을 표시하기 위해 사용한다. 함수가 실행 중 멈추는 경우에 스레드를 점유하며 성능이 저하되는 현상을 방지하기 위해, suspend 함수에서는 함수가 멈춰있는 동안 해당 스레드를 다른 코루틴 프로세스가 점..

업무/기술회고

이벤트 발행/구독 모델을 활용한 실시간 데이터 동기화 feat. AWS SNS, SQS

🎯 프로젝트 목표앞서 기술회고에서 우리 서비스가 다른 서비스와 실시간으로 데이터가 동기화되고 있다는 언급을 하였다.가끔 예측하지 못한 이유로 이러한 동기화가 제대로 작동하지 않는 경우가 있다. 빠른 후속조치를 위해 상태 변화 전송이 누락된 사용자에 대해 이벤트를 발행하고 데이터를 완전히 동기화시키는 기능이 필요해졌다. 사용자 아이디의 리스트를 받아 해당 사용자의 상태 변화를 트래킹 할 수 있는 이벤트를 전송하는 것을 목표로 한다. 🤔 구현 방식이벤트 발행을 트리거할 수 있는 API를 디자인한다.사용자의 정보를 담은 적절한 이벤트 객체를 생성하고 발행한다. 이벤트가 타 서비스에서 잘 소비되고 있는 지 확인한다. ⚒️ 기술 스택이 글은 이벤트 발행과 구독, 소비하는 패턴의 흐름을 중점적으로 다루는 글이..

업무/기술회고

Prometheus & Grafana & Micrometer 를 사용한 지표 생성과 알림 추가

🎯 프로젝트 목표우리 서비스에서 사용자에게 제공하는 비즈니스 로직으로 인해, 우리 서비스 내부에서만 확인할 수 있는 데이터가 있다. 해당 데이터를 활용해 제공할 수 있는 또 다른 기능이 다른 서비스로 확장되면서 다른 서비스에서 우리 서비스와 데이터를 동기화 할 필요가 생겼다. 그래서 이벤트를 발행해 우리 서비스 데이터의 새로운 업데이트가 생기면 다른 서비스에서 구독해서 데이터를 동기화하였다. 이러한 흐름에서, 두 서비스의 데이터가 일치하지 않으면 즉각 발견하고 대응할 필요가 생겼다. 이 니즈를 해결하기 위해 알림 시스템을 사용하고, 알림을 발생시키기 위한 지표를 수집해야한다. 이에 따라 지속적으로 현재 우리 서비스의 상태값과 해당 서비스의 상태값이 일치하는 지 확인하는 업무를 맡게 되었다. 🤔 구현..

Other/기록

[회고] 2025 상반기 회고 📈 모로 가도 서울만 가면 된다!

많은 일이 있었던 2024 하반기 회고를 시원하게 날려먹고 쓰는 2025 상반기 회고!한달 회고 작성하는 것도 미루고 미루다 미룬이가 되어버렸다. 그래도 일년에 두번은 써야지 음음 나는 지금 독일에 있다. 2월 말에 독일로 넘어와 3월부터 백엔드 개발자로 일을 시작했다.한국에서 꿈꿨던 외국 생활처럼 모든 게 낭만적이고 여유롭지만은 않다. 오히려 한국에서 독일로 넘어온 과도기적 시기다보니 신경쓸 게 많고 새로운 환경에 적응하느라 정신이 없다.그래도 어찌저찌 시간이 흘러 입사한 지 4개월이 지났고 어느덧 5개월차를 바라보고 있다. 모든 게 어색했던 초반과 다르게 생활에도 익숙해지고 여기저기 여행도 많이 다니고, 이제는 일도 많아지는 걸 보니 팀 내에서 정식 팀원 비슷한 게 된 것 같기도 하다. Tempora..

MINGYUM
코딩하는 겸