외주 SI 프로젝트에서 특정 화면들만 데이터를 못 불러왔습니다. 404였습니다. 그런데 앱 서버 로그에는 그 요청이 한 줄도 없었습니다.
처음 내린 진단이 틀렸습니다
진단하려고 요청을 가로채는 지점에 로그를 심었습니다. 들어오는 요청을 전부 찍는 곳입니다.
그 화면을 열었는데 아무것도 안 찍혔습니다.
그래서 이렇게 결론냈습니다. "요청 자체가 안 나가는구나. 화면 쪽 문제다."
이게 틀렸습니다.
요청을 가로채는 그 지점은 앱까지 도착한 요청에만 불립니다. 404는 애초에 그 앞에서 끝납니다. 로그가 없다는 건 요청이 안 왔다는 뜻이 아니라, 앱까지 못 왔다는 뜻이었습니다.
브라우저 개발자 도구를 열어 보니 요청은 제대로 나가고 있었습니다. 응답만 404였습니다.
진짜 원인
앞단 웹서버 설정에 이런 게 있었습니다.
ext = "html, css, js, png, json"
"이 확장자로 끝나는 요청은 정적 파일이니 내가 직접 처리하겠다"는 뜻입니다. 앱 서버로 넘기지 않습니다.
그런데 우리 API 주소가 이렇게 생겼습니다.
/order/list.json
/member/detail.json
/code/tree.json
웹서버는 이걸 파일로 봤습니다. 디스크에 그런 파일이 없으니 404. 앱은 요청이 왔다는 사실조차 모릅니다.
이런 주소가 9개 있었습니다. 나머지 화면은 멀쩡했으니 "일부만 안 된다"로 보였던 겁니다.
오류 페이지도 404였습니다
404가 나면 오류 안내 페이지로 보내도록 돼 있었습니다.
error_document = "/error.html"
그 파일도 없었습니다. 그래서 404 → 오류 페이지로 이동 → 그것도 404가 됐습니다. 화면에는 아무 설명 없는 기본 오류만 나왔습니다.
안내 문구 하나만 제대로 떴어도 "이건 웹서버가 낸 404구나"를 훨씬 빨리 알았을 겁니다.
고친 것
정적 확장자 목록에서 뺐습니다
ext = "html, css, js, png"
한 낱말 지우고 끝났습니다. 찾는 데 하루, 고치는 데 1분이었습니다.
같은 함정이 전에도 있었습니다
이게 처음이 아니었습니다. 이전에는 다른 확장자 하나가 같은 식으로 요청을 가로채고 있었습니다. 그때 목록에서 하나를 뺐는데, "이건 우리 주소에 없으니 무해하다"고 넘긴 게 남아 있었습니다.
그때 목록 전체를 한 번 훑었어야 했습니다. 걸린 항목만 고치고 나머지를 안 본 게 재발의 원인입니다.
가져갈 것
- 인터셉터에 안 찍힌다 = 요청이 안 왔다가 아닙니다. 앱까지 못 왔다는 뜻입니다.
- 404를 만났을 때 누가 낸 404인지부터 가르세요. 앱이 낸 것과 웹서버가 낸 것은 고치는 곳이 다릅니다.
- API 주소에 확장자를 붙이지 마세요. 앞단 서버가 파일로 오해합니다.
- 오류 안내 페이지가 실제로 뜨는지 확인하세요. 그게 안 뜨면 진단 시간이 몇 배가 됩니다.
- 같은 종류의 설정이 목록으로 돼 있으면, 걸린 항목만 고치지 말고 목록 전체를 보세요.
제일 값비쌌던 건 틀린 진단으로 반나절을 화면 쪽에서 보낸 것입니다. 로그가 없다는 사실에서 잘못된 결론을 내렸고, 그 뒤로는 계속 엉뚱한 데를 팠습니다.
증거가 없다는 건 증거가 아닙니다. 왜 없는지를 먼저 물었어야 했습니다.
만든 것들
'Coding, Testing, Challenge' 카테고리의 다른 글
| 열고, 아무것도 안 하고, 저장했더니 값이 바뀌었습니다 (0) | 2026.09.21 |
|---|---|
| 화면이 멈춘 게 아니라, 세 가지가 각각 달랐습니다 (0) | 2026.09.17 |
| 4초짜리 쿼리가 1,200초가 됐습니다 (0) | 2026.09.15 |
| 저장은 성공했다고 나오는데, 데이터가 없습니다 (0) | 2026.09.13 |
| 타임아웃을 30초로 걸었는데 410초를 모두 돌았다. (0) | 2026.09.11 |