특정 부류만 다르게 분류해서 내보낼 수 있냐는 문의를 받았다. 코드를 읽으니 분류 매핑이 분류 단위로만 돼 있어서 불가능하다고 답하려던 참이었다.
Table of contents
Open Table of contents
코드가 말하지 않은 것
답을 정리하는 중에 그 용도로 만든 상위 분류가 원래 있지 않았냐는 반문이 들어왔다. 분류 트리에 성격이 달라 보이는 상위 항목이 하나 있긴 했지만 무슨 뜻인지 몰랐다.
매핑을 읽는 코드는 어느 분류든 똑같이 처리하므로 특정 트리가 특별하다는 표시가 코드에 없다. 의도는 코드가 아니라 트리를 그렇게 구성하고 매핑을 그렇게 채운 데이터 쪽에 있었다.
분포가 드러낸 전용 통로
그 트리 하위의 매핑이 어디로 가는지를 그룹으로 묶어 세어 봤다. 하위 쉰여덟 건이 전부 한 곳으로 가고 다른 곳으로 가는 것은 하나도 없었다.
이런 분포는 우연으로 생기지 않는다. 그 트리는 특정 분류로 내보내기 위해 만들어진 전용 통로였다.
살아 있는 구조인지 확인
옛날에 만들었다가 안 쓰는 것일 수도 있어서 실제 연결을 세어 봤다. 그 하위 분류에 이만 건이 넘는 상품이 걸려 있었고 지금도 그 용도로 돌고 있었다.
죽은 구조가 아니라 살아 있는 경로였고 내가 몰랐을 뿐이었다. 코드만 읽고 답했으면 있는 길을 없다고 답할 뻔했다.
답이 뒤집힌 지점
문의한 부류는 다른 상위 분류 아래 있어서 기본 경로로 나가고 있었다. 그 트리 하위로 옮기면 원하는 곳으로 가므로 코드 수정이 필요 없었다.
불가능하다는 답이 데이터만 옮기면 된다는 답으로 바뀌었다. 이후로 불가능하다고 결론 내기 전에 그 축의 데이터 분포를 한 번 보게 됐는데 한쪽으로 극단적으로 몰린 분포는 의도가 있다는 신호다.
길이 있다와 열려 있다는 다르다
옮기는 것이 답이라고 확정한 뒤에도 확인이 남아 있었다. 쉰여덟 건 중 대부분이 비활성 상태였고 살아 있는 매핑은 열몇 건뿐이었다.
옮기려는 대상의 세부 분류가 활성 매핑에 걸리는지를 따로 봐야 했다. 비활성 쪽으로 옮기면 길은 있지만 아무 데도 가지 않는다.
정리
- 코드만 읽으면 데이터 구조의 의도가 안 보인다
- 코드는 모든 데이터를 똑같이 처리하므로 특별함이 안 적힌다
- 불가능하다고 결론 내기 전에 데이터 분포를 본다
- 한쪽으로 극단적으로 몰린 분포는 의도가 있다는 신호다
- 죽은 구조인지 살아 있는지는 연결 건수로 확인한다
- 이미 있는 길을 찾으면 코드 수정이 필요 없다
- 반문 하나가 조사 방향을 바꾸므로 아는 쪽에 물어본다
- 길이 있다는 것과 지금 열려 있다는 것은 다르다