Docs Menu
Docs Home
/ /

GridFS 사용하여 대용량 파일 저장

이 가이드 에서는 GridFS 사용하여 MongoDB 에 대용량 파일을 저장 하고 조회 방법을 학습 수 있습니다. GridFS 는 파일을 저장할 때 청크로 분할 하고 검색할 때 파일을 다시 조립하는 방법을 설명합니다. Ruby 드라이버의 GridFS 구현 파일 저장 의 운영 및 조직 관리하는 추상화입니다.

파일 크기가 BSON 문서 크기 제한인 16MB를 초과하는 경우 GridFS 를 사용하세요. GridFS 가 사용 사례 에 적합한지 여부에 대한 자세한 내용은 MongoDB Server 매뉴얼에서 GridFS 를 참조하세요.

다음 섹션에서는 GridFS 작업과 이를 수행하는 방법을 설명합니다.

GridFS는 파일 청크와 파일을 설명하는 정보가 들어 있는 MongoDB 컬렉션 그룹인 버킷에 파일을 구성합니다. 버킷에는 GridFS 사양에 정의된 규칙을 사용하여 명명된 다음 컬렉션이 포함되어 있습니다.

  • chunks 컬렉션은 바이너리 파일 청크를 저장합니다.

  • files 0} 컬렉션에 파일 메타데이터가 저장됩니다.

새 GridFS 버킷을 생성할 때 Mongo::Database#fs 메서드 옵션에서 다른 이름을 지정하지 않는 한 운전자 fs.chunksfs.files 컬렉션을 생성합니다. 또한 운전자 파일 및 관련 메타데이터 를 효율적으로 검색할 수 있도록 각 컬렉션 에 인덱스 생성합니다. 운전자 GridFS 버킷을 생성하며, 버킷이 존재하지 않는 경우 첫 번째 쓰기 (write) 작업이 수행될 때만 생성합니다. 운전자 인덱스가 존재하지 않고 버킷이 비어 있는 경우에만 인덱스를 생성합니다. GridFS 인덱스에 대한 자세한 내용은 MongoDB Server 매뉴얼에서 GridFS 인덱스 를 참조하세요.

GridFS 사용하여 파일을 저장할 때 운전자 파일을 작은 청크로 분할하며, 각 청크는 chunks 컬렉션 에서 별도의 문서 로 표시됩니다. 또한 files 컬렉션 에 파일 ID, 파일 이름 및 기타 파일 메타데이터 포함된 문서 만듭니다. 메모리 또는 스트림 에서 파일 업로드할 수 있습니다. 다음 다이어그램은 파일이 버킷에 업로드될 때 GridFS 가 분할하는 방법을 보여줍니다.

GridFS가 파일을 버킷에 업로드하는 방법을 보여주는 다이어그램입니다.

파일을 검색할 때 GridFS는 지정된 버킷의 files 컬렉션에서 메타데이터를 가져와서 이 정보를 사용하여 chunks 컬렉션의 문서에서 파일을 재구성합니다. 파일을 메모리로 읽거나 스트림으로 출력할 수 있습니다.

GridFS 에서 파일을 저장 하거나 조회 하려면 Mongo::Database 인스턴스 에서 fs 메서드를 호출하여 GridFS 버킷을 만듭니다. FSBucket 인스턴스 사용하여 버킷의 파일에 대한 읽기 및 쓰기 (write) 작업을 수행할 수 있습니다.

bucket = database.fs

기본값 이름 fs 이외의 이름으로 버킷을 생성하거나 참조하려면 다음 예시 와 같이 버킷 이름을 fs 메서드에 선택적 매개변수로 전달합니다.

custom_bucket = database.fs(database, bucket_name: 'files')

upload_from_stream 메서드는 업로드 스트림 의 내용을 읽고 이를 GridFSBucket 인스턴스 에 저장합니다.

Hash 를 선택적 매개변수로 전달하여 청크 크기를 구성하거나 추가 메타데이터 포함할 수 있습니다.

다음 예시 파일 FSBucket 에 업로드하고 업로드된 파일 에 대한 메타데이터 지정합니다.

metadata = { uploaded_by: 'username' }
File.open('/path/to/file', 'rb') do |file|
file_id = bucket.upload_from_stream('test.txt', file, metadata: metadata)
puts "Uploaded file with ID: #{file_id}"
end

이 섹션에서는 GridFS 버킷의 files 컬렉션에 저장된 파일 메타데이터를 검색하는 방법을 알아볼 수 있습니다. 메타데이터에는 다음을 포함하여 참조하는 파일에 대한 정보가 포함됩니다.

  • 파일의 _id입니다.

  • 파일 이름

  • 파일 의 크기

  • 업로드 날짜 및 시간

  • 다른 정보를 저장할 수 있는 metadata 문서입니다.

컬렉션 에서 조회 할 수 있는 필드에 files 대해 자세히 학습 MongoDB Server 매뉴얼의 GridFS 파일 컬렉션 문서를 참조하세요.

GridFS 버킷에서 파일을 조회 하려면 FSBucket 인스턴스 에서 find 메서드를 호출합니다. 다음 코드 예시 GridFS 버킷의 모든 파일에서 파일 메타데이터 검색하고 출력합니다.

bucket.find.each do |file|
puts "Filename: #{file.filename}"
end

MongoDB 쿼리에 대해 자세히 학습 문서 찾기를 참조하세요.

download_to_stream 메서드는 파일 의 내용을 다운로드합니다.

_id 파일 로 파일 다운로드 하려면 _id 을 메서드에 전달합니다. download_to_stream 메서드는 파일 의 내용을 제공된 객체 에 씁니다. 다음 예시 _id 파일 기준으로 파일 다운로드합니다.

file_id = BSON::ObjectId('your_file_id')
File.open('/path/to/downloaded_file', 'wb') do |file|
bucket.download_to_stream(file_id, file)
end

파일 이름이지만 _id이 아닌 경우 download_to_stream_by_name 메서드를 사용할 수 있습니다. 다음 예시 mongodb-tutorial라는 파일 다운로드합니다.

File.open('/path/to/downloaded_file', 'wb') do |file|
bucket.download_to_stream_by_name('mongodb-tutorial', file)
end

참고

동일한 filename 값을 가진 문서가 여러 개 있는 경우 GridFS 지정된 이름( uploadDate 필드 에 따라 결정됨)을 가진 가장 최근 파일 가져옵니다.

버킷에서 파일의 컬렉션 문서 와 관련 청크를 제거 하려면 delete 메서드를 사용합니다. 파일 이름이 아닌 _id 필드 로 파일 지정해야 합니다.

다음 예시 _id을 기준으로 파일 삭제합니다.

file_id = BSON::ObjectId('your_file_id')
bucket.delete(file_id)

참고

delete 메서드는 한 번에 하나의 파일 삭제만 지원합니다. 여러 파일을 삭제하려면 버킷에서 파일을 검색하고 삭제하려는 파일에서 _id 필드를 추출한 다음 delete 메서드에 각 값을 개별적으로 호출하여 전달합니다.

GridFS 사용하여 대용량 파일을 저장 하고 조회 에 대해 자세히 학습 다음 API 설명서를 참조하세요.

돌아가기

CRUD 작업 구성

이 페이지의 내용