Skip to content
isdnetworks
Go back

하위 할인을 지우는 상위 수정

이관으로 복사된 할인을 보정하는 커맨드를 설계하면서 상위만 고치면 하위에 전파되는지를 확인해야 했다. 상위를 수정할 때 무엇이 도는지를 순서대로 읽었다.

Table of contents

Open Table of contents

전 필드를 복사하는 전파

전파 함수를 보니 상위의 전 필드를 배열로 만들어 각 하위에 그대로 넘기고 있었다. 하위 수정 함수는 그 배열을 모델의 채우기 허용 목록에 따라 적용한다.

모델의 허용 목록을 확인하니 할인 관련 필드가 들어 있었다. 상위의 할인 값이 그대로 하위에 채워진다는 뜻이었다.

값으로 전파되는 없음

여기서 문제가 드러난다. 상위에 할인이 없고 하위에 할인이 있는 상태에서 상위를 수정하면 상위의 없음이 값으로 복사돼 하위 할인이 사라진다.

내가 기대한 것은 하위 할인을 안 건드리는 유지이거나 상위 기준으로 다시 계산하는 재계산이었다. 실제 동작은 둘 다 아니고 삭제였으며 상위에 없는 것을 하위에도 없게 만든다.

보호되는 예외

다만 예외가 하나 있었는데 프로모션이 걸린 하위는 그 필드를 빼고 채우도록 보호돼 있었다. 보호 대상이 아닌 하위만 덮인다.

이 예외가 있다는 것 자체가 전파가 덮어쓴다는 사실을 코드가 이미 알고 있었다는 뜻이다. 다만 보호 범위가 프로모션 하나로 좁았다.

시점이 예측 불가한 전파

원래 계획은 상위만 고치면 전파되리라는 것이었는데 전파는 되지만 지금이 아니라 다음에 상위를 수정할 때 된다. 그 시점이 언제일지 알 수 없다.

상위만 고치고 기다리면 그때까지 하위에 옛 할인이 남아 그 값으로 팔린다. 그래서 상위와 하위를 모두 직접 수정해 즉시 정리하는 쪽으로 정했다.

먼저 정해야 할 정책

이 조사에서 더 큰 것이 나왔는데 하위 단독 할인이 상위 수정 한 번으로 소실된다는 사실이다. 특정 채널에만 할인을 거는 것이 사실상 불가능하고 운영자는 걸어 놓고 왜 없어졌는지를 모른다.

지금 구조는 할인이 상위에서만 정해진다는 것을 전제하므로 하위 단독 할인을 허용하려면 전파 규칙을 먼저 손봐야 하고 안 허용하려면 화면에서 입력을 막아야 한다. 입력은 되는데 유지가 안 되는 상태가 가장 나쁘므로 둘 중 하나로 정해야 한다. 전 필드 복사는 부분 갱신이 아니라 전체 치환이고 외부 API에서 안 보낸 필드가 지워지는 것과 같은 구조가 내부 전파에서도 생긴다.

정리


Share this post on:

Previous Post
설정이 쌓인 층의 지도
Next Post
프로젝트별 설정 차이를 비교했다