Imgur 이미지 호스팅 서비스 질문
시스템 디자인 관련 질문
서버가 PreSigned URL 을 발급하면 클라이언트가 URL 을 기반으로 Blob Storage에 다이렉트로 파일을 업로드 한 것으로 이해했습니다.
클라이언트가 업로드를 하는데 서버가 현재 청크의 진행상황을 탐지하여 Key-Value 에 업데이트 하는 메커니즘이 궁금합니다.
가령 서버가 Blob Storage 를 주기적으로 찔러 업데이트하는 과정일지 궁금합니다. 그림 상으로는 서버가 청크 진행상황을 알기위해서 추가적인 메커니즘이 있을까 생각이 들어서요.
回答 2
2
안녕하세요. 장준혁님,
먼저 수강해주셔서 감사의 말씀 드립니다.
아주 좋은 질문을 해주셔서 기분이 좋아지는 하루입니다.
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 방식은 폴링은 비용,지연만 늘리고 정확도는 낮아서 권장되지 않습니다. 추가적으로 네트워크 끊김 시 uploadId로 ListParts 조회해서 미완료 청크 부터 재시도 할 수 있습니다.
감사합니다.
좋은 하루 되세요!
0
안녕하세요, 인프런 AI 인턴입니다. 장준혁님께서 질문해주신 Imgur 이미지 호스팅 서비스의 PreSigned URL과 관련된 클라이언트의 업로드 진행 상황을 서버가 어떻게 탐지하는지에 대해 답변드리겠습니다.
PreSigned URL 기반 업로드
PreSigned URL의 동작 이해:
- 클라이언트는 서버로부터 PreSigned URL을 발급받아 해당 URL을 통해 직접 Blob Storage에 파일을 업로드할 수 있습니다. 이 과정에서 서버는 실제 파일 데이터에 접근하지 않고도 클라이언트가 데이터를 저장할 수 있도록 지원합니다.
- 클라이언트는 서버로부터 PreSigned URL을 발급받아 해당 URL을 통해 직접 Blob Storage에 파일을 업로드할 수 있습니다. 이 과정에서 서버는 실제 파일 데이터에 접근하지 않고도 클라이언트가 데이터를 저장할 수 있도록 지원합니다.
청크 업로드 진행 상황 탐지:
- 일반적으로 Blob Storage로의 청크 업로드를 모니터링하기 위한 방법으로는 클라이언트가 특정 이벤트를 트리거하여 서버에 진행 상황을 업데이트하는 방식이 있습니다.
- 이벤트 기반 업데이트: 클라이언트는 각 청크 업로드 완료 시, 진행 상황을 서버에 알리는 API를 호출할 수 있습니다. 이 API는 현재까지 업로드된 청크의 상태를 서버의 Key-Value 저장소에 기록합니다.
- 청크 상태 확인: 백그라운드 서비스가 주기적으로 Blob Storage 상태를 확인하여 진행 상황을 업데이트하는 방법도 사용됩니다. 이 서비스는 Blob Storage의 API를 이용해 청크의 업로드 완료 여부를 확인할 수 있습니다.
- 일반적으로 Blob Storage로의 청크 업로드를 모니터링하기 위한 방법으로는 클라이언트가 특정 이벤트를 트리거하여 서버에 진행 상황을 업데이트하는 방식이 있습니다.
추가적인 메커니즘:
- Webhook: Blob Storage에서 제공하는 Webhook 설정을 통해, 특정 이벤트(예: 청크 업로드 완료)가 발생할 때마다 서버로 알림을 보냅니다.
- Lifecycle Policy: Blob Storage의 라이프사이클 정책을 사용하여 상태 변화(업로드 완료 등)를 감지하고 이를 서버와 연계하여 모니터링할 수 있습니다.
- Webhook: Blob Storage에서 제공하는 Webhook 설정을 통해, 특정 이벤트(예: 청크 업로드 완료)가 발생할 때마다 서버로 알림을 보냅니다.
위 설명을 통해 클라이언트의 청크 업로드 진행 상황을 서버에서 효율적으로 탐지하고 업데이트하는 방법에 대해 이해하는 데 도움이 되시길 바랍니다.
비슷한 주제로 다룬 유사 질문이 있으니, 아래의 답변을 참조하시면 세부적인 내용 이해에 도움을 줄 수 있을 것입니다:
- “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

