inflearn logo
강의

講義

知識共有

AI時代にも生き残るエンジニアの条件、米国ビッグテックのシステムデザイン・アルゴリズム思考・オープンソース実務の完成

Imgur画像ホスティングサービスのシステムデザインおよびスケーリング DeepDive [アップデート]

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

解決済みの質問

83

ready

投稿した質問数 2

0

시스템 디자인 관련 질문

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

回答 2

2

americasnail

안녕하세요. 장준혁님,

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

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

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

communityai8509

안녕하세요, 인프런 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에서 파일 업로드 동작 및 상태 확인 메커니즘”

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

특별 학습 자료 프로모션 1년 멤버십 제공 관련 문의 드립니다.

0

56

2

simcached를 검색을 했을때 해당 자료가 나오지 않는데 혹시 MemcachedGPU 라고 불리는 기술을 말씀하시는건가요?

0

56

1

유튜브 예제에서 흐름 관련 질문있습니다

0

47

2

Spotify 서비스 설계에서 transcoder service에 대해 문의 드립니다.

0

73

1

특별 학습 자료 프로모션 1년 멤버십 무료 제공 지원 확인 방법

0

83

2

[위치 이름 기반으로 호텔을 조회하는 메서드] 코드 질문 드립니다.

0

49

2

14강. 영화 DVD 대여 시스템 데이터베이스 스키마 설계에서 Inventory 테이블 질문있습니다.

0

83

2

Matching Service의 MQ 필요성, Cassandra의 필요성, Cassandara - RDB 동기화

0

88

2

쿠폰 문의

0

83

1

Redis 랜덤 값 추가 시 메타데이터 저장

0

86

1

Blob Storage에서 파일 업로드에 대한 동시성을 어떻게 제어할 수 있을까요?

0

106

2

채팅을 영속할 DB로 RDB를 선택한 이유도 궁금합니다

0

269

2

URL 단축 서비스에서 redis counter를 사용하는 이유가 무엇인지 궁금합니다.

0

213

2

long url을 파티션키로 지정했을때 장점이 생각 안나네요 ㅎㅎ;;

0

135

2

실제 인터뷰에서도 Object Oriented Design 을 이런 과정으로 하는걸까요?

0

161

1

able to get all students who got a "d+" grade or lower 요구사항

0

115

1

number of copies 컬럼은 Inventory Table에 들어가야하지않을까요?

0

171

3

Spotify 서비스 시스템 디자인 및 스케일링에서 백업 클러스터 사용에 대한 문의

0

93

2

URL 단축 서비스 시스템 디자인 및 스케일링 질문있습니다.

0

187

2

예시 두개가 납득이 잘 가지않네요 ㅠㅠ

1

201

2

강의자료는 제공 불가능할까요?

0

218

1

General Service 서비스 컴포넌트 관련 질문있습니다!

1

182

2

영화 DVD 대여 시스템 데이터베이스 스키마 설계에 대한 질문입니다.

1

249

2

메세지 큐 예제 2번 질문있습니다!!

0

308

2