Debugging/2025.12.09/7 min read

이미지 업로드가 실패할 때 테스트 페이지부터 만든 이유

초기 Supabase Storage 업로드가 조용히 실패하던 문제를 업로드 테스트 페이지와 자세한 에러 응답으로 좁혀간 기록입니다.

SupabaseUploadDiagnostics

Code notes

코드에서 확인한 구현 포인트

배포 기준 2025.12.09

관련 파일

apps/web/app/api/upload/route.tsapps/web/app/upload-test/page.tsxSupabase Storage

구현 메모

앱 전체 흐름에서 업로드를 디버깅하기 어려워 웹 테스트 페이지를 먼저 만들었다.

content-type, file 유무, Supabase 설정 누락, Storage 업로드 에러를 구분해 응답하도록 했다.

업로드 성공 후 public URL과 미리보기를 확인해 Storage 연결 상태를 빠르게 검증했다.

앱 화면에서만 보면 원인이 흐려진다

초기 이미지 업로드는 모바일 흐름, API, Supabase Storage가 한 번에 얽혀 있었다. 앱에서 실패만 보이면 파일 선택 문제인지, multipart 파싱 문제인지, Storage 권한 문제인지 바로 알기 어려웠다.

그래서 먼저 웹에 업로드 테스트 페이지를 만들었다. 사용자가 실제 앱에서 하듯 파일을 고르고, API 응답 메시지와 public URL, 미리보기까지 한 화면에서 확인할 수 있게 했다.

서버 응답을 더 말하게 만들기

처음에는 업로드 실패를 단순히 Upload failed로만 돌려줬다. 하지만 그 메시지로는 다음 행동을 정하기 어렵다. 그래서 content-type, file 유무, Supabase 설정 누락, Storage 업로드 에러를 각각 다른 응답으로 나누었다.

API 내부에서도 Supabase upload error와 handler error를 구분해서 기록했다. 보안상 민감한 값은 노출하지 않되, 어떤 단계에서 실패했는지는 알 수 있게 만든 것이다.

이후에 얻은 효과

테스트 페이지는 나중에 배너, 이벤트, 프로필, 분석 사진 업로드를 만들 때도 기준점이 되었다. 업로드가 안 될 때 앱 전체를 의심하기보다, 먼저 API와 Storage 연결을 독립적으로 확인할 수 있었다.

디버깅용 화면은 제품 화면만큼 예쁘지 않아도 된다. 대신 실패 지점을 빨리 보여줘야 한다. 이때 만든 원칙은 이후 관리자 업로드 라우트에도 영향을 줬다.

Keep reading

다른 글 이어서 보기

전체 글 보기