문제 사항
사이드 프로젝트 배포 앱에서 프로필 업데이트를 하는데 실패를 하는 상황이 발생했다. 테스트 환경에서도 문제가 없었으며, Postman을 통해 요청을 보냈을 때도 정상적으로 처리가 되는 것을 확인했다. 그래서 ElasticBeanstalk을 통해 배포된 서버의 로그를 확인했고 아래와 같은 예외가 발생한다는 것을 알았다.
[error] 2580#2580: *19639 client intended to send too large body: 2537093 bytes
원인
로그를 확인한 결과 클라이언트에서 API를 요청할 때 보내는 데이터의 크기가 커서 생기는 문제라는 것을 알 수 있었다. Postman을 통해서 요청을 했을 때는 크기가 작은 사진을 보내다보니 확인할 수 없었던 문제였다.
해결하기
사진의 크기로 인해 생기는 문제를 해결하기 위해 Multipartfile에 대한 Servlet 환경 설정을 확인하기로 했다. 그런데 이미 크기가 50MB로 설정이 되어있는 것을 확인할 수 있었다. 또한 로컬에서 테스트 했을 때도 이 설정은 정상 동작하는 것을 확인할 수 있었다.
spring:
servlet:
multipart:
max-file-size: 50MB
max-request-size: 50MB
그렇다면, 다른 부분에서 요청 데이터의 크기를 제한하고 있는 것이었고 그 부분을 찾아보기로 했다.
우리가 배포하고 있는 환경 EalsticBeanstalk에는 Nginx를 사용을 하는데 Nginx에서도 요청 데이터의 크기를 설정할 수 있다는 것을 알게 되었다. 요청에 대한 크기 제한이 여기서 걸린다는 가설을 세우고 전송 데이터의 크기를 Servlet 설정과 동일하게 맞춰주기로 했다.
ElasticBeanstalk Nginx 설정 파일 위치
AWS ElasticBeanstalk 공식 문서를 확인해보니 Nginx 설정을 위해서는 아래와 같은 폴더에 파일을 넣어야 했다. 우리 프로젝트에도 이와 같은 폴더 설정 아래 Nginx에 요청 데이터의 크기 설정 파일을 넣어줬다.
`-- .platform
|-- nginx
|-- nginx.conf
`-- conf.d
`-- custom.conf
다른 것은 건드리지 않고 요청 데이터의 크기를 "client_max_body_size" 값을 통해 Servlet 요청 데이터 크기와 동일하게 설정해줬다.
client_max_body_size 50m;
결론
위와 같은 설정을 하고나니, 배포 앱에서 프로필 등록 및 수정 API 요청이 정상적으로 처리가 되는 것을 확인할 수 있었다. 이번 기회를 통해 내가 사용하고 있는 환경을 더 잘 알아야겠다는 생각을 하게 되었다. 내가 작성하는 코드에서만 문제가 발생하는 것이 아니라... 내가 사용하고 있는 환경에서도 문제가 발생할 수 있다. 항상 생각하고 열린 생각으로 접근을 하자.
참고한 AWS URL
Elastic Beanstalk Linux 플랫폼 확장 - AWS Elastic Beanstalk
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다. Elastic Beanstalk Linux 플랫폼 확장 AWS Elastic Beanstalk Linux 플랫폼은 애플리케이
docs.aws.amazon.com
'프로젝트' 카테고리의 다른 글
Java Spring에서 Kotlin' Data Class의 Json Parsing 문제 (1) | 2024.06.09 |
---|---|
Java에서 Mybatis Custom TypeHandler 생성해서 사용하기 (0) | 2024.06.02 |
IntelliJ Compound 기능으로 여러 프로젝트를 한 번에 실행시키기 (0) | 2024.05.12 |
기존 API 응답 형식 변경할 때 주의점 (0) | 2024.04.28 |
개발 장애 대응에 대한 절차 (0) | 2024.04.21 |