[파이썬] mongoengine 바이너리 필드(`BinaryField`) 활용하기

MongoEngine은 파이썬에서 MongoDB를 편리하게 다룰 수 있도록 도와주는 명확하고 간결한 Document-Object Mapping(DOM) 라이브러리입니다. 이 라이브러리는 다양한 필드 유형을 지원하여 MongoDB에 데이터를 저장하고 검색하는 작업을 간편하게 해줍니다. 이번에는 MongoEngine에서 제공되는 BinaryField를 활용하여 바이너리 데이터를 다루는 방법에 대해 알아보겠습니다.

BinaryField란?

BinaryField는 MongoDB에 바이너리 데이터를 저장하는 필드 유형입니다. 이 필드를 사용하면 이미지, 동영상, 오디오 등과 같은 바이너리 데이터를 MongoDB에 저장하고 검색할 수 있습니다. 이 필드는 바이너리 데이터를 바이트 배열로 저장하며, 다른 필드 유형들과 함께 사용하여 MongoDB의 Document에 포함될 수 있습니다.

바이너리 데이터 저장하기

먼저, MongoEngine을 사용하여 바이너리 데이터를 저장하는 예제를 살펴보겠습니다. 다음은 BinaryField를 사용하여 이미지 파일을 MongoDB에 저장하는 예제입니다.

from mongoengine import Document, BinaryField

class Image(Document):
    image_data = BinaryField()

# 이미지 파일 불러오기
with open('image.jpg', 'rb') as file:
    image_data = file.read()

# 이미지 데이터 저장하기
image = Image(image_data=image_data)
image.save()

위의 예제 코드에서는 Image라는 MongoEngine Document를 정의하고, image_data 필드를 BinaryField로 선언했습니다. image.jpg 파일을 바이너리 모드로 읽어와서 image_data에 저장하고, 이를 Image Document에 저장한 후 MongoDB에 저장합니다.

바이너리 데이터 검색하기

바이너리 데이터를 저장했다면, 이를 검색해보는 예제를 살펴보겠습니다. 이미지를 검색한 후 해당 이미지를 디스크에 저장하는 예제입니다.

from mongoengine import Document, BinaryField

class Image(Document):
    image_data = BinaryField()

# 이미지 검색하기
image = Image.objects.first()
image_data = image.image_data

# 디스크에 이미지 저장하기
with open('saved_image.jpg', 'wb') as file:
    file.write(image_data)

위의 예제 코드에서는 Image Document에서 첫 번째 이미지를 검색한 후 image_data 필드의 값을 읽어옵니다. 그리고 saved_image.jpg 파일에 이 값을 저장합니다.

결론

MongoEngine의 BinaryField를 활용하면 MongoDB에 바이너리 데이터를 손쉽게 저장하고 검색할 수 있습니다. 이를 통해 파일, 이미지, 동영상 등 다양한 바이너리 데이터를 MongoDB에 효과적으로 관리할 수 있습니다.