RESTful API와 PyMongo 통합 방법
RESTful API와 PyMongo 통합 방법
RESTful API와 PyMongo 통합 방법
RESTful API는 웹 애플리케이션에서 자원을 생성, 읽기, 업데이트, 삭제(CRUD)하는 데 사용되는 HTTP 요청 방식을 따르는 아키텍처 스타일입니다. MongoDB는 NoSQL 데이터베이스로, 이를 Python에서 다루기 위해 PyMongo를 사용합니다. 이 글에서는 Flask 프레임워크와 PyMongo를 사용해 RESTful API와 MongoDB를 통합하는 방법을 단계별로 설명하겠습니다.
1. 필요한 라이브러리 설치
우선, Flask와 PyMongo를 설치해야 합니다. Flask는 Python의 마이크로 웹 프레임워크이고, PyMongo는 MongoDB와 상호작용할 수 있는 라이브러리입니다.
pip install Flask
pip install pymongo
이 외에도 요청(Request)과 응답(Response)을 처리하기 위한 Flask-RESTful
라이브러리를 사용할 수 있습니다.
pip install Flask-RESTful
2. Flask 애플리케이션 설정
Flask 애플리케이션을 설정하는 기본적인 구조는 아래와 같습니다. 이를 통해 간단한 웹 서버를 만들 수 있습니다.
from flask import Flask, jsonify, request
from flask_pymongo import PyMongo
= Flask(__name__)
app
# MongoDB 설정
"MONGO_URI"] = "mongodb://localhost:27017/mydatabase"
app.config[= PyMongo(app)
mongo
@app.route('/')
def index():
return "Welcome to the Flask-PyMongo API!"
if __name__ == '__main__':
=True) app.run(debug
위 코드에서 MONGO_URI
는 MongoDB 서버의 주소를 설정하는 부분입니다. MongoDB는 기본적으로 localhost:27017
에서 실행되며, mydatabase
는 사용할 데이터베이스 이름입니다.
3. 데이터 생성 (POST 요청)
RESTful API에서 데이터를 생성하는 것은 HTTP POST
요청을 사용하여 수행됩니다. 사용자가 요청한 데이터를 MongoDB에 저장하는 예시는 다음과 같습니다.
@app.route('/add', methods=['POST'])
def add_user():
= request.get_json() # JSON 데이터 받기
user_data = user_data.get('name')
name = user_data.get('email')
email
if name and email:
'name': name, 'email': email})
mongo.db.users.insert_one({return jsonify({'message': 'User added successfully!'}), 201
else:
return jsonify({'error': 'Missing data!'}), 400
request.get_json()
을 통해 클라이언트로부터 JSON 데이터를 받습니다.- 받은 데이터를 MongoDB의
users
컬렉션에 삽입합니다. - 성공적으로 데이터를 삽입한 경우,
201
상태 코드를 반환합니다.
4. 데이터 읽기 (GET 요청)
HTTP GET
요청을 사용하여 MongoDB에서 데이터를 읽는 방법을 구현합니다. 모든 사용자의 데이터를 가져오는 API는 다음과 같습니다.
@app.route('/users', methods=['GET'])
def get_users():
= mongo.db.users.find()
users = []
user_list for user in users:
'name': user['name'], 'email': user['email']})
user_list.append({
return jsonify(user_list), 200
mongo.db.users.find()
를 사용해users
컬렉션의 모든 데이터를 검색합니다.- 검색된 데이터를 JSON 형식으로 변환하여 클라이언트에게 반환합니다.
5. 데이터 업데이트 (PUT 요청)
데이터를 업데이트하는 것은 HTTP PUT
요청을 사용하여 이루어집니다. 예를 들어, 특정 사용자의 이메일을 업데이트하는 API는 다음과 같습니다.
@app.route('/update/<user_id>', methods=['PUT'])
def update_user(user_id):
= request.get_json()
user_data = user_data.get('email')
new_email
if new_email:
'_id': ObjectId(user_id)}, {'$set': {'email': new_email}})
mongo.db.users.update_one({return jsonify({'message': 'User updated successfully!'}), 200
else:
return jsonify({'error': 'Missing email!'}), 400
update_one
을 사용해 특정 사용자의 이메일 필드를 업데이트합니다.ObjectId
는 MongoDB의 고유한_id
필드를 처리하기 위한 유틸리티입니다.
6. 데이터 삭제 (DELETE 요청)
HTTP DELETE
요청을 사용하여 데이터를 삭제할 수 있습니다. 특정 사용자를 삭제하는 API는 다음과 같이 구현할 수 있습니다.
@app.route('/delete/<user_id>', methods=['DELETE'])
def delete_user(user_id):
'_id': ObjectId(user_id)})
mongo.db.users.delete_one({return jsonify({'message': 'User deleted successfully!'}), 200
delete_one
을 사용해 MongoDB에서 특정_id
를 가진 문서를 삭제합니다.
RESTful API와 MongoDB 통합 작업 요약
- Flask로 API 구축: Flask를 사용해 간단한 API 서버를 설정하고 각 엔드포인트에 대해 CRUD 작업을 정의합니다.
- PyMongo를 사용해 MongoDB와 연결: Flask에서 PyMongo 라이브러리를 사용해 MongoDB와의 연결을 설정하고, 데이터를 저장하고 관리합니다.
- CRUD 작업 구현: RESTful API의 기본인 CRUD 작업(생성, 읽기, 업데이트, 삭제)을 각각 POST, GET, PUT, DELETE 요청으로 구현합니다.
최종 코드 예시
from flask import Flask, jsonify, request
from flask_pymongo import PyMongo
from bson.objectid import ObjectId
= Flask(__name__)
app
"MONGO_URI"] = "mongodb://localhost:27017/mydatabase"
app.config[= PyMongo(app)
mongo
@app.route('/')
def index():
return "Welcome to the Flask-PyMongo API!"
@app.route('/add', methods=['POST'])
def add_user():
= request.get_json()
user_data = user_data.get('name')
name = user_data.get('email')
email if name and email:
'name': name, 'email': email})
mongo.db.users.insert_one({return jsonify({'message': 'User added successfully!'}), 201
else:
return jsonify({'error': 'Missing data!'}), 400
@app.route('/users', methods=['GET'])
def get_users():
= mongo.db.users.find()
users = [{'name': user['name'], 'email': user['email']} for user in users]
user_list return jsonify(user_list), 200
@app.route('/update/<user_id>', methods=['PUT'])
def update_user(user_id):
= request.get_json()
user_data = user_data.get('email')
new_email if new_email:
'_id': ObjectId(user_id)}, {'$set': {'email': new_email}})
mongo.db.users.update_one({return jsonify({'message': 'User updated successfully!'}), 200
else:
return jsonify({'error': 'Missing email!'}), 400
@app.route('/delete/<user_id>', methods=['DELETE'])
def delete_user(user_id):
'_id': ObjectId(user_id)})
mongo.db.users.delete_one({return jsonify({'message': 'User deleted successfully!'}), 200
if __name__ == '__main__':
=True) app.run(debug