SWM-99-degree / jariBean

SWM 14th JariBean Project
0 stars 1 forks source link

[REFACTOR] S3 Image 업로드 방식 수정 #119

Closed isayaksh closed 1 year ago

isayaksh commented 1 year ago

✏️ Description

기존에 구현항 방식은 pre-signed url을 통해 프론트에서 S3 버킷에 직접 이미지를 업로드하는 방식이었다. 이미지를 서버를 거치지 않고 프론트에서 직접 S3 버킷으로 저장하는 방법은 네트워크 낭비를 줄일 수 있었다.

🔥 Problem

그러나 프론트에서 직접 S3에 이미지를 업로드하게 되면 다음과 같은 문제가 발생할 수 있다.

🛠 Solution

위 문제를 방지하기 위해서는 클라이언트에서 S3에 직접 접근하는 것이 아닌 서버를 통해 이미지를 업로드하는 방법으로 수정해야 한다.

  1. 클라이언트에서 서버로 이미지 업로드
  2. 클라이언트에서 전송한 이미지 형식과 크기를 확인한 후 규격에 맞으면 이미지를 S3에 저장한다.
  3. 만약 클라이언트가 전송한 이미지가 규격에 맞지 않으면 예외처리를 수행한다.
isayaksh commented 1 year ago

🔥 New Problem

1. 저장할 파일 이름의 형식

Amazon S3는 파일 이름의 형식에 제한을 두지 않는다. 하지만 URL 경로나 파일 이름에 유니코드 문자나 특수 문자가 포함될 경우 문제가 발생할 수 있다. 파일 이름을 URL 경로로 사용할 때 인코딩 문제가 발생할 수 있다.

따라서 Java.util에서 제공하는 URLEncoder 를 이용하여 클라이언트로부터 전달 받은 fileName을 encode 한다.

2. 파일 이름 중복

S3 bucket에 파일 이름이 jari-bean.png에 해당하는 이미지 파일이 존재하고, 파일 이름이 같은 jari-bean.png 인 파일을 S3 bucket에 저장할 경우 기존에 존재하던 이미지를 덮어쓴다. 다시 말하면 기존의 jari-bean.png 이미지는 사라지게 된다.

업로드 파일 이름 중복이 발생하여 기존 파일이 삭제되는 것을 방지하기 위해 encode된 fileName 앞에 임의적으로 생성한 uuid를 붙여준다.