- 무엇을 했나?
-> 파일 업로드 기능 중 용량 제한 체크(10mb)를 하여 해당 용량 초과시 파일 업로드 불가 메시지를 보여줘야 하는 요건이 있었다. 물론 기존에도 용량 초과시 에러메시지로 업로드 불가 상황을 보여주고는 있었으나, 케이스 별로 구분되지 않고, 단순히 오류라고만 메시지가 출력되고 있었기에 케이스 별로 나눠줄 필요가 있었다.
이를 위해 클라이언트 및 서버단 둘다 유효성 검사를 걸어줘야 했다.
- 무엇이 어려웠나?
-> 기존에 걸려있는 유효성 검사 로직이 있어서 해당 부분을 응용하면 금방 처리할 수 있을거라 생각했으나, 막상 생각만큼 쉽지는 않았다. 클라이언트 부분은 input file을 받아와서 용량 체크하여 처리하였지만, 문제는 서버쪽이었다.
서버쪽에서도 용량 체크를 하는 로직은 생성되어 있었으나, 10메가 넘는 파일의 경우 디버깅을 해보니 아예 컨트롤러 내에 들어오지도 않았다.
혹시나 개발서버에 올려 톰캣의 다른 로그라도 찍히려나 싶어서 테스트 해보았으나 되지 않았다.
그런데 신기하게도 로컬에서는 10메가가 넘어도 컨트롤러 내에 잘 들어오고 용량 체크도 잘 되었다.
이 때문에 처음에는 톰캣의 설정이 개발서버와 내 로컬이 다른거라 생각하고 설정파일들만 이것저것 비교해보는 불필요한 시간을 보냈다.
그러다가 결국 든 생각은 아예 톰캣 was 서버쪽으로 접근하지 못한건 아닐까 하는 생각이 들었다. 로컬에서는 바로 톰캣만 구동하여 테스트 한 것이지만, 개발서버 등은 상위에 웹서버에서 각 was로 분기처리 되도록 구성되어 있으므로 애초에 웹서버에서 was 서버인 톰캣으로 분기를 타지도 못했다면? 그리고 그 이유는 용량이 커서?
여기까지 스스로 결론내리고 관련 내용을 찾아보니,
=======================================
파일을 업로드 하게 되면 해당 내용을 우선 메모리에 담게 되고 다 담은 후 메모리에 있는 내용을 was에 전달한 뒤 HttpServletRequest 로 넘어오게 된다.(Apache > Tomcat) 그런데 파일을 업로드 하면서 메모리에 파일이 써지다가 메모리 부족으로 OOM이 발생하게 되버린 것
(출처 : https://taetaetae.github.io/2019/07/21/spring-file-upload/ 에서 인용)
=======================================
이런 내용이 있었다. 물론 나는 찾다찾다 추측으로 생각한 내용이었으나, 이 분은 아파치 로그를 보고 확인을 하셨다고 쓰여 있어서 나도 로그를 봐야겠다는 생각을 했다. 하지만, 개발서버조차 웹서버 설정 등은 일개 개발자가 볼 수 있는 권한은 없었기에..ㅠㅠ
결국 선임자이신 과장님께 문의를 하여 보니 약 11mb~12mb 로 아파치 업로드 용량 제한이 되어 있을거라고 하셨다.
일단 원인은 알게되었지만, 클라이언트 단에서 보낸 업로드 요청이 톰캣까지 가질 않아서 용량 초과에 대한 별도 로직 처리가 불가능한 상황이었다. 그래서 다른 방법을 찾다가 해당내용이 특정 코드값으로 상태 코드를 리턴해준다는 것을 알고 해당 코드일 경우 용량 초과인 것으로 처리하기로 하였다. (정책상 이런식으로 하기로 하고 처리하긴 했지만, 아파치 설정 혹은 다른 방법을 통해 용량 초과에 대한 상태값을 확인 혹은 처리할 수 있는 내용이 있는지 더 찾아봐야 할 것 같다.)
- 다음엔 어떻게 할 것인가?
-> 처음부터 '모든 문제는 톰캣과 서버상에서 처리가 가능하다' 라는 생각이 선입견처럼 박혀 있어서 웹서버 설정에 용량 제한이 별도로 존재하고 있을 줄은 생각하지 못했다. 편협한 생각이 아닌 넓은 시각으로 문제를 봐야 할 것 같다.
더불어 이번 트러블 슈팅을 해결하면서, 완벽히 해결한 느낌이 아니어서 찝찝하고 톰캣 및 아파치 설정에 대해 공부가 더 필요함을 느꼈다. 공부를 더 해야겠다..
'개발일기' 카테고리의 다른 글
[H2 DB] JDBC URL 초기화 하기(or 다른 URL로 변경하기) (0) | 2021.09.13 |
---|---|
2020.01.02 하루 공부 일기 (0) | 2020.01.02 |
2019.12.16 하루 공부 일기 (0) | 2019.12.16 |
화면단에서 리다이렉트 하기(javascript redirect) (0) | 2019.09.08 |
개발일기 시작 (0) | 2019.09.03 |