[파이썬] `mongoengine`과 Flask 통합하기

Flask는 가벼운 웹 프레임워크로서 파이썬으로 웹 애플리케이션을 빠르고 쉽게 개발할 수 있게 도와줍니다. 그리고 mongoengine은 MongoDB와 상호작용할 수 있는 객체 문서 매퍼입니다. 이번 블로그 포스트에서는 mongoengine을 Flask 애플리케이션과 통합하여 데이터베이스를 사용하는 방법에 대해 알아보겠습니다.

1. Flask와 MongoDB 연결하기

먼저, Flask 애플리케이션과 MongoDB를 연결해야 합니다. Flask에서는 pymongo 라이브러리를 사용하여 MongoDB와 연결할 수 있습니다.

from flask import Flask
from flask_pymongo import PyMongo

app = Flask(__name__)

# MongoDB 설정
app.config["MONGO_URI"] = "mongodb://localhost:27017/mydatabase"
mongo = PyMongo(app)

위의 코드에서 app.config["MONGO_URI"]를 사용하여 MongoDB의 연결 URI를 설정합니다. 이 예제에서는 로컬 호스트의 포트 27017에 위치한 “mydatabase” 데이터베이스에 연결합니다.

2. mongoengine으로 데이터 모델링하기

이제 mongoengine을 사용하여 MongoDB 데이터 모델을 정의할 수 있습니다. 데이터 모델은 MongoDB 컬렉션에 대한 스키마와 필드를 정의합니다.

from mongoengine import Document, StringField, DateTimeField

class User(Document):
    name = StringField(required=True)
    email = StringField(required=True)
    created_at = DateTimeField()

위의 코드에서 User 클래스는 mongoengineDocument 클래스를 상속받고 있습니다. 이 클래스는 MongoDB의 컬렉션에 대응되며, name, email, created_at 필드를 정의하고 있습니다.

3. Flask 애플리케이션에서 mongoengine 사용하기

Flask 애플리케이션 내에서 mongoengine을 사용하려면 몇 가지 설정을 추가해야 합니다. Flask 애플리케이션에 mongoengine 연결을 초기화하고 문서 클래스를 등록해야 합니다.

from flask_mongoengine import MongoEngine

app.config["MONGODB_SETTINGS"] = {
    "db": "mydatabase",
    "host: "localhost",
    "port": 27017
}

db = MongoEngine(app)

# 문서 클래스 등록
db.register_connection(
    host=app.config.get("MONGODB_SETTINGS")["host"],
    port=app.config.get("MONGODB_SETTINGS")["port"],
    db=app.config.get("MONGODB_SETTINGS")["db"]
)

위의 코드에서 app.config["MONGODB_SETTINGS"]를 사용하여 MongoDB 연결 설정을 정의합니다. 그리고 MongoEngine 객체를 생성하여 app과 연결합니다. 마지막으로 db.register_connection()을 통해 문서 클래스를 등록합니다.

4. 데이터베이스 작업 수행

이제 Flask 애플리케이션에서 mongoengine을 사용하여 데이터베이스 작업을 수행할 수 있습니다. 예를 들어, 사용자를 생성하고 조회하는 코드는 다음과 같습니다.

@app.route("/users", methods=["POST"])
def create_user():
    name = request.form.get("name")
    email = request.form.get("email")

    user = User(name=name, email=email)
    user.save()

    return "User created successfully"

@app.route("/users", methods=["GET"])
def get_users():
    users = User.objects()
    return render_template("users.html", users=users)

위의 코드에서 /users 엔드포인트에서 POST 요청이 들어오면 사용자를 생성하고, GET 요청이 들어오면 사용자를 조회합니다. 사용자 생성은 User 클래스의 인스턴스를 생성하고 save() 메서드를 호출하여 MongoDB에 저장하는 방식으로 수행됩니다. 사용자 조회는 User.objects()를 호출하여 모든 사용자를 가져오고, 결과를 템플릿에 전달하여 화면에 표시합니다.

결론

이 튜토리얼에서는 mongoengine을 Flask와 통합하여 MongoDB와의 상호작용을 가능하게 하는 방법에 대해 알아보았습니다. 이를 통해 Flask 애플리케이션에서 데이터베이스 모델링과 작업을 수행할 수 있게 되었습니다. MongoDB를 사용하는 웹 애플리케이션을 개발할 때 mongoengine과 Flask를 함께 사용하여 생산성과 효율성을 높일 수 있습니다.