Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature/404] S3 멀티파트 업로드를 위한 Presigned URL 생성 및 완료 요청 API 구현 #405

Merged
merged 10 commits into from
Nov 4, 2024

Conversation

hosunglee222
Copy link
Member

Type of change

  • Feature : 새로운 기능 추가
  • Bug fix : 버그 수정
  • Refactor : 코드 리팩토링 작업
  • Document : 문서작업
  • Test : 테스트 코드 작성 및 테스트 작업
  • Style : 코드 스타일 및 포맷팅 작업
  • CI/CD : CI/CD 작업 수정
  • Chore : 패키지 매니저, 라이브러리 업데이트 등의 작업

PR Desciption

변경 사항 설명

  • /pre-signed/start 엔드포인트: S3 멀티파트 업로드를 시작하기 위한 Presigned URL을 생성하여 각 파트를 나누어 업로드할 수 있도록 합니다.
    • 클라이언트는 원하는 파트 수 (partCount)를 입력하여, 해당 수만큼의 Presigned URL 리스트를 반환받습니다.
    • 반환된 URL을 통해 각 파트를 S3에 업로드한 후, 모든 파트를 업로드한 뒤 /pre-signed/complete 엔드포인트를 통해 업로드 완료 요청을 해야 합니다.
  • /pre-signed/complete 엔드포인트: 멀티파트 업로드의 최종 완료 요청을 처리하는 API입니다.
    • 모든 파트 업로드가 완료된 후, 각 파트의 partNumber와 eTag 정보가 포함된 partETags를 함께 전달해야 합니다.
    • 업로드 완료 요청을 통해 S3에 최종적으로 파일이 저장되며, 완료 요청이 없을 경우 임시로 저장된 파일이 7일 후 자동으로 삭제됩니다.

Requirements for Reviewer

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요
ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

기능 설명

멀티파트 업로드의 Presigned URL 생성 (/pre-signed/start)

  • 클라이언트는 이 API를 호출하여 파일을 여러 파트로 나누어 업로드할 수 있는 Presigned URL 리스트를 생성받습니다.
  • partCount를 입력하여 원하는 파트 수만큼 URL을 생성할 수 있으며, 각 URL은 개별 파트 업로드에 사용됩니다.
  • 클라이언트가 파일의 파트를 S3에 업로드한 후, 업로드 완료를 위해 반드시 /pre-signed/complete API를 호출해야 합니다.

멀티파트 업로드 완료 (/pre-signed/complete)

  • 모든 파트를 업로드한 후 각 파트의 partNumber와 eTag 정보가 포함된 partETags 리스트를 전달하여 최종 업로드를 완료할 수 있습니다.
  • partETags 예제는 Swagger 주석에 포함되어 있으며, JSON 형식으로 각 파트에 대한 partNumber와 eTag를 전달해야 합니다.
    • eTag 는 PUT으로 이미지를 업로드 한 이후 헤더에 "ETag"라는 Key 값으로 반환됩니다.
  • 업로드 완료 요청을 하지 않으면, S3에 임시로 저장된 파일이 7일 후 자동으로 삭제됩니다.

첨부 자료

  • presingedURL PUT 요청 응답 헤더
image image

관련 이슈

<body>
part별 이미지 업로드시 반환될 dto를 구현

- 관련 : #404
<body>
core-infra 모듈로 이동

- 관련 : #404
<body>
getPreSignedUrls() 를 통해 분할 이미지 업로드 URL 발급

- 관련 : #404
<body>
API 구현 완료

- 관련 : #404
<body>
Etag를 포함하여 요청하는 dto

- 관련 : #404
<body>
S3에 part 업로드 완료 처리

- 관련 : #404
<body>
S3에 멀티파트 업로드를 완료하는 요청을 보내는 API 구현 완료

- 관련 : #404
<body>
PartETag .Get 메서드 사용시 의존성 때문에 파람 수정

- 관련 : #404
<body>
바디 etag 값 스웨거 문서화

- 관련 : #404
@hosunglee222 hosunglee222 requested a review from joowojr November 1, 2024 12:03
@hosunglee222 hosunglee222 self-assigned this Nov 1, 2024
@hosunglee222 hosunglee222 linked an issue Nov 1, 2024 that may be closed by this pull request
10 tasks
@github-actions github-actions bot added the ✨ feature 기능 구현 관련 label Nov 1, 2024
Copy link
Contributor

@joowojr joowojr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!👍

@hosunglee222 hosunglee222 merged commit bff2fa8 into dev Nov 4, 2024
3 checks passed
@hosung-222 hosung-222 deleted the feature/404 branch November 5, 2024 11:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ feature ♻️ refactor 리펙터링 관련 ✨ feature 기능 구현 관련
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature] 파일 분산 업로드 기능 구현
3 participants