로그인했는데 「로그인하세요」 — 범인은 개발 서버 캐시였다
고친 코드를 되돌렸는데 화면이 그대로였다. 그 순간 의심할 층이 바뀌었다.
로그인은 됐다. 그런데 화면 위에 「로그인하세요」 띠가 계속 떠 있다. 같이 있어야 할 선택 막대는 이름 칸이 비어 있다. 브라우저 콘솔에는 오류가 한 건도 없다.
방금 내가 그 화면을 새로 만든 직후였다. 그러니 내 코드를 의심하는 게 당연했다. 한 시간 가까이 이런 걸 했다.
- 로그인 처리 파일을 열어 읽었다
- 데이터베이스에 계정이 실제로 있는지 직접 조회했다
- 콘솔에서 오류를 찾았다 — 없었다
- 화면 안의 글자를 코드로 세어 봤는데 값이 자꾸 이상했다
마지막 것은 나중에 원인이 밝혀졌다. 화면 양옆 배경에 다른 페이지가 흐리게 깔려 있어서, 페이지 전체를 훑는 방식이 그 배경까지 같이 세고 있었다.
코드를 지웠는데 화면이 안 바뀌었다
「내 변경 때문인지 아닌지」만 가르려고, 방금 쓴 코드를 통째로 잠시 치웠다. 되돌렸으니 화면도 예전으로 돌아가야 한다.
그런데 화면이 그대로였다.
그 순간 답이 나왔다. 코드를 지웠는데 화면이 안 바뀐다는 건, 화면이 코드를 안 보고 있다는 뜻이다. 개발용 서버를 껐다 켰다. 로그인 띠도, 이름 칸도 한 번에 정상이 됐다.
질문 두 개의 순서를 거꾸로 잡았다
내가 붙잡고 있던 질문은 「내 코드 어디가 틀렸나」였다. 진짜 질문은 「지금 보고 있는 이 화면이 내 코드에서 나온 게 맞나」였다.
두 질문에는 순서가 있다. 아래 질문을 먼저 통과해야 위 질문이 뜻을 가진다. 그런데 나는 위에서부터 팠다. 이유는 단순하다 — 방금 내가 그 자리를 만졌기 때문이다. 가장 최근에 손댄 곳이 가장 유력한 용의자로 보이는 건 대개 맞지만, 항상 맞지는 않는다.
콘솔에 오류가 하나도 없었던 게 사실 큰 힌트였다. 화면이 잘못 그려지는데 아무도 불평하지 않으면, 그린 쪽은 원래 그렇게 그리기로 되어 있었다는 뜻이다. 낡은 결과를 성실하게 보여준 것이다. 그 힌트를 흘려보냈다.
바꾼 것
진단 순서 맨 앞에 한 줄을 붙였다.
고친 걸 되돌렸는데도 증상이 그대로면, 그건 내가 고친 자리의 문제가 아니다.
되돌리는 데 30초 걸린다. 이걸 먼저 했으면 40분을 아꼈다. 이 검사에는 좋은 성질이 하나 있다 — 어느 쪽으로 나와도 정보가 된다. 증상이 사라지면 내 코드가 범인이고, 안 사라지면 다른 층이 범인이다. 어느 쪽이든 다음에 어디를 볼지가 정해진다.
덤으로 하나 더. 화면을 코드로 재려면 「어디를 재는지」부터 좁혀야 한다. 페이지 전체를 훑는 방식은 눈에 안 보이는 배경까지 세서, 틀린 답을 확신에 차서 돌려줬다. 사람 눈으로 3초에 알 것을 기계에 물어서 잘못 들었다. 그날 정확했던 건 결국 화면을 그대로 찍은 사진이었다.