[python] Flask-RESTful에서 DB 연동하기

Flask-RESTful은 파이썬의 마이크로 웹 프레임워크인 Flask를 기반으로 한 RESTful API 개발을 위한 확장 모듈입니다. 이 모듈을 사용하면 간편하게 RESTful API를 구축할 수 있습니다. 이번 글에서는 Flask-RESTful을 사용하여 데이터베이스를 연동하는 방법에 대해 알아보겠습니다.

데이터베이스 설정

Flask-RESTful에서 데이터베이스를 연동하기 위해서는 먼저 데이터베이스 정보를 설정해야 합니다. 대표적인 데이터베이스인 SQLite를 사용하는 예제 코드를 보겠습니다.

from flask import Flask
from flask_restful import Api
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
api = Api(app)

위 코드는 Flask 애플리케이션을 생성하고 데이터베이스에 대한 설정을 추가한 부분입니다. ‘SQLALCHEMY_DATABASE_URI’ 변수에는 SQLite 데이터베이스의 경로를 설정하고 있습니다.

모델 정의

데이터베이스를 사용하기 위해서는 모델을 먼저 정의해야 합니다. 모델은 데이터베이스 테이블과 대응되는 파이썬 클래스입니다. 예를 들어 사용자 정보를 저장하는 테이블을 정의하는 코드를 보겠습니다.

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(50), nullable=False, unique=True)

    def __repr__(self):
        return f'<User {self.name}>'

위 코드에서는 User 클래스를 정의하고 각 필드를 db.Column 객체로 정의하고 있습니다. 이렇게 정의된 모델은 데이터베이스의 테이블과 매핑되어 사용됩니다.

API 엔드포인트 정의

Flask-RESTful을 사용하여 API 엔드포인트를 정의할 때는 각 엔드포인트에 해당하는 리소스 클래스를 만들어야 합니다. 이 클래스에서는 요청을 처리하고 응답을 반환합니다.

from flask_restful import Resource

class UserResource(Resource):
    def get(self, user_id):
        user = User.query.get_or_404(user_id)
        return {'name': user.name, 'email': user.email}

    def post(self):
        data = request.get_json()
        user = User(name=data['name'], email=data['email'])
        db.session.add(user)
        db.session.commit()
        return {'message': 'User created', 'user_id': user.id}, 201

위 코드에서는 UserResouce 클래스를 정의하고 GET과 POST 메소드를 구현하고 있습니다. GET 메소드에서는 사용자 정보를 조회하고 POST 메소드에서는 새로운 사용자를 생성합니다.

API 핸들링

API 핸들링을 위해 Flask-RESTful에서는 리소스 클래스를 API에 등록해야 합니다. 아래 코드는 UserResource 클래스를 API에 등록하는 예제입니다.

api.add_resource(UserResource, '/user', '/user/<int:user_id>')

위 코드에서 ‘/user’와 ‘/user/' 경로에 대해 UserResource 클래스가 핸들링하도록 등록하고 있습니다.

결론

이상으로 Flask-RESTful을 사용하여 데이터베이스를 연동하는 방법에 대해 알아보았습니다. 데이터베이스 설정, 모델 정의, API 엔드포인트 정의, API 핸들링 등의 단계를 거쳐 간단하게 데이터베이스를 활용한 RESTful API를 개발할 수 있습니다. Flask-RESTful은 다양한 데이터베이스와 호환되는 SQLAlchemy와 함께 사용할 수 있어 편리한 데이터베이스 연동 기능을 제공합니다.