강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của ready
ready

câu hỏi đã được viết

Khóa học hoàn thiện về Thiết kế hệ thống Big Tech Hoa Kỳ và Đóng góp thực tế cho mã nguồn mở – Những kỹ năng không thể thay thế trong kỷ nguyên AI

Thiết kế hệ thống và mở rộng quy mô dịch vụ lưu trữ hình ảnh Imgur DeepDive [Cập nhật]

Imgur 이미지 호스팅 서비스 질문

Đã giải quyết

Viết

·

59

0

시스템 디자인 관련 질문

  • 서버가 PreSigned URL 을 발급하면 클라이언트가 URL 을 기반으로 Blob Storage에 다이렉트로 파일을 업로드 한 것으로 이해했습니다.

    클라이언트가 업로드를 하는데 서버가 현재 청크의 진행상황을 탐지하여 Key-Value 에 업데이트 하는 메커니즘이 궁금합니다.

    가령 서버가 Blob Storage 를 주기적으로 찔러 업데이트하는 과정일지 궁금합니다. 그림 상으로는 서버가 청크 진행상황을 알기위해서 추가적인 메커니즘이 있을까 생각이 들어서요.

소프트웨어-설계시스템-디자인

Câu trả lời 2

2

americasnail님의 프로필 이미지
americasnail
Người chia sẻ kiến thức

안녕하세요. 장준혁님,

먼저 수강해주셔서 감사의 말씀 드립니다.

아주 좋은 질문을 해주셔서 기분이 좋아지는 하루입니다.

PreSigned URL 을 발급 한 후 클라이언트에서 직접 direct 로 blob storage 즉, AWS S3 를 예시로 들어 해당 blob storage 로 업로드 됩니다. 그 과정에서 청크의 진행상황을 탐지하고 이 진행상황을 key-value storage 즉 nosql 데이터베이스에 업데이트 하는 시스템 구조가 궁금하신 것으로 이해하였습니다.

 

여기서 클라이언트가 직접 direct 로 AWS S3 에 pre-signed url 로 업로드를 하게 되는데 이 과정에서 Multipart upload api 를 사용하여야 청크가 분할되어 s3 에 업로드 되게 됩니다. 그 후에 Key-value storage 에는 아래와 같이 저장을 합니다.

{
  "id": "ul_xxx",
  "userId": "u1",
  "key": "uploads/2025/10/img.png",
  "uploadId": "XYZ",
  "partSize": 8388608,
  "status": "INITIATED",
  "totalBytes": 123456789,          // 알면 저장
  "bytesUploaded": 0,
  "partsDone": [],                  // [{partNumber, etag, size}]
  "expiresAt": "...",
  "lastHeartbeatAt": "..."
}

그리고나서 클라이언트는 파일을 청크로 분할 해서 s3 에 직접 업로드를 하게 되고 전송된 바이트를 시스템의 목적에 따라 WS(웹소켓)/SSE/HTTP 로 주기적으로 업데이트를 합니다. 각 파트가 업로드 되면 응답헤더의 ETag 를 읽어서 "partsDone": [], // [{partNumber, etag, size}] 에 업데이트해서 bytesUploaded를 갱신하여 근사 % 계산 하는 방식으로 시스템을 설계할 수 있습니다. 그리고 나서 s3 버킷의 Event Notification (SQS, SNS, Lambda) 을 수신해서 status 를 완료 처리하고 후속작업을 할 수 있습니다. 후속작업은 예시로 썸네일, 리사이즈 등이 있습니다. 하지만, 폴링 polling 방식은 폴링은 비용,지연만 늘리고 정확도는 낮아서 권장되지 않습니다. 추가적으로 네트워크 끊김 시 uploadIdListParts 조회해서 미완료 청크 부터 재시도 할 수 있습니다.

 

감사합니다.

좋은 하루 되세요!

0

안녕하세요, 인프런 AI 인턴입니다. 장준혁님께서 질문해주신 Imgur 이미지 호스팅 서비스의 PreSigned URL과 관련된 클라이언트의 업로드 진행 상황을 서버가 어떻게 탐지하는지에 대해 답변드리겠습니다.

PreSigned URL 기반 업로드

  1. PreSigned URL의 동작 이해:

    • 클라이언트는 서버로부터 PreSigned URL을 발급받아 해당 URL을 통해 직접 Blob Storage에 파일을 업로드할 수 있습니다. 이 과정에서 서버는 실제 파일 데이터에 접근하지 않고도 클라이언트가 데이터를 저장할 수 있도록 지원합니다.
  2. 청크 업로드 진행 상황 탐지:

    • 일반적으로 Blob Storage로의 청크 업로드를 모니터링하기 위한 방법으로는 클라이언트가 특정 이벤트를 트리거하여 서버에 진행 상황을 업데이트하는 방식이 있습니다.
    • 이벤트 기반 업데이트: 클라이언트는 각 청크 업로드 완료 시, 진행 상황을 서버에 알리는 API를 호출할 수 있습니다. 이 API는 현재까지 업로드된 청크의 상태를 서버의 Key-Value 저장소에 기록합니다.
    • 청크 상태 확인: 백그라운드 서비스가 주기적으로 Blob Storage 상태를 확인하여 진행 상황을 업데이트하는 방법도 사용됩니다. 이 서비스는 Blob Storage의 API를 이용해 청크의 업로드 완료 여부를 확인할 수 있습니다.
  3. 추가적인 메커니즘:

    • Webhook: Blob Storage에서 제공하는 Webhook 설정을 통해, 특정 이벤트(예: 청크 업로드 완료)가 발생할 때마다 서버로 알림을 보냅니다.
    • Lifecycle Policy: Blob Storage의 라이프사이클 정책을 사용하여 상태 변화(업로드 완료 등)를 감지하고 이를 서버와 연계하여 모니터링할 수 있습니다.

위 설명을 통해 클라이언트의 청크 업로드 진행 상황을 서버에서 효율적으로 탐지하고 업데이트하는 방법에 대해 이해하는 데 도움이 되시길 바랍니다.

비슷한 주제로 다룬 유사 질문이 있으니, 아래의 답변을 참조하시면 세부적인 내용 이해에 도움을 줄 수 있을 것입니다:
- “Blob Storage에서 파일 업로드 동작 및 상태 확인 메커니즘”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của ready
ready

câu hỏi đã được viết

Đặt câu hỏi