운영에서만 큰 파일 업로드가 504로 죽을 때 (또 JBoss였다)
파일 업로드 기능인데 매번 서버마다 반응이 다르다.
인코딩이 깨질때도 있고 그냥 커서 안올라갈때도 있고...이번의 문제의 파일은 12.5MB짜리 PDF였다.
증상
로컬에서도 되고 개발에서도 잘 되던 파일이, 운영에 올리니까 화면이 "처리 중..." 에서 멈춰버린다. 개발자도구 Network를 열어보니:
Method: POST
Content-Length: 13,130,051 byte (약 12.5MB)
결과: 504 Gateway Timeout
응답 Server: Apache
요청은 나갔는데 504가 떨어진다. 그런데 정작 WAS 로그엔 아무 오류도 안 남았다. (로그가 조용하면 더 무섭다)
함정 1. 파일 탓인 줄 알았다
처음엔 당연히 파일을 의심했다. 파일이 깨졌나, 파일명이 이상한가, PDF 내부 구조가 문제인가. 근데 다른 파일은 멀쩡히 올라가고, 오히려 페이지 수 더 많은 파일도 되는 경우가 있어서 더 헷갈렸다.
근데 같은 파일을 로컬에도 올렸고 개발에도 올렸는데 잘 올라간다.
하..파일문제가 아닌가. 파일만 붙잡고 있었으면 한참 헤맬 뻔했다.
함정 2. 콘솔의 SecurityError
Console엔 빨간 에러가 하나 떠 있었다.
Failed to read a named property 'document' from 'Window'
(cross-origin frame 접근 차단)
이거 원인인가 싶었는데, 잘 보니 순서가 반대였다. 업로드 요청이 504로 떨어지면서 엉뚱한 오류 페이지가 iframe에 담겼고, 그걸 후처리 스크립트가 읽으려다 난 2차 오류였다. 진짜 범인이 아니라 피해자였던 셈. (이런 게 사람 헷갈리게 한다)
진짜 원인 — 운영만 JBoss
여기서 결정적인 차이. 개발은 Tomcat인데 운영은 JBoss다. 응답 Server가 Apache로 같아서 잠깐 헷갈렸지만, 앞을 Apache가 받아도 뒤에서 도는 WAS가 다르면 얘기가 다르다.
찾아보니 JBoss는 내부적으로 Undertow라는 웹서버를 쓰는데, 이 Undertow가 POST 요청 크기에 기본 제한을 둔단다. 그리고 그 기본값이 대략 10MB 언저리라더라. 우리 파일은 12.5MB니까 딱 그 선을 넘긴 거였다. 실제로 운영 설정 파일을 열어보니 listener에 max-post-size 항목이 아예 없었다. (설정을 안 했으니 기본 제한이 그대로 걸린 것)
Tomcat은 이 제한이 넉넉하거나 다르게 잡혀서 개발에선 조용히 잘 넘어갔던 모양이다.
조치
설정 파일을 백업하고, listener에 max-post-size를 넉넉히(100MB) 박아준다. Apache가 뒤로 붙을 때 AJP로 붙는지 HTTP로 붙는지 확실하지 않아서, 그냥 관련 listener 세 군데에 다 넣었다.
<http-listener name="default"
socket-binding="http"
redirect-socket="https"
enable-http2="true"
max-post-size="104857600"/>
104857600 = 100MB. ajp-listener, https-listener에도 똑같이 넣어준다. 그리고 JBoss는 XML 고치면 재기동해야 반영된다. 재기동 후 같은 PDF로 다시 올려서 504가 사라졌는지, DB랑 실제 저장 경로에 파일이 들어갔는지까지 확인.
미래의 나에게
로컬/개발에서 되는 파일이 운영에서만 504로 죽으면, 파일 탓하기 전에 환경 차이부터 보자. 특히 운영이 JBoss면 max-post-size부터. (또 너냐 JBoss…
...진짜 지긋지긋하다.)
끝
(Tomcat에선 되는데 JBoss에선 안 되는 시리즈, 이걸로 벌써 몇 편째인지)
'IT 웹개발 > WEB WAS' 카테고리의 다른 글
| JBoss web.xml ${...} 프로퍼티 치환 안 됨 - spec-descriptor-property-replacement (0) | 2026.07.03 |
|---|---|
| 자바 XML 생성하다 만난 "Not supported: accessExternalDTD" 에러 (feat. JBoss) (0) | 2026.06.22 |
| 웹서버 취약점으로 Apache2.4.46 에서 2.4.58로 버전 업그레이드 (0) | 2023.10.31 |
| [Ubuntu] 리눅스 우분투에 Apache 2.4.46 수동 설치 방법 (0) | 2023.10.30 |
| Apache 아파치 웹서버 다운로드 링크 (최신버전, 이전버전 ) (0) | 2023.10.30 |