Search

ECS Task CPU 과부하 현상

생성일
2025/04/14 06:57
태그
장애
날짜
상위 항목
하위 항목

개요

무한로딩 문제가 발생함과 동시에 결제오류 등 전반적인 오류가 발생하기 시작함
요청 실패 (502)

원인분석

최근 요청수에 따른 차단 정책이 추가된 이력이 있어 WAF 측 설정 먼저 확인해보았으나 별다른 차단 로그 등이 없었고, 대부분의 에러는 502 ( Bad Gateway )가 발생함
이 경우 아예 서버에 요청이 접근을 못했거나, 서버에서 처리를 못하여 로그를 남기지 못한 것일거라 판단
ECS Task를 확인해보니 4월 14일 경 09시를 시작으로 ECS Task의 서버 CPU 및 메모리가 상승하기 시작
동시에 Task들이 오토스케일링 정책에 의해 생성되고 중단되고 있음을 파악함
전반적인 정황을 봤을 때 결제오류 등 현재 발생하고 있는 모든 오류가 고객센터에서 인입된 무한로딩 이슈으로 인해 서버가 요청을 처리하지 못하고 종료되는 이슈로 판단함
ECS Task CPU 사용량
RDS CPU 사용량
결제모듈의 웹훅의 경우에도 발송오류(502) 에러코드를 반환

결론 및 조치

처음에는 결제 오류 해결을 상세 조회 무한 로딩 문제보다 우선순위로 두었으나 조사 결과, 두 문제의 근본 원인이 동일하다는 것을 인지함
로직 분석 및 디버깅 결과, 특정 매장(RepairShop)의 '영업 중단 일자' 데이터가 2,741건으로 다른 매장에 비해 비정상적으로 많고 이 때문에 해당 매장 상세 조회 시 관련 쿼리가 최종적으로 10만 건 이상의 방대한 데이터를 조회하게 됨
이렇게 조회된 대규모 데이터를 TypeORM 객체로 변환하는 과정에서 병목 현상이 발생한 것으로 보임. 구체적으로는 Node.js의 pg 모듈 내 parseRow 함수가 PostgreSQL 데이터 타입을 Node.js 형식으로 변환할 때, 수십만 건의 데이터를 처리하면서 CPU 및 메모리 자원을 과도하게 소모한 것으로 확인함
문제가 된 쿼리에 대한 조치 후 개선된 것으로 확인됨