Skip to content
isdnetworks
Go back

백지에서 시작한 새 레코드

교환을 반품으로 바꿔 달라는 문의를 담당자가 수기로 처리했다. 교환을 철회하고 반품을 재접수하는 방식이었고 전환 자체는 됐다.

Table of contents

Open Table of contents

두 행의 시각 차이

관련 행을 시간순으로 조회했다.

SELECT id, return_type, return_status, is_collected,
       collect_tracking_number, created_at, deleted_at
  FROM order_returns WHERE order_id = ? ORDER BY created_at;
id       유형   상태      수거   회수송장        생성             삭제
──────────────────────────────────────────────────────────────────────
775765   교환   request   1      70801601339xx   06-10           08-21 14:58:59
784365   반품   request   0      (없음)          08-21 14:59:40   -

철회와 생성 사이가 41초였다. 배치가 처리했다면 같은 초이거나 밀리초 단위 차이일 것이므로 이 간격 자체가 사람이 화면에서 두 번의 조작을 했다는 증거다. 시각 차이만으로 수기인지 자동인지가 갈린다.

수거 정보의 유실

옛 건은 수거가 완료돼 회수송장이 있고 새 건은 미수거에 회수송장이 없다. 수거 정보가 새 건으로 따라오지 않았다.

문제는 실물이 이미 우리 쪽에 있다는 것이다. 옛 건에 회수송장이 남아 있으므로 실제로 회수는 됐고, 시스템만 미수거로 알고 있다. 이 상태에서는 반품이 수거 대기로 남아 환불도 정산도 진행되지 않는다.

여기서 판정이 갈렸다. 전환만 보면 반품 건이 생겼으니 성공이고 상태를 보면 수거가 비어 있으니 미완이다. 전환의 성공이 처리의 완료가 아니다. 새로 만들어진 행이 있다는 사실은 그 행이 필요한 값을 갖췄다는 뜻이 아니다.

앞 건의 방치

옛 건을 다시 보니 6월 10일에 생성돼 수거가 완료됐는데 상태는 여전히 요청 상태였다. 두 달 넘게 종결되지 않은 채로 있었다.

정리하면 두 가지가 겹쳤다. 교환 건이 수거 완료인데 종결되지 않고 두 달 방치된 것이 하나이고, 철회와 재접수 과정에서 수거 정보가 유실된 것이 다른 하나다. 앞의 것이 뒤의 것을 불렀다. 종결이 안 되니 담당자가 화면에서 수기로 전환할 수밖에 없었고 그 과정에서 값이 빠졌다.

후속 조치의 분담

이 건을 끝내려면 입점사에 실물 회수 여부를 확인하고 확인되면 수거를 접수한 뒤 반품을 강제로 완료 처리해야 한다. 세 단계 중 첫 번째를 시스템이 대신할 수 없다. 실물이 어디 있는지는 DB에 없는 정보다.

그래서 개발이 왜 이렇게 됐는지와 무엇을 해야 하는지를 정리하고 실제 확인과 수기 처리는 CS 쪽에서 수행하는 것으로 분담이 갈렸다. 자동화할 수 없는 지점이 어디인지를 먼저 확정하면 누가 무엇을 할지가 따라 나온다.

같은 유형의 문의를 받을 때 볼 지점도 정했다. 전환 자체의 성공 여부가 아니라 새로 생긴 반품 건의 수거 상태를 확인한다.

SELECT is_collected, collect_tracking_number FROM order_returns WHERE id = ?;

수기 처리의 성질

이 건이 보여 주는 것은 수기 처리가 상태를 옮기지 않는다는 점이다. 코드에 전환 로직이 있으면 관련 값을 함께 옮기도록 짜여 있지만, 화면에서 새로 만드는 것은 앞의 값이 무엇이었는지 알지 못한 채 시작한다. 새 레코드는 백지에서 시작하고 옮겨야 할 값을 사람이 기억해서 채워 넣지 않으면 비어 있다.

이 불일치를 확인할 수 있었던 것은 앞 건이 소프트 삭제로 남아 있었기 때문이다. 하드 삭제였다면 앞 건이 사라져 실물이 회수됐는지 알 방법이 없었을 것이고 후속 조치의 첫 단계조차 근거 없이 시작했을 것이다. 삭제된 행이 증거가 됐다.

정리


Share this post on:

Previous Post
인덱스가 아니라 N+1
Next Post
레거시 PHP 프로젝트를 인수받으면 가장 먼저 하는 것들