mongoengine
은 파이썬에서 MongoDB와 상호 작용하기 위한 ORM(Object Relational Mapping) 라이브러리입니다. mongoengine
을 사용하면 MongoDB에 저장된 데이터를 파이썬 객체로 바꾸고, 관리하며, 쿼리를 수행할 수 있습니다. 이 블로그 포스트에서는 mongoengine
의 내부 동작 방식에 대해 알아보겠습니다.
문서(Document) 모델
mongoengine
은 MongoDB의 컬렉션(Collection)과 대응하는 파이썬 클래스를 사용하여 데이터를 정의합니다. 이러한 클래스를 문서(Document) 모델이라고 합니다. 문서 모델은 mongoengine.Document
클래스를 상속받아 정의되며, 클래스의 필드는 MongoDB의 문서에 해당하는 항목을 나타냅니다.
from mongoengine import Document, StringField, IntField
class User(Document):
name = StringField(required=True)
age = IntField()
위의 코드에서 User
클래스는 mongoengine.Document
클래스를 상속받아 정의되었습니다. User
클래스는 name
과 age
라는 두 개의 필드를 가지며, name
은 문자열(StringField
) 타입이고, age
는 정수(IntField
) 타입입니다.
연결(Connection)
mongoengine
은 MongoDB에 연결하기 위해 connect
함수를 제공합니다. 이 함수를 호출하여 MongoDB 서버에 연결할 수 있습니다.
from mongoengine import connect
connect('my-database', host='localhost', port=27017)
위의 코드에서 'my-database'
는 연결할 MongoDB의 데이터베이스 이름을 나타내며, host
와 port
는 MongoDB 서버에 대한 호스트와 포트 번호를 지정합니다.
쿼리(Query)
mongoengine
을 사용하여 MongoDB에 쿼리를 수행할 때는 QuerySet
을 사용합니다. QuerySet
은 Document
클래스의 인스턴스를 조작하는데 사용되며, 다양한 쿼리 연산자를 지원합니다.
# 모든 사용자(문서) 조회
users = User.objects()
# 조건에 맞는 사용자 조회
young_users = User.objects(age__lt=30)
# 사용자 추가
user = User(name='John', age=25)
user.save()
# 사용자 수정
user.name = 'Jane'
user.save()
# 사용자 삭제
user.delete()
위의 코드에서 User
클래스의 objects
메서드는 QuerySet
객체를 반환합니다. QuerySet
객체는 filter
메서드를 통해 조건을 지정하여 문서를 조회할 수 있습니다.
저장(Insert) 및 갱신(Update)
mongoengine
을 사용하여 데이터를 저장 및 갱신할 때는 문서 객체를 생성하고 save
메서드를 호출합니다. 이렇게 하면 생성한 문서 객체가 MongoDB에 저장되거나 갱신됩니다.
# 사용자 추가
user = User(name='John', age=25)
user.save()
# 사용자 수정
user.name = 'Jane'
user.save()
위의 코드에서 User
클래스의 인스턴스를 생성하고, save
메서드를 호출하여 사용자를 추가 또는 수정합니다.
삭제(Delete)
mongoengine
을 사용하여 데이터를 삭제할 때는 문서 객체의 delete
메서드를 호출합니다. 이렇게 하면 해당 문서가 MongoDB에서 삭제됩니다.
user.delete()
위의 코드에서 delete
메서드를 호출하여 사용자를 삭제합니다.
결론
mongoengine
은 파이썬에서 MongoDB와 상호 작용하기 위한 강력한 ORM 라이브러리입니다. 이 블로그 포스트에서는 mongoengine
의 문서 모델, 연결, 쿼리, 저장/갱신/삭제 등의 기본적인 내부 동작 방식에 대해 살펴보았습니다. mongoengine
을 사용하면 MongoDB와 파이썬 간의 데이터 처리를 간편하게 수행할 수 있습니다.