갱스터하우스

[Nginx] 413 Request Entity Too Large 오류 해결 - 왜 갑자기 S3에 이미지가 안 올라 갈까? 본문

Project/Network

[Nginx] 413 Request Entity Too Large 오류 해결 - 왜 갑자기 S3에 이미지가 안 올라 갈까?

승갱 2024. 7. 6. 19:24

1. 413 Request Entity Too Large 오류 원인

2. 413 Request Entity Too Large 오류 해결

3. (부록1) 나의 트러블 슈팅기

4. (부록2) 배운 점

 

 

 

1. 413 Request Entity Too Large 오류 원인

nginx에서 client max body size를 별도로 설정해주지 않는다면

기본값이 1MB로 설정되기 때문에, 업로드하려는 이미지의 1M보다 크다면

413 Request Entity Too Large 오류가 발생한다.

 

공식문서에도 아주 잘 나와있다

 

 

2. 413 Request Entity Too Large 오류 해결

nginx 설정 파일에 다음과 같은 코드를 추가한다.

-> 이걸 따로 설정하지 않는다면, default로 요청 사이즈의 크기가 1MB로 설정된다.

client_max_body_size 10M;

 

 

 

 

 

3. (부록) 나의 트러블 슈팅기

트러블 슈팅이라 쓰고 삽질기라 말한다.

SSAFY의 자율 프로젝트의 서버를 다시 살리고 어느 날, 루시로부터 연락을 받았다.

 바로 이미지 첨부가 안 된다는 것이었다

 

당시 가장 의심 갔던 건 '버킷의 용량이 다 찼나?'였다.

하지만, 당일 집에 돌아가서 확인해보니 용량 문제는 아니었고,

뭐가 문제일까 고민하다 이미지 업로드 문제는 어느 순간 잊혀졌다..ㅎ

 

 

 

그러다, SSAFY 수료식 전 날!

마지막으로 가는 캠퍼스에서 쓰롱(Throwng)을 꼭 해야겠다는 생각이 번쩍 들면서

'그럼 이미지 업로드 문제 해결해야 하는데?'라는 생각이 들었다.

자율플젝 컨님의 트러블 슈팅 컨텐츠를 떠올리면서

Notion에 발생할 수 있는 원인을 다 생각해 적어봤다.

 

 

 

 

 

 

🚨왜 갑자기 S3에 이미지가 안 올라 갈까?

1. 버킷 용량의 문제일까?

콘솔에서 확인해보니 버킷의 크기는 329.0MB로 5GB도 안 넘었다.

-> 탈락

 

 

2. config의 문제일까?

공통,특화 플젝에서는 yml을 서브모듈로 관리하니 너무 불편했었다.

그래서 자율 플젝에서는 편리한 관리를 위해 config-server를 구축해서 사용하고 있었다.

혹시나 config 문제일까 생각해봤는데,

만약 config 문제였다면 우리 서비스 자체에 이상이 발생해야하지만

그러기에는 이미지 업로드를 제외하고는 너무나도 잘 돌아갔다!

-> 탈락

 

 

3. accesskey의 문제일까?

다시 S3로 돌아와서,

'혹시 Access Key에 문제가 생겨서 그런걸까?'라는 생각으로 열심히 찾아본 결과

어느 블로그에서 Access Key의 유효기간이 90일 이라는 포스팅을 발견했다!

혹시 유효기간이 다 지났나?라는 생각으로 우리 key 정보를 확인해봤지만

...

-> 탈락

 

 

4. log는 확인 해봤니?⭐⭐⭐⭐⭐

개인 노트북의 용량이슈로 그동안 싸트북에서만 로그를 확인해서

빠르게 용량 정리하고 설치해 확인해봤지만 이상 없이 너무나 잘 돌아갔다.

이미지를 업로드해서 쓰롱한 로그를 보면 이미지가 null이라는게 너무나 잘 보여

정말 뭘 까.. 싶었다.

 

 

 

그렇게 여러 경우의 수를 생각해봤지만, 모두 다 탈락이었다.

새벽까지 다른 팀원과 해결하기 위해 열심히 이것저것 해보던 중,

'이미지 업로드 되는데?' 라는 말이 나왔다!

드디어ㅠㅠ 하는 마음으로 이미지를 업로드 해봤지만, 나는 또 안 되는 이슈 발생...ㅋ

뭔가 이상해서 보니 크기가 작은 이미지는 업로드가 되고, 크기가 큰 이미지는 업로드가 안 됐다.

 

이건 무슨 경우야 하는 마음으로

혹시 프론트 문제인가 싶어 프론트 코드도 뜯어봤지만,

만약 단순하게 이미지가 크기때문에 업로드가 안됐더라면, 토스트 메시지가 출력됐어야 했다.

(우리 서비스에서는 업로드하는 이미지의 크기가 제한 되어있기 때문!)

 

 

 

다시 한 번, 업로드 되는 이미지와 안 되는 이미지를 비교해봤더니 공통점을 발견할 수 있었다.

1MB 이하의 이미지는 업로드가 되지만,

1MB < 이미지_크기 < 설정 MB 이라면 업로드가 안되는 거였다!

그러니 토스트 메시지는 출력이 안 될 수 밖에 없었다!

 

 

새벽 늦게까지 회의를 해도 답은 안나오고,

내일 수료식, 아니 오늘 수료식은 가야하고

결국 '그럼 1MB 이하의 이미지는 업로드 될 수 있는거네..!'라는 찜찜한 답으로

우리의 새벽 트러블 슈팅은 끝이 났다...

 

 

 

 

 

 

하지만, 다음날 아침!

아무리 생각해도 오늘은 수료식,

1년동안 열심히 다닌 캠퍼스를 마지막으로 가는 날이니

이미지를 첨부해서 꼭!!!!! 쓰롱을 하고 싶었다.

그리고 이번에는 프론트 팀장님과 게더(a.k.a 우리팀의 제2의 SSAFY)에서

다시 원인을 찾아봤다.

 

현재 상황과 어제 시도해본 방법을 간략하게 브리핑하고

다시 뭐가 문제일까 얘기하다

 

 

프팀장님 : 그런데 프론트 로그는 확인해봤어?

나 : 새벽에 보니까 Too Large 나오던데?

프팀장님 : 그거 Nginx 오류라는데?, 크기같은 거 설정 안하면 뜬다는데?

나 : 우리 서버 살릴 때 설정했을걸?

....

잠시만

 

이렇게 답을 찾게 됐다...ㅎ

 

 

사실 새벽에 프론트 로그 확인하면서 봤었는데, 그때는

'Request Entity Too Large, 이미지가 너무 크다는데?' 라며

직독직해를 하고 있었다^^

서버 살릴 때, nginx는 내 담당이 아니어서 확인하지 못했었는데

다시 확인해보니 nginx에 따로 설정이 되어 있지 않았다!.

 

 

 

nginx 설정을 맡았던 팀원에게 빠르게 상황 공유하고,
다행히 캠퍼스에서 마지막으로 쓰롱도 할 수 있었다!!!

(일어나자마자 카톡을 확인한 죄로,

15분이 아니라 1시간 가까이 같이 고민해준 우리의 프론트 팀장님, 정배우, 태윤정 정말 고맙습니다😂)

size 설정 완료!

 

 

 

 

 

4. (부록2) 배운 점

이번 나의 삽질기로 깨달은 점이 있다.

 

1. 직독직해 로그 확인 NO! 로그 확인을 꼼꼼히 잘하자!

-> 백에서는 개발할 때 오류가 나면 그렇게 열심히 찾아봤는데, 프론트에서는 로그를 확인해 놓고도 넘어갔다.
(이미지가 너무 크다는데? 라며 넘어가는 사람이 어딨나...ㅎ)

앞으로는 '이미지가 너무 크다는데?'라는 직독직해^^ 로그 확인이 아니라,

해당 오류가 왜 발생했는지까지 체크하는 습관을 들여야겠다고 정말 몸소 깨달았다.

 

 

2. 기본적인 setting은 할 줄 알자!

-> nginx 오류라는 걸 확인했을 때, 여태까지 nginx는 나에게 '웹서버'라는 단어로 끝났었다.(이론빼고 아무것도 모른다는 말)

그리고 자율 플젝에서도,다시 서버를 살릴 때도 nginx 세팅은 기존에 담당한 팀원이 했었기 때문에

오류의 원인과 해결방법을 찾았음에도

혹시나 내가 설정하다 다른 문제가 발생할까봐 해결할 수 없어 정말 많이 답답했다.

분업이 철저해서 다른 사람 영역에서 이슈를 발견해도 처리는 담당자가 해결해야 된다는 규칙이 있다면 모를까(약간 회사가 이런가..?),

이번처럼 간단한 조치 정도는 발견한 사람이 할 수 있을 것 같았는데,

그놈의 '혹시' 때문에 하지 못했다..ㅠ

내 부분이 아니더라도, 구동방식과 기본적인 setting 정도는 알고 있어야 그리고 할 줄 알아야겠다고 정말 절실하게 느꼈다.

 

 

3. 의미 없는 기록은 없다!

-> 2학기 자기소개와 공통 플젝때부터 내가 열심히 밀었던, '의미 없는 기록은 없다!'의 진가가 발휘되었다.

자율 프로젝트 5주차쯤 개발 서버를 다시 셋팅 하게 되는 일이 발생해서,

모든 설치 및 설정 파일과 명령어를 팀 노션에 정리했던 일이 있었다.

이번에 nginx 설정이 문제임을 알고 한 번 더 확인하는 마음으로

팀 노션의 nignx 설정 기록을 보며 원인을 땅땅땅 확정 지을 수 있었다..

 

 

 

 

정말 사소하고 단순한 하나의 오류였지만,

이번 문제-해결을 통해서 부족했던 여러부분들을 채울 수 있었다.

뿌-듯!

 

 

싸피 마지막날 꼭 하고 싶었던 Throwng!!

'과연 어떤 서비스이길래 그렇게 하고 싶어했을까?'

궁금하지 않으시나요?

그렇다면 같이 Throwng을 즐기러 가보아요~~

https://throwng.store/