파일이 안 올라가는데 「404」가 뜰 때 — 서버가 몰래 자르고 있습니다
2026. 09. 04
사진 여러 장을 한 번에 올리려는데 화면에 「보내지 못했어요」만 떴습니다. 서버가 돌려준 답을 열어 보니 404 였습니다.
주소는 분명히 맞았습니다. 같은 주소로 작은 자료는 잘 올라갔으니까요.
404가 말이 안 되는 까닭
404는 「그런 주소가 없다」는 뜻입니다. 그런데 같은 주소로 사진 한 장만 보내면 멀쩡히 올라갔습니다.
주소가 아니라 크기가 문제라는 뜻이었습니다.
프로그램에는 아무것도 안 찍혔다
자료를 받는 프로그램 안에 로그를 심어 두고 다시 보내 봤습니다.
아무것도 안 찍혔습니다.
요청이 프로그램까지 아예 도달하지 못한 것입니다. 앞단의 웹서버가 먼저 잘라내고 자기 오류 페이지를 돌려주고 있었습니다.
벽을 재보니
보내는 크기를 조금씩 늘려 가며 어디서 갈리는지 재봤습니다.
| 보낸 크기 | 답 |
|---|---|
| 129,331 바이트 | 200 (성공) |
| 133,275 바이트 | 404 |
131,072바이트 — 128KB가 벽이었습니다.
자료를 받는 쪽 프로그램은 400,000자까지 받도록 되어 있었습니다. 서버 코드는 죄가 없었습니다.
왜 알아채기 어려운가
두 가지가 겹칩니다.
첫째, 화면에는 「보내지 못했어요」로만 보입니다. 서버가 돌려준 것이 JSON이 아니라 HTML이라, 답을 읽는 쪽에서 먼저 깨지기 때문입니다. 진짜 오류는 그 뒤에 숨습니다.
둘째, 404라는 숫자가 사람을 엉뚱한 데로 보냅니다. 주소를 다시 보고, 오타를 찾고, 파일이 있는지 확인하게 됩니다. 전부 헛수고입니다.
어떻게 넘겼나
길은 두 가지입니다.
- 줄이기 — 한 번에 보내는 자료를 한도 안으로 낮춘다
- 쪼개기 — 여러 번에 나눠 보낸다
줄이는 쪽을 골랐습니다. 한 번에 110,000자 안으로 맞추고, 그래도 크면 그림을 한 번 더 작게 줄이도록 했습니다. 128KB에 딱 붙이지 않은 것은 여유를 두기 위해서입니다.
그리고 **404가 오면 「보내는 자료가 너무 커서 서버가 막았어요」**라고 화면에 그대로 적어 주게 고쳤습니다. 다음에 또 만나도 헤매지 않도록.
다음에 같은 일을 만나면
- 답이 JSON인지 HTML인지 먼저 봅니다. HTML이면 프로그램까지 안 간 것입니다
- 작은 것으로 한 번 보내 봅니다. 그건 되면 크기 문제입니다
- 크기를 바꿔 가며 어디서 갈리는지 잽니다. 벽은 대개 딱 떨어지는 숫자입니다
- 프로그램에 로그를 심었는데 아무것도 안 찍히면, 그건 프로그램 잘못이 아닙니다
같은 서버를 쓰는 다른 기능에도 같은 벽이 있습니다. 큰 자료를 보내는 것을 새로 만들 때는 처음부터 쪼개 두는 편이 낫습니다.