Skip to content
isdnetworks
Go back

안 쓴다를 확인하는 두 축

한 채널의 재전송 대상 1만 1천여 건이 새 옵션 번호를 제대로 받게 하려 했다. 검토한 조치는 옛 옵션 코드 컬럼을 비운 뒤 신규 등록을 내는 것이었고 운영 데이터베이스를 건드리는 일이라 정말 필요한지 확인해야 했다.

Table of contents

Open Table of contents

좁은 검색의 0건

그 채널의 디렉터리를 검색하니 해당 함수 호출이 0건이었다. 여기서 그 채널은 안 쓰니 조치가 불필요하다고 결론을 낼 뻔했다.

멈춘 이유가 둘이었다. 그 채널 디렉터리에 없어도 공통 경로에서 값을 채워 내려보낼 수 있고 그러면 채널 코드에는 안 보인다.

가변 필드가 넓히는 범위

두 번째 이유가 필드 선언이었다. 그 필드가 불변이 아니라 가변으로 선언돼 있었다.

불변이면 생성 시점만 보면 되는데 가변이면 런타임에 누구든 덮어쓸 수 있으므로 모든 대입 지점을 봐야 한다. 선언 한 글자가 확인해야 할 범위를 결정했다.

두 축의 전수 확인

그래서 범위를 저장소 전체로 넓히고 두 축으로 확인했다. 첫째 축은 그 함수의 호출부 전수인데 다섯 곳이 나왔고 문제의 채널은 거기 없었다.

둘째 축은 그 필드의 대입 지점 전수였다. 문제의 채널에서 마켓 등록 응답의 값으로 그 필드를 채우는 코드가 나왔고 상류에서 주입받는 것이 아니었다. 호출부 전수는 그 값을 만드는 코드가 어디 있는지를 막고 대입 지점 전수는 그 필드에 무엇이 들어가는지를 막으므로 둘 다 봐야 이 경로에서 그 값이 안 읽힌다고 말할 수 있다.

근거가 달라진 같은 결론

결과적으로 1차 결론과 같아서 그 채널은 그것을 안 썼다. 그런데 근거가 달라졌다.

1차 근거는 그 채널 디렉터리에 없다는 것이고 최종 근거는 저장소 전체에서 호출부가 다섯 곳인데 그중에 없으며 그 필드가 등록 응답으로 채워진다는 것이다. 운영 데이터베이스를 안 건드리기로 결정하는 근거는 두 번째뿐이고 첫 번째로 결정했다가 실제로 쓰고 있었으면 1만 건이 잘못 등록됐을 것이다.

안 한다는 결론과 진단 순서

결론은 이 채널에서 그 컬럼을 비우는 것이 무의미하므로 그 목적의 운영 조작은 하지 않는다는 것이었다. 반대로 그 컬럼 관련 조치는 나머지 다섯 채널에서만 효과가 있다는 것도 함께 적었다.

진단 순서도 정했는데 이 채널이 그 계열인지를 먼저 가르고 계열이면 그 컬럼 조치가 유효하며 아니면 다른 원인을 찾는다. 이 분류를 먼저 하지 않으면 안 쓰는 채널에서 그 컬럼을 계속 뒤지게 된다.

앞선 다른 조사에서도 디렉터리 검색으로 결론을 냈다가 지적받은 적이 있어서 같은 실수를 반복한 셈이다. 그래서 채널 하위 디렉터리 검색만으로 안 쓴다를 단정하지 않고 두 축으로 확인한다는 규칙으로 못 박았다.

정리


Share this post on:

Previous Post
조용함과 깨짐 사이
Next Post
정리가 전송 성공에 매달려 있다