IT 웹개발/WEB WAS

JBoss 파일 업로드 504 Undertow max-post-size

붕어,짐 2026. 7. 8. 21:03
728x90

운영에서만 큰 파일 업로드가 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에선 안 되는 시리즈, 이걸로 벌써 몇 편째인지)

 

728x90
LIST