Redis 대역폭 초과 장애와 대응 과정 공유

안녕하세요. 29CM의 Customer Engagement Engineering 팀에서 상품 전시 영역을 책임지고 있는 김송이입니다. 2025년 겨울, 29CM 최대 규모의 블랙프라이데이 행사인 이구위크에서 발생한 Redis 대역폭 초과 장애에 대한 이야기와 그 대응 과정에 대해 공유하고자 합니다. 이 글에서는 장애의 원인 분석, 즉각적인 대응 조치, 그리고 향후 재발 방지를 위한 개선 작업에 대해 자세히 설명하겠습니다.

Redis 대역폭 초과 장애: 원인 분석 과정

이구위크가 시작된 첫날, 상품 전시 화면에서 장애가 발생했습니다. 초기에는 검색 결과와 상품 리스팅을 담당하는 서버의 일부 파드가 다운되면서 트래픽을 수용하지 못하게 되었습니다. 남아있는 파드는 처리 가능한 트래픽을 초과했고 결국 Netty 이벤트 루프의 포화 상태를 초래했습니다.

여기서 주목해야 할 점은, Redis의 헬스체크 실패 로그가 나타났다는 것입니다. 시스템 메트릭을 확인한 결과, CPU와 메모리는 정상 범위에 있었지만 Redis와의 통신에 실패한 이유를 찾기 위해 네트워크 지표를 살펴보았습니다. 이 과정에서 Redis 노드 타입이 cache.r7g.large로 설정되어 있었고, 이는 기본 네트워크 대역폭이 0.937Gbps라는 것을 알게 되었습니다. 이는 하루 동안 불규칙적인 트래픽의 증가로 인해 순간적으로 이 대역폭을 초과하게 되는 상황이 발생했습니다. 결과적으로 Redis의 버스트 크레딧이 소진되면서 Throttling이 제대로 작동하게 되었고, 이로 인해 장애가 발생했습니다.

대응 과정: 즉각적인 조치 및 수정

장애가 발생한 후, 신속하게 원인을 파악하고 대응하기 위해 노력했습니다. 장애가 발생한 시간인 20:58에 크레딧이 고갈되면서 발생한 Throttling으로 인해 Redis 연결과 명령 처리에 큰 지연이 발생하였습니다. 이 시점에서 획기적인 조치를 취하기로 결심했으며, Redis 노드를 스케일업하기로 결정했습니다.

기존의 cache.r7g.large에서 cache.r7g.2xlarge로 업그레이드하여 기본 대역폭을 약 2배로 증가시키며 상황을 개선할 수 있었습니다. 네트워크 사용률을 줄이기 위해 대규모 트래픽을 수용할 수 있는 인프라로 빠르게 대응했습니다. 당일 서비스 장애는 즉시 해소되었지만, 장기적인 대책을 마련하는 것이 더욱 중요하다고 판단했습니다. 이를 위해 장애가 발생한 원인을 명확히 이해하고, 지속적으로 트래픽 증가를 감당할 수 있는 인프라 구조로 전환해야 한다고 결심했습니다.

즉각적인 조치가 성공을 거두면서, 모니터링 대시보드를 강화하고 네트워크 대역폭을 실시간으로 확인 가능하도록 개선하는 방향으로 나아갔습니다.

재발 방지: 개선 작업과 장기 과제

장애 대응 후에는 같은 문제가 반복되지 않도록 여러 가지 조치를 진행했습니다. 첫 번째로, 네트워크 모니터링을 강화하여 Redis의 대역폭 사용량을 즉각적으로 확인할 수 있도록 했습니다. 이 과정에서 주요 네트워크 지표들을 실시간으로 관리하기 위한 모니터링 대시보드를 구축하였고, Datadog Alert를 통해 임계치를 초과할 경우 즉시 알림을 받을 수 있도록 설정하였습니다.

두 번째로, Redis의 네트워크 부하를 줄이기 위해 캐시 전략을 변경했습니다. 응답 빈도가 낮은 데이터에 대해 서버 내부 메모리를 활용하여 로컬 캐시를 구축했습니다. 이를 통해 Redis의 부하를 크게 줄이는 효과를 얻었으며, 실제 Redis 명령어 호출 수가 감소한 것을 확인할 수 있었습니다. 이와 함께 Redis와의 데이터 전송량 또한 크게 줄어들었습니다.

장기적으로는 Redis의 네트워크 대역폭 사용량을 최소화하기 위해 캐시 데이터의 압축을 고려하고 있습니다. Snappy 압축 알고리즘과 Protocol Buffers 형식으로의 전환을 검토하고 있어, 네트워크 대역폭 절감과 성능 개선을 동시에 기대하고 있습니다.

이번 Redis 대역폭 초과 장애를 통해 다양한 문제를 발견하고 해결할 수 있었습니다. 이를 계기로 시스템의 모니터링 관점이 얼마나 중요한지를 다시 한번 인식하게 되었습니다. 장애 대응과 더불어 한층 더 안정적인 사용자 경험을 제공하기 위해 지속적으로 노력할 것입니다. 향후에도 문제 해결을 위한 과정을 통해 서비스 구조를 점검하고 개선하여, 빠르고 안정적인 시스템으로 성장해 나가고자 합니다. 이 글을 읽어주신 모든 분들께 감사드립니다.

이 블로그의 인기 게시물

무신사머니 결제 시스템 연동의 안정성 및 혁신

매크로 코딩으로 시니어 성장의 벽 넘기

AI와 사람의 협업을 위한 VLMOps 어드민 구축기