이미지 업로드 성능 비교 – Multipart vs Presigned URL GCS - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

📸 Multipart vs Presigned URL + GCS

이미지 업로드 성능 비교

📝 개요

기존 Spring Boot 기반의 Multipart 업로드 방식
Presigned URL + GCS 업로드 방식의 성능 차이를 k6 부하 테스트를 통해 비교하였습니다.


⚙️ 테스트 조건

항목
도구 k6
사용자 수 200 Virtual Users
테스트 시간 10분
공통 설정 sleep(1), 동일 stages 조건

📊 평균 응답 시간 비교

Metric Multipart 방식 Presigned + GCS 방식 개선율
http_req_blocked 821µs 546µs 33.5% 감소
http_req_connecting 814µs 373µs 54.2% 감소
http_req_duration 2000ms 381ms 81% 감소

📈 요청 처리량 비교

항목 Multipart 방식 Presigned + GCS 방식
총 요청 수 (http_reqs) 17,900 84,300
초당 요청 수 (req/s) 29.56 req/s 139.82 req/s

💡 같은 테스트 조건에서도 약 7배 더 많은 요청을 처리하였으며,
이는 Presigned 방식에서의 응답 시간이 짧아졌기 때문입니다.


📷 결과 그래프

📌 Multipart 방식 결과 Presigned URL + GCS 방식 결과

image image image image


📌 Metric 설명

Metric 의미
http_req_blocked 요청이 큐에 대기한 시간
http_req_connecting TCP 커넥션 생성에 걸린 시간
http_req_duration 전체 요청-응답에 소요된 시간 (사용자 체감 성능)
http_reqs 총 요청 횟수 (처리량 지표)

✅ 결론 및 인사이트

  • Presigned URL 방식은 서버를 파일 데이터 중계에서 완전히 분리시켜줍니다.
  • GCS로 직접 업로드하므로 서버의 부하가 줄어들고, 확장성이 극대화됩니다.
  • 성능 테스트 결과:
    • 응답 시간 81% 감소
    • 요청 처리량 7배 증가
  • 서버 스케일링 없이도 높은 동시 업로드 처리 가능하며, 서버 자원을 더 중요한 비즈니스 로직에 집중할 수 있습니다.