Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

CS

[Cs] 파일 업로드에 대해 자세히 알아보자

by 꽁이꽁설꽁돌 2025. 2. 5.
728x90
반응형
     

목차

     

     

    전통적 이미지 업로드 방식

    • 제목, 내용, 이미지를 모두 선택한 다음 정보를 한번에 서버로 업로드한다.
    • 단순 텍스트는 크기가 작기 때문에 업로드 속도가 빠르지만 파일은 업로드가 오래 걸릴 수 있다.
    • 업로드 버튼을 누른 뒤에 제목, 내용, 이미지를 서버로 업로드하면 사용자는 프로그램이 느리다는
      인상을 받을 수 있다.
    • 특히나 한번에 여러개의 이미지를 업로드하는 기획이라면 업로드 버튼을 누른 후 업로드가 끝날 때까지
      사용자가 오랜 시간을 기다려야 할 수 있다.

     

     

     

    현대적 이미지 업로드 방식

    • 업로드 버튼을 누르는 순간 한번에 포스트를 업로드 하는게 아니라 이미지를 선택할 때마다 이미지는
      먼저 업로드를 진행한다.
    • 업로드된 이미지들은 '임시' 폴더에 잠시 저장해둔다.
    • 이미지 업로드를 한 후 응답받은 이미지의 경로만 저장 해둔 후 포스트를 업로드 할 때 이미지의 경로만
      추가 해준다.
    • POST/posts 엔드포인트에 이미지 경로를 함께 보낼 경우 해당 이미지를 임시 폴더에서 부터
      포스트 폴더로 이동시킨다.
    • PostEntity의 image 필드에 경로를 추가해준다.
    • S3 presigned url을 사용하면 많이 사용되는 방식이다.

     

      기존 방식 신규 방식
    체감 속도 이미지가 업로드되는 시간을 사용자가 처음부터 끝까지 기다리기 때문에 체감 시간이 길다.
    이미지를 선택하자마자 먼저 업로드를 진행하기 때문에 속도감이 좋다. 특히나 인스타 처럼 이미지를 먼저 선택하는 UI를 만든다면 글을 작성하는 동안 이미지 업로드를 진행할 수 있다.

    서버 과부하 사용자가 실제 포스팅 버튼을 눌렀을때만 요청이 보내지기 때문에 포스트 하나당 한번의 요청만 보내진다.
    이미지를 선택할때마다 업로드를 진행하기 때문에 더욱 많은 요청을 받게 된다. 특히나 이미지를 선택한 후 삭제해서 실제 포스트에 포함하지 않을 경우 서버 리소스만 낭비한다.

    엔드 포인트 관리 파일을 업로드 해야하는 엔드포인트가 생길때마다 파일 업로드 관련 multer 세팅을 계속 해주어야 한다.
    공통된 이미지 업로드 엔드포인트를 하나 만들어서 모든 이미지 업로드를 한번에 관리 할 수 있다.

    파일 관리 실제 포스팅 버튼을 눌렀을 때만 파일이 업로드 되기 때문에 잉여 파일이 생길 가능성이 적다.
    이미지를 선택하면 바로 업로드를 진행하기 때문에 선택한 이미지를 삭제하거나 변경하면 잉여 파일이 생긴다. 잉여 파일들은 주기적으로 삭제 해주어야 한다.

     

    S3 PreSigned Url이란?

    일반적으로 S3를 사용하는 웹 어플리케이션들은 아래와 같은 방식으로 파일을 업로드, 다운로드하였다.

    (multipart/form-data를 통한 파일 업로드 프로세스)

    이 때 1번 과정에서 용량이 큰 파일을 보내게 된다면 이는 성능에 악영향을 미친다. (서버의 자원을 많이 사용하기도 하고, HTTP에서 큰 파일을 여러 번의 작은 요청으로 분할하여 보내게 되어 성능이 좋지않다.) (자세히는 스프링, 이미지 처리하는 MutlifileResolver은 기본적으로 10240byte까지 메모리에, 그 이후부터 임시 파일에 저장한다. 이 때 메모리에 저장되는 10MB는 엄청 크다..)

     

     

    이러한 성능 문제를 해결하기 위해 S3에서 제공하는 방법이 PreSigned Url이다.

    PreSigned Url은 말 그대로 미리 서명한 Url이라는 뜻이다. S3의 소유자가 미리 특정 권한(파일 업로드, 파일 다운로드 등)에 대해 서명을 해준 뒤 사용자에게 해당 Url을 제공해준다. 사용자는 서명된 권한을 사용할 수 있다. 소유자가 여러 정보에 대해 미리 서명을 해두고, 사용자가 추후에 전달받아 사용한다는 점에서 수표와 비슷하다.

    PreSigned Url을 사용하게 된다면, 클라이언트가 서버에 거치지 않고 파일을 저장소에 직접 업로드할 수 있어, 서버의 자원을 절약할 수 있다.

     

     

    동작 과정은 아래와 같다.

    (PreSigned Url을 통한 파일 업로드 프로세스)

    위와 같이 동작하며, 6번 이후 동작과정은 기존과 동일하게, API의 요청에 여러 데이터와 함께 파일 저장 경로를 넘겨주면 된다.

     

    반응형

    'CS' 카테고리의 다른 글

    [NodeJs] os 관점에서 더 자세히 알아보자  (0) 2025.04.05
    Restful한 api는 무엇일까  (0) 2025.04.02
    NodeJs 에 대해 알아보자  (0) 2025.01.06
    웹 서버와 WAS의 차이를 살펴보자  (0) 2024.11.17
    소프트웨어 개발 방법론  (1) 2024.11.17