미처리 건을 전수조사하면서 실패 표시가 있는 것을 다 뽑아 하나씩 처리했다. 나중에 다른 것을 보다가 실패 표시가 없는데도 끝나지 않은 건을 발견했다.
Table of contents
Open Table of contents
완료인데 결과가 없는 건
상태는 완료인데 최종 결과 식별자가 비어 있고 마지막 로그에 차감 데이터가 필요하다고 적혀 있었다. 코드를 보니 처리 중에 특정 조건을 만나면 나중에 상쇄될 것이라는 전제로 완료 처리하고 있었다.
그 전제가 성립하려면 차감 데이터가 오고 그 뒤에 다시 처리돼야 한다. 완료라는 표시는 처리가 끝났다는 뜻이 아니라 지금 더 할 것이 없다는 뜻이었다.
오지 않은 나중
전제의 뒷부분을 담당하는 코드를 찾아보니 재조회하는 배치가 없었다. 데이터가 와도 아무도 다시 보지 않고 안 오면 더 말할 것도 없었다.
그러면 그 건은 영구 대기 상태로 남는데 겉으로 붙은 상태값은 완료다. 나중에 상쇄된다는 전제는 그 나중을 처리하는 코드가 있어야 성립한다.
실패만 훑는 조사의 사각
내 조사 조건은 실패 표시가 있는 것이었고 이 건들에는 그 표시가 없었다. 상태가 완료이므로 정상으로 분류되어 목록에 아예 오르지 않았다.
조건을 그렇게 짠 근거는 실패는 문제이고 완료는 안전하다는 가정이었다. 그 가정이 안 맞는 부류가 있으면 조사 자체가 그 부류를 구조적으로 못 본다.
상태가 아니라 결과물로 판정한다
새 조건은 상태가 완료이면서 최종 결과가 없고 상쇄될 대응 데이터도 없는 것으로 잡았다. 돌려 보니 여러 건이 나왔고 완료 시각이 전부 같은 시기에 몰려 있었으며 육 년도 더 전이었다.
상태값은 그 시점의 판단이고 그 판단이 어떤 전제에 기대고 있을 수 있다. 판단의 근거가 사라져도 상태값은 그대로 남으므로 결과물의 존재로 확인하는 편이 확실하다.
기술 판단과 도메인 판단
이 건들을 어떻게 종결할지는 강제 종결과 별도 상태 이관과 그대로 두기 중에서 갈렸다. 회계 처리와 얽히고 이미 지난 기간의 것이라 내가 정할 문제가 아니었다.
목록과 상황을 정리해 담당 부서에 넘기고 기술 판단과 도메인 판단을 구분했다. 이 패턴이 한 채널만의 것인지 전체 공통인지는 확인하지 못했으므로 미확인으로 적어 두고 남겼다.
정리
- 상태가 완료여도 최종 결과가 없을 수 있다
- 완료가 처리 끝이 아니라 지금 더 할 것 없음을 뜻할 수 있다
- 나중에 상쇄된다는 전제는 그 나중을 처리하는 코드가 있어야 한다
- 실패만 훑는 조사는 완료로 위장된 미완결을 구조적으로 못 본다
- 조사 조건에 깔린 가정을 먼저 적어 본다
- 판정은 상태값이 아니라 결과물의 존재로 한다
- 판단의 근거가 사라져도 상태값은 그대로 남는다
- 종결 방법이 도메인 판단이면 넘기고 미확인 범위는 적어 둔다