목록 보기
2022년 1월 100% 할인 이벤트 장애 부검
백엔드

2022년 1월 100% 할인 이벤트 장애 부검

인프런
인프런
2022년 2월 1일

두줄요약

할인 이벤트의 트래픽 급증으로 발생한 반복 장애를 쿼리와 PostgreSQL Dead Tuple 관점에서 분석했습니다. 고용량 컬럼 분리와 쿼리 개선으로 근본 병목을 해소했습니다.

문제 상황

  • 100% 할인 이벤트 바이럴로 평소 대비 5~20배 트래픽 유입과 반복적인 서비스 장애
  • 모놀리틱 Node.js 서비스에서 강의 관련 테이블 병목이 전체 서비스 장애로 확산

원인 분석

  • 인덱스 미적용·비효율적 실행 계획·대용량 컬럼의 select *·대량 IN 조건에 따른 슬로우 쿼리
  • 단일 JSON 기반 캐시 데이터와 읽기 쿼리의 쓰기 DB 처리로 인한 쓰기 DB 부하 및 데드락
  • 수강생 수 갱신마다 고용량 강의 테이블에 UPDATE 발생, PostgreSQL Dead Tuple 급증에 따른 디스크 I/O 병목

해결 방법

  • 문제 쿼리 인덱스 추가·실행 계획 개선·불필요한 대용량 컬럼 조회 제거·기능 OFF 적용
  • 대량 강의 조회의 IN 조건을 20개 단위로 분할 처리하고, 읽기 쿼리를 읽기 DB로 전환
  • 강의 소개 고용량 컬럼을 별도 테이블로 분리해 수강생 수 UPDATE와 분리

주의할 점

  • DB 인스턴스 증설만으로는 비효율 쿼리와 데이터 구조 문제 해소 불가
  • 과도한 쿼리 추상화, 타입·테스트 부재로 장애 중 원인 코드 탐색과 안전한 수정 지연
  • 조직 성숙도 없이 MSA를 도입하기보다 장애 전파율이 높은 도메인부터 점진적 분리

다음 읽기

#node.js 주제를 이어서 읽기

강의실 개편

강의실을 React·NestJS·MikroORM 기반으로 재구현하고 기존 서버를 인증 게이트웨이로 유지했습니다. 테스트와 계층화로 유지보수성을 높이고 ORM 의존성 한계도 점검했습니다.

인프런
인프런
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...