Skip to content
isdnetworks
Go back

이관이 바꾼 ID와 모르던 밖

한 채널의 옵션 등록에서 이미 등록된 속성과 값이 같다는 오류가 반복됐다. 오류 메시지에 코드 두 개가 나와서 그것부터 추적했다.

Table of contents

Open Table of contents

같은 값의 두 식별자

그 코드는 우리 옵션 식별자를 인코딩한 값이라 각각 되돌렸더니 둘 다 우리 옵션이었다. 하나는 지금 것이고 하나는 옛날 것이었다.

이 상품은 예전에 신규 구조로 이관된 것이었고 이관하면서 옵션에 새 식별자가 발급됐다. 속성값은 같은데 식별자만 달라진 상태다.

밖이 모르는 변경

마켓 쪽에는 이관 전에 등록한 것이 그대로 남아 있었다. 우리가 새 식별자로 등록을 시도하면 마켓 입장에서는 같은 속성값이 다른 코드로 이미 등록돼 있는 상황이 된다.

내부 이관이 외부 상태를 바꾸지 않으므로 밖은 옛 식별자를 계속 들고 있고 다음 수정 시도에서 충돌한다. 이관 시점에는 아무 문제가 없어 보이므로 이관 계획에서 외부 연동을 안 보면 놓친다.

대응된 경로와 안 된 경로

같은 등록을 하는 코드가 둘 있었다. 옛 경로는 현재 식별자만 쓰는데 새 경로는 옛 식별자가 있으면 그것을 우선해서 쓰고 있었다.

이 문제를 이미 알고 대응한 코드가 있었고 옛 경로에만 안 들어간 것이다. 그러면 옛 경로로 처리되는 이관 상품은 전부 이 오류가 나므로 한 건이 아니라 부류 전체가 대상이 된다.

두 갈래 대응

대응은 둘로 나눴다. 옛 경로에 같은 로직을 넣는 근본 수정과 지금 밀린 작업을 완료 처리하고 새 경로로 재시도하는 즉시 조치다.

앞쪽은 시간이 걸리고 뒤쪽은 지금 할 수 있으며 둘 다 필요하다. 근본 수정만 계획하면 그때까지 밀린 것이 계속 쌓인다.

무시 목록의 기준

이 시스템에는 무시해도 되는 오류 메시지 목록이 있어서 이미 원하는 값이라 안 바꿔도 되는 것들을 실패로 세지 않는다. 이번 오류를 거기 넣으면 어떨까 싶었지만 아니었다.

앞의 것들은 이미 원하는 상태라 무시해도 되지만 이것은 실제로 등록이 안 된 것이므로 무시하면 옵션이 안 올라간 채로 성공으로 세게 된다. 무시 목록의 기준은 무시해도 원하는 상태인지이고 실제로 안 된 것은 넣을 수 없다.

식별자를 바꾸는 이관을 할 때는 그 식별자가 외부에 나가 있는지를 먼저 확인해야 한다. 나가 있으면 외부에도 새 식별자로 다시 등록하거나 옛 식별자를 보존해 외부에는 계속 그것을 쓰거나 매핑 테이블을 두고 경계에서 변환하는 셋 중 하나를 골라야 한다.

정리


Share this post on:

Previous Post
원시 이벤트가 남기는 노이즈
Next Post
버전이 아니었던 버전 필드