가끔 문제 해결을 위해 고객사를 방문한다. 작업 시간은 길지 않다. 원인 파악에 오래 걸리지 않는다. 사용자가 설정을 잘못했거나 제품 버그다. 그런데 오늘은 오래 걸렸다.
일을 일찍 끝내고 점심 먹고 영화나 볼까 하는 계획이 어긋났다. 문제는 있는데 웹 브라우저와 서버에서 흔적을 찾지 못했다. 원인은 내 손 밖에 있는 방화벽이었다. 웹 브라우저와 서버 사이에서 방화벽이 동작하고 있었다.
방화벽은 다음과 같은 작업을 했다.
ttf
확장자를 가진 글꼴 파일이 올라가는 것을 막았다.gz
확장자를 가진 압축 파일이 올라가는 것을 막았다.폼 값에
../data
와 상대 경로가 있다면 이를 막았다.
방화벽이 막기는 했는데 200을 응답했기 때문에 웹 브라우저에서 이를 쉽게 알지 못했다. 방화벽이 알림 메시지를 보내주지만, AJAX
로 개발한 부분이 예외 상황을 조사하지 않아 놓친 개발 부주의라고 하는 쪽이 더 맞다.
일찍부터 방화벽을 의심했지만, 고객에게 우리 제품이 아닌 다른 곳에 문제가 있는 것 같다고 말하기는 어렵다. 제품 완성도가 그 정도는 아니다. 엄격한 보안으로 방화벽을 거치지 않고 서버에 접근할 수도 없었다. 다행히 고객이 방화벽 담당자와 협의를 해서 원인을 찾을 수 있었다.
파일 업로드 진행 바가 나타나지 않는다. UUID를 만들어 서버에 파일을 올리고, 다시 그 UUID로 어느 정도 올라갔는지를 검색해서 진행률을 보여준다. 그런데 방화벽이 전체 파일이 올라 올 때까지 가지고 있다가 서버에 전달하기 때문에 계속 0%로 있다고 순간적으로 100%가 된다. 불편하지만 해결할 방법이 없다.