Skip to content
isdnetworks
Go back

실패가 아니라 안 지워진 표시

(수정됨)

입점사에서 취소가 마켓 처리 실패로 뜨고 안내받은 자동 취소도 안 된다는 문의가 들어왔다. 요컨대 취소가 전혀 진행되지 않고 있다는 얘기였다.

Table of contents

Open Table of contents

증상 — 이미 종결된 주문

문의한 건들을 조회하니 orders.status 와 order_items.status 가 전부 CANCELLED 로 찍혀 있었다. 취소가 안 된 것이 아니라 이미 정상으로 끝난 상태였다.

그러면 왜 화면에는 대기로 뜨는지를 이어서 봐야 했다. order_cancels 를 GROUP BY status 로 세니 REQUESTED 로 수백 건이 그대로 남아 있었다.

원인 — 전환되지 않은 컬럼

주문은 끝났는데 order_cancels.status 만 전환되지 않고 남은 것이었다. 화면은 그 컬럼을 보고 취소 대기라고 표시하고 있었다.

즉 연동 실패가 아니라 표시 문제였다. 입점사 입장에서는 둘이 구분되지 않으므로 화면에 대기라고 뜨면 안 된 줄 알게 된다.

판단 기준 — 바뀐 확인 순서

두 가지 방법이 있었는데 이 유형의 문의를 받으면 마켓 연동 실패를 먼저 의심하고 laravel.log 를 뒤지는 것과 orders.status 와 order_cancels.status 의 불일치부터 확인하는 것이다. 뒤쪽을 골랐다. 이유는 불일치면 표시 문제이고 일치하면 진짜 실패라 한 번의 조회로 갈려서다. 대신 진짜 실패인 건은 그 조회만큼 조사가 한 단계 늦게 시작되는 것을 감수했다.

이 확인을 먼저 하면 조사 자체가 훨씬 짧게 끝난다. 해소는 잔존 건을 정리하는 것과 왜 전환이 안 됐는지 코드를 보는 두 갈래인데 앞의 것만 하면 또 쌓인다. 다만 전환 미동작의 코드상 원인은 이 시점까지 못 찾았고 미확인으로 적었다.

주의 — 드러난 요청 폭주

조사 중에 성격이 다른 것이 하나 나왔다. 한 주문에 order_cancels 행이 수백 건 있었고 엿새 동안 20분 간격으로 반복 생성돼 있었다.

무언가가 취소 요청이 없다고 판단해 계속 만든 것으로 보이고 마지막에 하나가 성공했는데 앞선 것들이 정리되지 않고 남았다. 표시 문제는 상태가 안 바뀐 것이고 폭주는 같은 요청을 계속 만든 것이라 성격이 다르므로 따로 조사 대상으로 분리했다.

조인 대상을 바꾼 조회

조회 요령도 하나 얻었는데 처음에는 orders.supplier_id 로 걸렀더니 일부가 안 잡혔다.

orders 에 그 식별자가 NULL 인 건이 있어서 order_items.supplier_id 로 JOIN 해야 전체가 잡혔다. 같은 식별자가 여러 테이블에 있으면 어디가 채워져 있는지를 확인하고 조인 대상을 고른다.

정리


Share this post on:

Previous Post
분리된 입구, 공유된 데이터
Next Post
바뀐 상태와 나가지 않은 요청