카테고리 없음

Windows 환경에서 Flask + Gunicorn + MongoDB CRUD 예제 (검색 최적화)

idea9329 2025. 3. 2. 17:42
반응형

Windows에서 Flask + Gunicorn + MongoDB를 사용하여 데이터 입력, 수정, 삭제, 조회(CRUD) 기능을 구현하는 예제를 제공합니다.

이 가이드를 따르면 MongoDB의 연결 풀을 최적화하면서 데이터를 효율적으로 관리할 수 있습니다.


1. 환경 준비

  • 운영체제: Windows 10/11
  • Python 버전: 3.x
  • MongoDB: 로컬(27017 포트)에서 실행 중
  • PyCharm 설치 완료
  • Gunicorn 실행 불가 시, Waitress 사용 가능

2. 필수 패키지 설치

pip install flask pymongo gunicorn gevent waitress

패키지 설명

패키지설명

flask 웹 프레임워크
pymongo MongoDB와 Python 연결
gunicorn WSGI 서버 (Windows에서는 gevent 필요)
gevent Gunicorn이 Windows에서 동작하도록 지원
waitress Windows에서 Flask 서버를 실행할 대체 방법

3. Flask + MongoDB CRUD 기능 구현

다음 코드(app.py)를 작성하여 데이터 입력, 조회, 수정, 삭제 기능을 구현합니다.

📌 app.py

from flask import Flask, request, jsonify
from pymongo import MongoClient
from bson import ObjectId

app = Flask(__name__)

# MongoDB 연결 설정 (커넥션 풀 적용)
client = MongoClient("mongodb://localhost:27017/", maxPoolSize=200)
db = client["test_db"]
collection = db["test_collection"]

# 홈 라우트
@app.route("/")
def home():
    return "Flask + MongoDB CRUD API"

# 데이터 삽입 (CREATE)
@app.route("/insert", methods=["POST"])
def insert_data():
    """MongoDB에 데이터 삽입"""
    data = request.json  # JSON 데이터 받기
    result = collection.insert_one(data)  # 데이터 삽입
    return jsonify({"message": "Data inserted successfully", "id": str(result.inserted_id)})

# 데이터 조회 (READ)
@app.route("/fetch", methods=["GET"])
def fetch_data():
    """MongoDB에서 데이터 조회"""
    data = list(collection.find({}, {"_id": 1, "name": 1, "value": 1}))
    for item in data:
        item["_id"] = str(item["_id"])  # ObjectId를 문자열로 변환
    return jsonify({"data": data})

# 특정 데이터 조회 (READ)
@app.route("/fetch/<id>", methods=["GET"])
def fetch_one(id):
    """특정 ID의 데이터 조회"""
    data = collection.find_one({"_id": ObjectId(id)}, {"_id": 1, "name": 1, "value": 1})
    if data:
        data["_id"] = str(data["_id"])  # ObjectId를 문자열로 변환
        return jsonify(data)
    else:
        return jsonify({"message": "Data not found"}), 404

# 데이터 수정 (UPDATE)
@app.route("/update/<id>", methods=["PUT"])
def update_data(id):
    """MongoDB에서 특정 데이터 수정"""
    data = request.json
    result = collection.update_one({"_id": ObjectId(id)}, {"$set": data})
    if result.matched_count > 0:
        return jsonify({"message": "Data updated successfully"})
    else:
        return jsonify({"message": "Data not found"}), 404

# 데이터 삭제 (DELETE)
@app.route("/delete/<id>", methods=["DELETE"])
def delete_data(id):
    """MongoDB에서 특정 데이터 삭제"""
    result = collection.delete_one({"_id": ObjectId(id)})
    if result.deleted_count > 0:
        return jsonify({"message": "Data deleted successfully"})
    else:
        return jsonify({"message": "Data not found"}), 404

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

4. Gunicorn 또는 Waitress로 실행

Windows에서는 Gunicorn이 기본적으로 실행되지 않을 수 있습니다.

(1) Gunicorn 실행 (Windows 지원)

gunicorn -w 4 -k gevent -b 0.0.0.0:5000 app:app

(2) Gunicorn이 실행되지 않을 경우, Waitress 실행

waitress-serve --host 0.0.0.0 --port 5000 app:app

5. CRUD API 테스트

📌 1. 데이터 삽입 (CREATE)

curl -X POST "http://localhost:5000/insert" -H "Content-Type: application/json" -d '{"name": "Item1", "value": "MongoDB Test"}'

📌 결과 예시

{"message": "Data inserted successfully", "id": "65f23b789b3a1b2c4d5e6f7g"}

📌 2. 모든 데이터 조회 (READ)

curl -X GET "http://localhost:5000/fetch"

📌 결과 예시

{"data": [{"_id": "65f23b789b3a1b2c4d5e6f7g", "name": "Item1", "value": "MongoDB Test"}]}

📌 3. 특정 데이터 조회 (READ)

curl -X GET "http://localhost:5000/fetch/65f23b789b3a1b2c4d5e6f7g"

📌 결과 예시

{"_id": "65f23b789b3a1b2c4d5e6f7g", "name": "Item1", "value": "MongoDB Test"}

📌 4. 데이터 수정 (UPDATE)

curl -X PUT "http://localhost:5000/update/65f23b789b3a1b2c4d5e6f7g" -H "Content-Type: application/json" -d '{"value": "Updated Value"}'

📌 결과 예시

{"message": "Data updated successfully"}

📌 5. 데이터 삭제 (DELETE)

curl -X DELETE "http://localhost:5000/delete/65f23b789b3a1b2c4d5e6f7g"

📌 결과 예시

{"message": "Data deleted successfully"}

6. 성능 테스트 (maxPoolSize 확인)

MongoDB 연결 확인

mongo --eval "db.serverStatus().connections"

부하 테스트 (wrk)

wrk -t4 -c100 -d30s http://localhost:5000/fetch

7. 결론

  • Flask + Gunicorn + MongoDB를 활용한 CRUD API 구현
  • MongoDB 커넥션 풀(maxPoolSize=200)을 설정하여 성능 최적화
  • Gunicorn 또는 Waitress를 사용하여 Windows에서 실행 가능
  • API 엔드포인트를 통해 데이터 입력, 조회, 수정, 삭제 테스트 가능

이제 Windows 환경에서도 MongoDB와 연동된 완벽한 CRUD API를 구축할 수 있습니다! 🚀

🔹 관련 키워드:
Windows Flask MongoDB CRUD, MongoDB Python API, Flask Gunicorn Windows 실행, MongoDB maxPoolSize 설정, MongoDB 데이터 삽입, 수정, 삭제, 조회, Flask MongoDB API 개발, Python MongoDB 연결 최적화

반응형