Post

이미지 업로드

HTTP 멀티파트 요청 처리

image

파일 업로드를 구현할 때, 사용자는 웹폼을 통해 파일을 선택하고 서버에 전송합니다.

이때, 웹 브라우저는 HTTP 메시지를 생성하며, 이 메시지의 Content-Type 속성은 multipart/form-data로 설정됩니다

서버는 이를 처리하기 위해 멀티파트 메시지를 받아 각 파트로 분리하여 처리합니다.

Content-Type

image

HTTP(request와 response)는 위 이미지와 같이 4개의 파트로 나눌 수 있습니다.

여기서 Message Body에 들어가는 데이터 타입을 HTTP Header에 명시해줄 수 있습니다. 이 때 명시할 수 있도록 해주는 필드가 바로 Content-type입니다.

multipart/form-data

웹 폼에서 파일 업로드와 같이 여러 종류의 데이터를 동시에 전송할 때 사용되는 데이터 전송 형식 중 하나입니다.

일반적으로 HTTP 프로토콜을 통해 데이터를 전송할 때, 웹 브라우저에서 폼을 통해 업로드한 파일과 텍스트 데이터를 함께 전송해야 하는 경우에 이 형식이 사용됩니다.

멀티파트 형식은 여러 파트로 이루어져 있으며, 각 파트는 하나의 데이터 조각을 나타냅니다.

각 부속 문서는 boundary로 구분되어 있어 서버가 각 파트를 식별할 수 있습니다. 서버 측에서는 멀티파트 파싱을 수행하여 각 데이터 파트를 추출하고 처리합니다.

이미지 업로드 구현

ReviewImage 엔티티

image

리뷰 컨트롤러

-> 이미지 업로드

image

Review Service

image -> 리뷰에 맞는 여러 이미지를 업로드하고 저장

Image Service

image -> 파일 이름을 생성하고 이미지가 저장될 경로를 저장되며 해당 이미지가 리뷰와 연결

image -> MultipartFile을 File로 변환하고 S3에 저장, 변환하면서 생성된 임시파일을 삭제

FileManager

image ->MultipartFile을 로컬에 저장 (파일로 변환하기 위해서)

멀티파트로 업로드 VS 파일로 변환해서 업로드

멀티파트 업로드:

용도 : 대용량 파일을 효율적으로 업로드하기 위한 방법

동작 : 큰 파일을 여러 부분으로 나누어 병렬로 업로드하고, 각 부분을 나중에 조합하여 하나의 객체로 완성

장점 : 대용량 파일 업로드가 가능하며, 네트워크 문제나 업로드 중 실패해도 특정 부분만 다시 업로드 가능 빠른 업로드 속도와 효율적인 자원 사용.

단점:일반적으로 작은 파일에 대해선 오히려 추가 오버헤드가 발생할 수 있음

파일로 변환해서 업로드:

용도 : 주로 작은 파일 또는 완전한 파일이 이미 로컬에 있는 경우 사용

동작: MultipartFile 등의 파일 객체를 File 객체로 변환한 후, 해당 파일을 S3에 업로드

장점 : 작은 파일에 대해 간편하게 업로드 가능. 업로드 전에 파일의 내용을 수정하거나 가공할 수 있음

단점 : 대용량 파일의 경우 전체를 메모리에 로드해야 하므로 메모리 사용량이 높을 수 있음 업로드가 실패하면 처음부터 다시 전체를 업로드해야 함

ImageInfo

image -> 이미지에 대한 정보를 담음

UploadImageS3

image -> Amazon S3에 파일을 업로드

ImageSort

image

-> 파일 경로 정보를 담음

이미지 업로드 테스트

image image image

이미지 업로드 성공!!

This post is licensed under CC BY 4.0 by the author.