프로그래밍/Python

[Python 강의] 33강 - Flask 기반 RESTful API와 데이터베이스 연동

월횽 2024. 11. 13. 06:30
728x90
반응형
SMALL

안녕하세요! 그레이 해커 월횽입니다. 오늘은 Flask로 구축한 RESTful API와 데이터베이스를 연동해 실제 데이터를 저장하고 불러오는 방법을 알아보겠습니다. 데이터베이스 연동을 통해 API를 더 실용적이고 강력하게 만들 수 있습니다.

 

1. 데이터베이스 설정과 SQLAlchemy 설치

Flask에서는 SQLAlchemy를 사용해 다양한 데이터베이스와 연동할 수 있습니다. 이 라이브러리는 ORM(Object Relational Mapping)을 지원하여 Python 객체와 데이터베이스를 쉽게 연결해 줍니다.

pip install Flask-SQLAlchemy

 

 

2. 데이터베이스 구성하기

이번 강의에서는 SQLite를 사용하여 간단한 사용자 데이터를 관리하는 API를 만들어 보겠습니다. 우선 Flask와 SQLAlchemy를 설정하는 코드를 작성합니다.

728x90
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

 

 

3. 데이터 모델 정의

사용자 데이터를 저장할 User 모델을 생성합니다.

반응형
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    age = db.Column(db.Integer, nullable=False)

    def to_dict(self):
        return {"id": self.id, "name": self.name, "age": self.age}

# 데이터베이스 초기화 (첫 실행 시 사용)
with app.app_context():
    db.create_all()

 

to_dict 메서드는 객체를 JSON 형태로 반환하여 API 응답으로 사용하기에 적합합니다.

 

4. API 엔드포인트 만들기

이제 CRUD 기능을 갖춘 API 엔드포인트를 생성하겠습니다.

# GET - 전체 사용자 조회
@app.route('/api/users', methods=['GET'])
def get_users():
    users = User.query.all()
    return jsonify([user.to_dict() for user in users])

# GET - 특정 사용자 조회
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = User.query.get(user_id)
    return jsonify(user.to_dict()) if user else ('', 404)

# POST - 새로운 사용자 추가
@app.route('/api/users', methods=['POST'])
def add_user():
    data = request.json
    new_user = User(name=data['name'], age=data['age'])
    db.session.add(new_user)
    db.session.commit()
    return jsonify(new_user.to_dict()), 201

# PUT - 사용자 정보 수정
@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    user = User.query.get(user_id)
    if user:
        data = request.json
        user.name = data['name']
        user.age = data['age']
        db.session.commit()
        return jsonify(user.to_dict())
    return ('', 404)

# DELETE - 사용자 삭제
@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    user = User.query.get(user_id)
    if user:
        db.session.delete(user)
        db.session.commit()
        return ('', 204)
    return ('', 404)

if __name__ == '__main__':
    app.run(debug=True)

 

 

5. Postman을 통한 API 테스트

이제 API가 잘 작동하는지 Postman을 통해 테스트해보세요.

(1) GET 요청: /api/users로 전체 사용자 정보를 조회합니다.
(2) POST 요청: /api/users에 사용자 정보를 JSON 형식으로 전송하여 새로운 사용자를 추가합니다.
(3) PUT 요청: /api/users/<user_id>에 수정할 정보를 전송하여 사용자 정보를 업데이트합니다.
(4) DELETE 요청: /api/users/<user_id>로 사용자 정보를 삭제합니다.

 

6. 환경별 설정 관리

개발과 배포 환경에 따라 데이터베이스 설정을 다르게 관리하는 것이 좋습니다. 예를 들어, 환경 변수와 config.py 파일을 사용하여 환경별 URI를 설정할 수 있습니다.

SMALL
# config.py
import os

class Config:
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class DevelopmentConfig(Config):
    SQLALCHEMY_DATABASE_URI = 'sqlite:///dev_users.db'

class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL', 'sqlite:///prod_users.db')

 

오늘은 Flask와 데이터베이스 연동을 통한 RESTful API 구축 방법을 알아보았습니다. 다음 강의에서는 Flask 애플리케이션의 성능 최적화와 보안 강화 기법에 대해 다루어 보겠습니다.

 

 

 

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST