← 홈Setup Tip

Setup Tip

Setup Tip — 내 코드를 의심하기 전에 그 키가 상류에 없다는 것을 증명하기

의존하는 서비스에서 기대한 항목이 보이지 않으면, 파싱·필터·캐시를 고치기 전에 그 서비스의 원본 응답을 한 번 받아 키 목록을 세어라. 상류의 부재와 내 계층의 처리 오류는 서로 다른 수정이 필요하다.

문제

기대한 항목이 보이지 않을 때 가장 먼저 떠오르는 설명은 대개 내 쪽의 결함이다. 목록을 잘못 파싱했거나, 필터가 너무 공격적이거나, 캐시가 낡았다고 생각한다. 그 가정으로 바로 코드를 고치기 시작하면 문제가 반증 불가능해진다. 상류가 실제로 무엇을 돌려주는지 한 번도 보지 않았기 때문에, 고친 것이 원인을 건드렸는지 확인할 방법이 없다. 더 나쁜 경우에는 없는 항목을 채우기 위해 이름과 숫자를 추정해 카탈로그에 심게 되는데, 이것은 수정이 아니라 데이터를 발명하는 일이다.

운영 패턴

1. 의존 서비스의 원본 응답을 한 번 그대로 받아 두고, 받은 시각과 함께 저장한다. 요약된 화면 값이 아니라 응답 본문을 근거로 쓴다.

2. 그 응답이 실제로 담고 있는 키를 나열하고, 개수와 경계값을 기록한다. 예: 키 25개, 마지막으로 존재하는 단계는 여기까지. 이때 검색 범위를 좁힌 grep의 0건을 근거로 삼지 마라. 확장자 하나만 훑은 검색은 시스템과 무관한 이유로 0을 돌려준다.

3. 키가 응답에 있는데 내 쪽에서 보이지 않을 때만 파싱·필터·캐시를 의심한다. 그때는 재현 경로가 분명해진다.

4. 키가 상류에 아예 없다면 이슈의 범위를 다시 쓴다. 그 키와 무관하게 성립하는 결함만 남기고, 추정으로 만든 항목과 숫자는 명시적으로 범위에서 뺀다.

5. 진짜 키가 없어서 경로를 끝까지 실행할 수 없다면, 합성 픽스처로 덮고 “종단 검증은 상류가 키를 제공할 때까지 보류”라고 문장으로 남긴다.

왜 중요한가

상류의 부재와 내 계층의 처리 오류는 증상이 같아도 수정이 다르다. 부재를 내 결함으로 오해하면 멀쩡한 코드를 바꾸고, 없는 항목을 추정값으로 채우고, 원인이 사라지지 않은 채 이슈가 닫힌다. 반대로 원본 응답을 먼저 확보하면 두 가지를 동시에 얻는다. 하나는 지금 고칠 수 없는 것이 무엇인지에 대한 정직한 경계이고, 다른 하나는 그 키와 상관없이 독립적으로 성립하는 결함이다. 두 번째는 그대로 가치 있는 수정이 된다.

완료 기준

기록에 다섯 가지가 남아야 한다. 받은 원본 응답과 그 시각, 응답에 실제로 있던 키의 개수와 경계, 기대한 키의 존재 여부, 그 결과로 확정된 이슈 범위, 그리고 종단 검증이 보류라면 그 이유. 한 번도 관측하지 못한 키에 대해 수정을 완료했다고 적지 않는다.