택배사 목록에 편의점 택배가 안 나온다는 신고가 운영 쪽에서 들어왔다. 데이터베이스에는 그 값이 있으므로 화면 쪽 필터 문제로 보고 조사를 시작했다.
Table of contents
Open Table of contents
조용히 숨기는 필터
목록을 내려 주는 API를 찾아 열어 보니 조건이 둘 걸려 있었다. 폐기된 코드를 빼는 조건과 특정 컬럼이 비어 있지 않아야 한다는 조건이었다.
두 번째 조건을 만족하지 못하면 목록에서 빠지는데 그 사실이 아무 데도 표시되지 않는다. 데이터베이스에는 있는데 화면에는 없는 상태가 조용히 만들어지고 새 택배사를 추가할 때 그 컬럼을 안 채우면 그렇게 된다.
동일한 쿼리로 한 확인
그러면 신고된 두 코드가 정말 그 경우인지를 먼저 확인해야 했다. 컨트롤러가 만드는 것과 정확히 같은 조건의 쿼리를 운영에 직접 실행했다.
조회해 보니 둘 다 그 컬럼이 채워져 있어서 필터를 그대로 통과했다. 비슷한 쿼리를 새로 짜면 조건이 미묘하게 달라질 수 있으므로 조건을 하나씩 대조해 옮겼다.
배제도 결론이다
즉 가장 유력하다고 본 이 필터가 원인이 아니었다. 그래서 이 이상은 이 필터로 설명되지 않으므로 다른 원인을 찾아야 한다고 정리했다.
원인을 못 찾았다는 것이 아니라 이 원인은 아니라는 형태의 결론이다. 가장 유력한 가설을 배제한 것이므로 다음 사람이 거기서부터 시작하지 않아도 된다.
못 찾아도 남은 것
원인은 못 찾았지만 유용한 것이 둘 나왔다. 목록 필터의 조건 둘을 알았으므로 앞으로 목록에 없다는 신고를 받으면 그 컬럼부터 보면 된다.
같은 편의점 계열인데도 배송 추적 플래그가 코드마다 다르다는 것도 함께 확인했다. 이번 증상과는 무관하지만 추적이 안 된다는 신고가 들어오면 먼저 볼 자리가 된다.
종결 리포트
이 조사를 그대로 덮지 않고 종결 리포트로 정리해 남겼다. 조사 배경과 확인한 쿼리와 그 결과와 결론과 남는 과제와 부수 발견을 함께 적었다.
원인을 못 찾고 끝나는 조사도 리포트를 남겼는데 안 남기면 다음 사람이 같은 가설로 같은 조회를 반복하기 때문이다. 배제한 가설을 적어 두는 것만으로도 다음 조사의 출발점이 달라진다.
정리
- 목록 API의 필터 조건이 항목을 조용히 숨길 수 있다
- 특정 컬럼이 비면 데이터베이스에 있어도 화면에 안 나온다
- 목록에 없다는 신고를 받으면 그 컬럼부터 확인한다
- 가설을 배제하는 것도 결론이다
- 못 찾았다가 아니라 이건 아니다로 적는다
- 원인을 못 찾아도 다음에 쓸 지식은 남는다
- 종결 리포트를 남기지 않으면 같은 조회가 반복된다
- 확인은 컨트롤러와 정확히 같은 쿼리로 한다