Skip to content
isdnetworks
Go back

전수 집계가 한 경로만 검증했다

감시 허용목록을 넓히려고 정본 채널 어휘를 확정해야 해서 관련 테이블을 전수로 집계했다.

Table of contents

Open Table of contents

상황 — 995행 전수 집계

집계는 이렇게 했다.

SELECT channel, COUNT(*) FROM distribution_clients GROUP BY channel;

distribution_clients 995행을 전부 세었으니 확정이라고 봤다.

전수 라는 말이 안심을 줬고 빠짐없이 셌으니 이 목록이 곧 정본이라고 읽은 것이다.

검증 — 소스를 다시 봤다

확정하기 전에 OrderCollectCommand 가 실제로 어디서 읽는지 봤다.

// OrderCollectCommand.php
if ($config->is_commerce) {
    $channel = $config->channel;              // commerce 설정 테이블
} else {
    $channel = $client->channel;              // 클라이언트 테이블
}
$this->emit($channel, ...);

is_commerce 에 따라 configclient 중 어느 쪽을 읽는지가 갈렸다.

내가 집계한 것은 그중 distribution_clients 한쪽뿐이었다. 한 커맨드 안에서도 분기에 따라 대상이 다른데 client 쪽만 본 것이다.

원인 — 절반만 봤던 것

집계한 것과 안 본 것이 is_commerce 로 갈렸다.

[집계함]     비-commerce 경로
[안 봄]      commerce 경로 — 다른 테이블

전수를 셌는데 한 경로만 검증한 셈이었다.

다른 커맨드도 봤다.

// ClaimCollectCommand.php
// 채널을 DB로 덮어쓰지 않음
$this->emit($this->channelName, ...);

channelName 을 그대로 쓰고 DB 를 아예 안 읽는다.

그래서 어휘가 세 갈래였다.

클라이언트 테이블의 값
commerce 설정 테이블의 값
코드에 박힌 값

어떤 표를 집계해도 셋째는 안 나온다.

여기서 앞서 알던 규칙 하나도 흔들렸는데 채널 문자열이 반드시 표준 형태여야 한다는 것이 OrderCollectCommand 에만 성립했다. DB 를 안 읽는 커맨드는 다른 형태를 썼는데 그 규칙이 어디까지 통하는지를 확인하지 않았다.

결과 — 미확정 66개

실제로 얼마나 미확정인지 셌다.

계측 대상 이벤트   113개
미확정             66개 (58%)

미확정 이 절반을 넘었고 두 계열에 몰려 있었다.

[하려던 것]  집계 끝 → 허용목록 확대 → 배포
[한 것]      확정 취소 → 경로별 재집계

허용목록을 그대로 넓혔으면 66개가 여전히 조용히 사라진 채로 확대 완료가 됐을 것이다.

앞서 확정이라고 적어 둔 것을 취소한다고 명시했는데 그 기록을 근거로 다른 작업이 진행되면 같은 잘못이 옮겨 간다.

주의 — 닫힘 기본은 조용하다

감시 허용목록이 닫힘 기본이었다.

목록에 있음  →  통과
목록에 없음  →  버림

버릴 때 아무 신호가 없다.

채널 문자열 하나 어긋남

허용목록에 없음

조용히 사라짐

"감시가 잘 돌고 있다"

감시가 안 되는 것을 감시로는 못 잡는다.

열림 기본이면 모르는 것이 통과해 이상한 것이 흘러들어와 눈에 띈다. 닫힘 기본은 모르는 것이 버려져 아무 일도 안 일어난다. 그래서 목록에 없어 버린 건수를 따로 세게 만들어 뒀다.

재발 방지 — 대상을 정하는 소스

채널 어휘를 확정하는 절차를 고쳤다.

① 커맨드별로 어느 테이블의 컬럼을 읽는지 소스에서 먼저 확인한다
② 경로별로 각각 전수 집계한다
③ DB 전수 집계 하나로 "검증 완료"라고 판단하지 않는다

소스가 대상을 정하고 집계는 그다음이다.

전수는 그 대상 안에서 전부라는 뜻이고 대상이 맞는지는 별개다. 집계 하나가 무엇을 확인하고 무엇을 확인하지 못하는지를 함께 적는 것이 요지였다.

정리


Share this post on:

Previous Post
장비에 맞춰 실행 설정을 조정했다
Next Post
마이그레이션 원본이 살아 있었다