강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

이정환님의 프로필 이미지
이정환

작성한 질문수

실리콘밸리 빅테크 29개의 실습으로 배우는 시스템 디자인 설계

Blob Storage로 대규모 파일 저장 및 청크 다루기 및 동기화 완벽 설계 (feat. Dropbox, AWS S3) [업데이트]

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

해결된 질문

작성

·

35

0

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

답변 2

0

미국달팽이님의 프로필 이미지
미국달팽이
지식공유자

안녕하세요. 이정환님,

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

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

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

문제 상황 이해

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

해결 방안

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

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

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

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

추가 참고 자료

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

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

이정환님의 프로필 이미지
이정환

작성한 질문수

질문하기