presigned url 이미지 업로드

DeadWhale·2024년 5월 21일
0
post-thumbnail

어플리케이션에서 이미지를 업로드하는 방식은 매우 많습니다.

주로 사용하는 방식은 이런 방식입니다.

  • 여기서 이미지 제공기 CDN 서비스를 사용해 이미지를 서빙할 수도 있습니다.

서버에서 멀티파트를 받아 처리하는건 아래와 같은 목적이 있습니다.

  • 이름을 정책에 맞게 수정
  • 자료 타입을 적절하게 수정
  • 이미지 사이즈 조절 등 옵티마이징 처리
  • 보안 검증 수행

이러한 내용은 처리해야하는 내용이긴하지 굳이 서버에서 처리될 필요성은 없습니다.

저는 개인적으로 서버를 통해 이미지 처리하는걸 좋아하지 않습니다.

몇가지 이유로는

  • 서버 리소스 사용 증가:
    - 이미지와 같은 대용량 멀티파트 데이터를 서버에서 처리할 경우, 메모리 사용량과 CPU 부하가 증가합니다.
    이는 서버의 전체 성능에 영향을 미치며, 동시에 많은 사용자가 데이터를 업로드할 경우 서버의 응답 시간이 저하될 수 있습니다.
  • 테스트의 복잡성:
    - 멀티파트 데이터 처리 로직을 포함하는 서버의 기능을 테스트하는 것은 시간이 많이 소요되며 복잡할 수 있습니다.
    - 이미지 처리와 같은 작업은 다양한 파일 형식과 크기, 이미지 손상 등 다양한 시나리오를 고려해야 하므로 테스트 과정이 복잡해집니다.
  • 보안 취약점 증가:
    - 사용자로부터 받은 파일을 서버에서 직접 처리할 경우, 악의적으로 조작된 파일로 인해 보안 취약점이 발생할 수 있습니다.
    - 예를 들러 JPEG이미지 처리시 버퍼 오버플로우 , 메타 정보 공격등

물론 단순 서버 멀티파트 방식으로 구현하는것도 충분히 좋지만 저는 이 방식보다 Presigned URL을 사용하는것을 좋아합니다.


Presigned URL

기존 방식은

백엔드 서버를 거쳐 업로드하는 과정을 제공하게 됩니다
하지만 인증방식의 업로드 URL을 제공 받는 방식으로 구현됩니다.

이 과정이 복잡해 보일 수 있지만 핵심 몇가지만 기억하면 됩니다.

  • 백엔드 서버는 요청을 받으면 S3에서 인증된 URL을 제공받는다. 그 후 그대로 프론트로 전달해준다.
  • 프론트 서버는 요청 후 반환받은 인증된 URL로 이미지 업로드 요청을 처리한다.

이미지 업로드는 많은 웹 어플리케이션에서 중요한 기능입니다.

전통적인 서버 기반 멀티파트 방식은 유용하지만, 서버 리소스 사용 증가, 테스트 복잡성, 보안 취약점 등의 단점을 가지고 있습니다.
이에 반해, Presigned URL을 사용하는 방식은 이러한 문제들을 효과적으로 해결하면서도
사용자에게 빠르고 안전한 이미지 업로드 경험을 제공합니다.
따라서, 서버 부하를 줄이고 보안을 강화하면서도 효율적인 이미지 관리를 원한다면 Presigned URL 방식의 도입을 고려해볼 것을 권장합니다.
이러한 접근 방식은 현대적인 클라우드 서비스를 최대한 활용하며, 개발자와 사용자 모두에게 이점을 제공합니다.

0개의 댓글