inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Điều kiện để kỹ sư sống sót trong kỷ nguyên AI, hoàn thiện tư duy thuật toán · thiết kế hệ thống Big Tech Hoa Kỳ · thực hành mã nguồn mở

Thiết kế hoàn hảo cho việc lưu trữ tệp quy mô lớn, xử lý chunk và đồng bộ hóa với Blob Storage (feat. Dropbox, AWS S3) [Cập nhật]

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

Đã giải quyết

109

eedys12341972

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

0

용량이 큰 파일의 binary를 기반으로 해시화해서 동시 업로드 할 경우 동일한 파일이 업로드 될 수 있을 것 같습니다.
이럴 경우 해결책이 있을까요?

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

Câu trả lời 2

0

americasnail

안녕하세요. 이정환님,

답변이 늦어 죄송합니다. 좋은 질문 감사드립니다.

Blob Storage 또는 AWS S3처럼 객체 저장소에 용량이 큰 파일을 업로드할 때, 동일한 파일이 동시에 여러 번 업로드되는 문제는 실제로 많이 발생합니다. 이를 해결하기 위해 많이 사용하는 방식이 바로 Pre-Signed URL 기반 업로드입니다.

Pre-Signed URL + 조건부 요청 조합으로 해결할 수 있습니다.

  1. 서버에서 업로드 전에 파일의 해시(SHA-256 등)를 계산합니다.
    이 해시를 기반으로 S3 또는 Blob Storage에 저장할 파일의 이름(Key)을 정합니다.
    예: uploads/1a2b3c4d5e...

  2. 이미 동일한 해시의 파일이 존재하는지 확인합니다.
    존재할 경우 → 업로드 생략 (중복 방지)
    존재하지 않을 경우 → Presigned URL을 발급하여 클라이언트에게 전송

  3. 클라이언트는 해당 URL로 직접 업로드합니다.
    이때 If-None-Match: 헤더를 사용하면,

    동일한 키에 파일이 이미 존재할 경우 업로드가 거부(HTTP 412)되어 중복 업로드가 자동 방지됩니다.

     

  • 대용량 파일이라면 Multipart Upload + 각 파트별 Pre-signed URL 조합으로 병렬 업로드도 가능합니다.

  • Presigned URL은 짧은 유효시간, 최소 권한 설정으로 보안도 안전하게 유지할 수 있어요.

     

결론적으로, 해시 기반 파일명 지정 + Pre-signed URL + 조건부 업로드 조합은 Blob Storage 환경에서 동시 업로드 충돌 방지와 중복 업로드 최소화에 효과적인 방식입니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 이정환님께서 질문해주신 Blob Storage에서의 파일 업로드 동시성 제어에 대한 답변을 드리겠습니다.

문제 상황 이해

파일 업로드 시, 특히 용량이 큰 파일의 경우, 동일한 파일이 여러 번 업로드되는 것을 방지하려면 동시성을 제어할 필요가 있습니다. 일반적으로 파일의 해시 값을 생성하여 이를 파일의 유일한 식별자로 사용하면, 동일한 파일을 여러 번 저장하는 것을 방지할 수 있습니다.

해결 방안

  1. 해시 기반 식별자 사용:

    • 파일을 업로드할 때 먼저 파일의 해시를 생성합니다. 이 때 사용되는 해시 알고리즘으로는 주로 SHA-256이나 MD5를 사용합니다.
    • 해시 값을 기준으로 Blob Storage나 데이터베이스에서 검색하여 이미 존재하는 파일인지 확인합니다.
    • 이미 존재하는 파일이라면 업로드를 중단하고 기존 참조를 반환합니다.
  2. 분산 락 시스템 사용:

    • 파일이 업로드되기 전에 해시 값으로 락(lock)을 생성하여, 락이 걸린 파일은 중복 업로드를 방지합니다. 여러 클라이언트가 동일한 파일을 업로드하려는 경우, 먼저 락을 획득한 클라이언트만 업로드를 처리할 수 있도록 합니다.
    • 락은 잠시 동안만 유지되며, 이후 자동으로 해제되도록 설정하여 데드락을 방지합니다.
  3. 멀티 파트 업로드와 체크포인트:

    • 큰 파일은 멀티 파트로 업로드하여 각 파트를 병렬로 처리합니다.
    • 멀티 파트 업로드 시, 각 파트에 대해 체크포인트를 저장하고 이를 통해 중단된 업로드를 재개하거나 복구할 수 있습니다.

추가 참고 자료

비슷한 상황에 대해 논의된 질문을 참고하시면, 보다 심층적인 이해를 도울 수 있습니다:

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

Substack 1년 제공

1

23

3

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

0

27

2

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

0

71

2

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

0

64

1

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

0

53

2

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

0

78

1

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

0

102

2

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

0

52

2

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

0

86

2

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

0

92

2

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

0

88

2

쿠폰 문의

0

91

1

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

0

92

1

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

0

274

2

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

0

216

2

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

0

140

2

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

0

165

1

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

0

119

1

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

0

175

3

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

0

96

2

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

0

192

2

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

1

206

2

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

0

223

1

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

1

187

2