🚫 문제 발생
- 파일 사양: 2.15MB, PNG 확장자 (제한 조건: 5MB 이하, PNG/JPEG/PDF)
- 증상: 업로드 시 500 Internal Server Error 발생. 서버(컨트롤러/서비스) 로그에 아무런 기록이 남지 않음.
- 특이사항: 윈도우 파일 속성에 "다른 컴퓨터로부터 왔으며 차단되었을 수 있음" 문구 표시됨.
🔍 문제 원인
- 가설 1: 윈도우 보안 정책(Mark of the Web)으로 인한 파일 스트림 접근 거부.
- 가설 2: 파일 헤더(Metadata) 손상 또는 표준 규격 미달로 인해 프레임워크(Spring 등)의 멀티파트 파서에서 예외 발생.
- 가설 3: 인프라 설정(Nginx, Tomcat 등)의 기본 업로드 용량 제한 초과.
🎯 실제 원인
해당 파일은:
- 다운로드 과정에서 Mark of the Web가 붙은 상태
- 내부 헤더 또는 스트림 메타 정보가 표준 PNG 구조와 다르게 저장됨
Spring Multipart 파서가 파일 스트림을 읽는 과정에서 예외 발생
→ Global Exception Handler 이전 단계에서 500 발생
그림판으로 재저장 시:
- Zone.Identifier 제거
- 이미지 헤더 재작성
- 표준 PNG 포맷으로 재구성
→ 정상 업로드
✅ 해결
- 해당 이미지를 그림판으로 열어 다른 이름으로 저장(JPEG/PNG)하여 헤더를 재구성하고 보안 속성을 제거함.
- 재저장된 파일로 업로드 시 정상 작동 확인.
🧠 배운 점
- 파일 업로드 실패 시 프레임워크 전역 예외 처리(Global Exception Handler)를 통해 MaxUploadSizeExceededException이나 MultipartException 로그가 찍히는지 확인 설정 추가.
- 사용자에게 파일 보안 차단 해제 또는 재저장 가이드 제공 고려.
'Project > MetaSNS' 카테고리의 다른 글
| CORS 설정 (0) | 2026.03.03 |
|---|---|
| JWT Weak Key Exception 발생 (0) | 2026.03.03 |
| /login?error로 리다이렉트되는 현상 (0) | 2026.03.03 |
| Hibernate Dialect 오류 발생 (0) | 2026.03.03 |
| Dockerfile과 docker-compose.yml (0) | 2026.03.03 |
