Skip to content
isdnetworks
Go back

채널마다 매핑이 다르다

정산 마감 파일을 처리하는 도구에 새 채널을 추가해야 해서 기존 분류에 넣고 돌렸더니 오류가 났다.

Table of contents

Open Table of contents

증상 — 조회가 아예 안 됐다

기존 분류 집합에 새 채널 하나를 더했다.

PACK_ONLY_CHANNELS = {..., '<새 채널>'}

PACK_ONLY_CHANNELS 에 넣었더니 이 응답이 돌아왔다.

주문 옵션을 찾을 수 없습니다

값이 틀린 것이 아니라 JOIN 자체가 아예 안 걸리는 모양이었다.

검증 — 값을 대조했다

마감 파일의 번호와 DB 에 든 값을 나란히 놓고 봤다.

파일의 주문번호       2150867373
DB 의 묶음 번호 컬럼   312825116
DB 의 주문 번호 컬럼   2150867373

파일의 2150867373 이 주문 번호 컬럼과 일치하고 묶음 번호 컬럼에는 전혀 다른 값이 있었다.

이 채널을 PACK_ONLY_CHANNELS 에 넣었으니 묶음 번호로 조회한다. 파일에 없는 312825116 으로 찾고 있었으니 결과가 나올 리가 없었다.

원인 — 컬럼에 든 자체 ID

묶음 번호 컬럼에 든 312825116 이 무슨 값인지 따로 봤다.

그것은 그 채널의 자체 ID 였는데 우리가 부여한 번호가 아니라 그쪽 시스템의 내부 번호라서 파일에는 나오지도 않는다.

linkage_mall_pack_order_id 라는 이름이 내용을 보장하지 않는다는 것이 여기서 드러났다.

linkage_mall_pack_order_id

linkage_mall_pack_order_id 는 연동 마켓 묶음 주문 번호라는 뜻인데 채널에 따라 다른 것이 들어 있었다.

처음에는 다 같은 의미였겠지만 채널이 늘면서 의미가 갈렸고 그때마다 컬럼을 나눌 수 없으니 그냥 넣은 결과 공통 컬럼이 다형적이 됐다.

판단 기준 — 패턴이 셋

기존 채널들의 분류를 다시 정리해 보니 셋으로 갈렸다.

① 묶음 번호만    파일의 번호 = DB 의 묶음 번호 컬럼
② 주문 번호만    파일의 번호 = 상품 주문 번호 = DB 의 주문 번호 컬럼
③ 일반          묶음 번호 + 주문 번호 쌍으로 매핑

새 채널은 ② 주문 번호만 이었고 그 계열은 번호 하나가 옵션 하나를 가리키는 1:1이다.

1:1 매핑이라 그 뒤의 계산 쪽은 그대로 쓸 수 있었다. 번호별로 묶어 점유 비율을 내는 부분은 일반 채널과 같고 조회 방법만 다른 것이다.

조치 — 고칠 데가 넷

분류를 정하고 나니 실제로 고쳐야 할 자리가 넷이었다.

① 집합에 추가
② 분류 분기
③ 전용 조회 구조
④ 전용 DB 쿼리

처음에 내가 한 것은 PACK_ONLY_CHANNELS 에 넣은 것뿐이었다.

집합에만 넣으면 분기가 여전히 옛 경로를 타고 내려간다. 넷 중 하나라도 빠지면 어딘가에서 조용히 안 되는 상태가 된다.

재발 방지 — 신규 채널 절차

이 뒤로 신규 채널을 붙일 때의 절차를 적어 두었다.

1. 그 채널의 실제 데이터를 하나 뽑는다
2. 파일의 번호와 DB 의 컬럼들을 나란히 놓는다
3. 어느 컬럼과 일치하는지 본다

값 대조 하나면 ① ② ③ 중 무엇인지가 그 자리에서 정해진다.

패턴이 정해지면 넷을 다 고치고 계산 쪽은 건드리지 않는다. 새 채널을 붙이는 비용이 패턴을 정하는 것과 네 자리를 고치는 것으로 끝났다.

정리


Share this post on:

Previous Post
노드가 밖에서 안으로가 아니라 안에서 밖으로 붙었다
Next Post
정렬 없는 first가 엉뚱한 걸 복원한다