이슈명: 이미지 업로드 포함 Store 등록 시 multipart 파싱 오류
에러 유형: org.springframework.web.multipart.MultipartException
주요 로그:
런타임 오류 발생: Failed to parse multipart servlet request
Securing POST /stores/register
GlobalExceptionHandler#handleRuntimeException(RuntimeException)
원인 의심 초기 단계: 설정 누락 또는 multipart 처리 미지원
시도 항목 | 내용 | 결과 |
---|---|---|
Spring 설정 강화 | application.properties 에 multipart 관련 속성 최대한 명시 | ❌ 여전히 서블릿 단계에서 실패 |
MultipartResolver 명시 | StandardServletMultipartResolver 및 MultipartConfigElement Bean 등록 | ❌ 효과 없음 |
필터를 통한 파일 크기 선제 검사 | multipart 요청 유형 감지 후 직접 필터링 | ❌ 필터 도달 전 오류 발생 |
MultipartException 전용 핸들러 작성 | 사용자에게 의미 있는 에러 메시지 반환 | ✅ UX 개선, ❌ 근본 해결 아님 |
항목 | 결과 |
---|---|
MultipartDebugTest 작성 (SpringBootTest 기반 통합 테스트) | ✅ multipart 업로드 정상 작동 |
curl 로 서버 직접 테스트 | ✅ 정상 동작 확인 |
H2 DB 및 단일 테스트 환경 구성 | ✅ 모든 테스트 통과 |
📌 결론: 설정 및 코드 문제가 아니라 환경 또는 흐름에 기인한 문제
기존 등록 방식:
🔎 핵심 원인: "store 생성 전 이미지 업로드 시도"라는 흐름 상의 문제
@PostMapping("/stores/register")
public String registerStore(@ModelAttribute StoreForm form) {
storeService.registerStore(form, user);
return "redirect:/stores/setup-images";
}
@GetMapping("/stores/setup-images")
public String showUploadPage(...) {
return "store/setup-images"; // 이미지 전용 폼
}
항목 | 내용 |
---|---|
❌ 실패한 접근 | 설정 변경, multipartResolver 수동 등록, 필터 적용 |
✅ 작동한 해결 | 등록 프로세스 구조 재설계 |
🌟 핵심 통찰 | 문제의 본질은 multipart 설정이 아닌 엔티티 생명주기 순서 |