Search

웹훅(IAMPORT)으로 인한 주문 삭제 이슈

생성일
2025/01/20 06:37
태그
NestJS
성능개선
장애
날짜
상위 항목
하위 항목

개요

소비자가 타이어픽 APP, WEB을 통해 결제는 완료되었으나 주문내역이 보이지 않는 이슈

원인분석

현재 결제 시스템은 간단하게 작성해보면 아래와 같은 프로세스를 거친다.
현재 개발 서버 내에서는 장애재현이 불가능하여 정확한 원인을 규정 할 수 없는 상황이라 아래와 같이 가정한다.
가정. 결제완료 후 API 호출과 웹훅 발송은 순서를 보장 할 수 없다. 두 개의 결제완료 로직이 동시에 돌면서 발생한 케이스
의도적인 장애재현은 불가능하나 로그 확인결과(포트원 관리자, RDS) 아래와 같이 14시 51분 경 웹훅 URL 발송에 성공하였으나
실제로 블랙서클 주문이 14시 50분경에 이미 생성되어있어 오류를 반환하며 전체 취소 프로세스를 타게 된 것으로 추정됨
웹훅 URL 호출이 된 당시 진행되고 있던 결제완료 로직이 끝나지 않은 상태였다면 롤백 로직에 의해서 전체 진행중이던 트랜잭션이 원복되며
PENDING 상태로 남게 될 수 있음, 이 현상이 최근 자주 발생한 경위는 15일 경부터 발생한 RDS CPU 과부하 현상이 발생함으로 인해
결제완료 로직이 전반적으로 느려짐에 따라 문제가 발생한 것으로 추정됨
다만 블랙서클 주문 건의 경우에도 롤백 로직 내에 취소 로직이 들어가 있음에도 취소가 되지 않은 것은 경위 파악이 필요해보임

해결방안

1.
웹훅에 의해 블랙서클 주문을 다시 생성하지 않도록 예외처리 진행
2.
웹훅이 동시에 진행되지 않도록 딜레이 설정하여 가능한 후순위로 요청되도록 변경
3.
결제완료 로직 전반적인 성능 개선

결과

1, 2 번에 대해 작업을 진행하였으나, 해당 현상은 다시 한번 발생했다.
특정 결제로직에서만 문제가 발생하고 있는 상황이며 간헐적으로만 발생하는 문제가 있어 정확한 원인을 파악하기 어려운 상황이다.
정확한 원인 파악을 위해 RDS 스냅샷 기능을 사용하여 현재 운영 RDS를 복원진행하였다. 문제가 되는 주문을 확인해보니 특정 로직 호출 시 502 Bad Gateway가 반환되는 것을 확인했고 로직 자체에 의한 에러라기엔 생소한 에러가 발생
웹훅 재발송 시 0번 에러가 발생한 부분이 이와 동일한 현상일거라고 판단되어 이는 연결 지연에 의한 Connection Timeout이 아닌가 추정이 되어 해당 결제로직의 쿼리를 중점으로 모든 부분을 검토하였다.
검토 결과 문제가 되는 매입가이력 테이블을 발견하였다.
2024년 10월 경에 시작된 시스템 연동에 의해 해당 테이블에 로우가 누적되기 시작하였고, 해당 테이블을 JOIN하는 모든 로직에 부하가 걸리기 시작했던 것으로 보인다.
[결제로직 호출결과]
결제로직 내의 해당 테이블을 JOIN하는 로직을 제거함과 동시에 인덱싱을 건 후에 정상화가 된 것으로 해당 이슈는 종결되었다.