[파이썬] mongoengine 고유 인덱스와 유효성 검사

Mongoengine은 MongoDB를 사용하는 파이썬 개발자들에게 매우 유용한 ORM(Object-Relational Mapping) 도구입니다. 이 도구를 사용하면 MongoDB 데이터베이스를 파이썬 객체로 쉽게 조작할 수 있습니다. 이번 블로그 포스트에서는 mongoengine에서 고유 인덱스(unique index)와 유효성 검사(validation)의 사용법을 알아보겠습니다.

고유 인덱스 (Unique Index)

고유 인덱스는 특정 필드에 중복된 값을 허용하지 않도록 하는 인덱스입니다. 이를 사용하면 데이터베이스에서 중복된 값이 발생하는 것을 방지할 수 있습니다. Mongoengine에서는 unique=True 속성을 사용하여 필드에 고유 인덱스를 지정할 수 있습니다.

from mongoengine import *

# MongoDB 연결 설정
connect('mydatabase')

# User 클래스 정의
class User(Document):
    username = StringField(unique=True)
    email = EmailField(unique=True)

위의 예시에서 usernameemail 필드는 각각 고유한 값을 가지는 필드입니다. 이렇게 필드에 unique=True를 설정하면 해당 필드에 대한 고유 인덱스가 생성됩니다. 따라서 동일한 값을 가지는 문서를 추가하려고 하면 고유 인덱스 제약 조건으로 인해 중복 오류가 발생합니다.

유효성 검사 (Validation)

유효성 검사는 문서의 필드에 대한 제약 조건을 설정하는 기능입니다. 이를 통해 특정 필드에 대한 데이터 유효성을 보장할 수 있습니다. Mongoengine에서는 다양한 유효성 검사 옵션을 제공합니다. 몇 가지 예시를 살펴보겠습니다.

필수 필드 (Required Field)

required=True를 사용하여 필드가 비어 있을 수 없도록 설정할 수 있습니다.

from mongoengine import *

class User(Document):
    username = StringField(required=True)
    email = EmailField(required=True)

위의 예시에서 usernameemail 필드는 빈 값을 허용하지 않습니다. 따라서 문서 작성 시 이 필드들이 반드시 채워져야 합니다.

최소 및 최대 길이 (Min and Max Length)

min_lengthmax_length를 사용하여 필드의 최소 및 최대 길이를 지정할 수 있습니다.

from mongoengine import *

class Post(Document):
    title = StringField(min_length=5, max_length=50)
    content = StringField(min_length=10)

위의 예시에서 title 필드는 최소 5자, 최대 50자를 가질 수 있으며, content 필드는 최소 10자 이상을 가질 수 있습니다.

커스텀 유효성 검사 (Custom Validation)

validate 속성을 사용하여 커스텀 유효성 검사 함수를 정의할 수도 있습니다. 이 함수는 입력값을 받아 유효성을 검사한 후 유효하지 않은 경우 ValidationError을 발생시킵니다.

from mongoengine import *

def validate_password(value):
    if len(value) < 8:
        raise ValidationError('비밀번호는 최소 8자 이상이어야 합니다.')

class User(Document):
    username = StringField(required=True)
    password = StringField(validation=validate_password)

위의 예시에서 password 필드는 최소 8자 이상이어야 합니다. 따라서 이 조건을 만족하지 않는 값이 주어진 경우, ValidationError이 발생하게 됩니다.

이처럼 mongoengine에서 제공하는 유효성 검사 기능을 이용하면 MongoDB의 데이터 일관성과 유효성을 쉽게 유지할 수 있습니다. 고유 인덱스와 유효성 검사를 적절하게 활용하여 안정적인 애플리케이션을 개발해보세요.

더 많은 정보를 알고 싶다면 mongoengine 문서를 참조하시기 바랍니다. Happy coding!