반품지를 바꾸는 작업이 들어왔는데 배송 정책을 복제해 새로 연동하면 끝날 것으로 보였다. 실행하기 전에 기존 상품이 새 정책으로 옮겨지는지를 코드에서 확인했다.
Table of contents
Open Table of contents
복제 연동 하나로 보이던 작업
새로 연동하면 정책이 생기고 마켓에 새 반품지가 등록된다. 여기까지는 연동 과정에서 자동으로 처리되는 부분이다.
문제는 이미 등록된 기존 상품들이 어느 정책을 가리키느냐였다. 그 연결이 안 바뀌면 반품지도 옛 값 그대로 나간다.
버전 분기가 가른 이관
이관 코드를 열어 보니 구버전일 때만 기존 상품을 새 정책으로 옮기고 있었다. 이번 업체는 신버전이었으므로 그 조건에 해당하지 않았다.
기존 정책을 비활성화하는 코드도 그와 같은 분기 안에 들어 있었다. 결국 신버전 업체는 이관도 해제도 일어나지 않는 상태였다.
중복 활성으로 공존하는 상태
그러면 새 정책과 기존 정책이 둘 다 활성으로 남고 상품은 기존 정책을 가리킨다. 반품지를 바꾸려던 수만 건이 그대로 옛 정책의 값으로 나가게 된다.
작업의 목적은 반품지 변경인데 그 목적 자체가 달성되지 않는 상태였다. 새 정책이 생겼다는 사실과 반품지가 바뀌었다는 사실이 별개였다.
성공처럼 보이는 세 가지
연동 완료 메시지가 뜨고 마켓에 새 반품지가 등록되고 새 정책이 목록에 보인다. 이 셋이 나란히 보이면 작업이 성공한 것으로 읽힌다.
그래서 연동했으니 끝났다고 판단하고 넘어가기 쉬운 자리였다. 실제로 확인해야 하는 것은 그 셋이 아니라 상품이 어느 정책을 가리키는지 하나였다.
자동으로 안 되는 것과 하면 안 되는 것은 다르다
완전한 정리에는 신규 연동과 기존 정책 비활성화와 상품 재매핑 세 단계가 필요했고 자동인 것은 첫째뿐이었다. 나머지 둘은 사람이 별도로 수행하는 절차로 문서에 적었다.
이 분기가 왜 있는지 생각해 보니 신버전에서 연동 계층이 붙어 자동 이관이 위험할 수 있어서 일부러 뺀 것일 수 있었다. 그렇다면 결함이 아니라 수동 절차가 정답인 자리이므로 자동으로 안 된다와 자동으로 하면 안 된다를 구분해서 적어야 했다.
정리
- 자동 이관 로직에 버전 분기가 있을 수 있다
- 해당하지 않으면 이관도 해제도 안 된다
- 그러면 신규와 기존이 중복 활성으로 공존한다
- 대상은 옛것에 물린 채로 남는다
- 성공 메시지와 새 레코드와 외부 반영이 다 보여 끝난 줄 안다
- 확인할 것은 목적이 실제로 달성됐는지 하나다
- 완전 정리에 필요한 단계를 세어 별도로 수행한다
- 자동으로 안 되는 것과 하면 안 되는 것을 구분해 적는다