
안녕하세요! 그레이 해커 월횽입니다. 오늘은 Flask로 구축한 RESTful API와 데이터베이스를 연동해 실제 데이터를 저장하고 불러오는 방법을 알아보겠습니다. 데이터베이스 연동을 통해 API를 더 실용적이고 강력하게 만들 수 있습니다.
1. 데이터베이스 설정과 SQLAlchemy 설치
Flask에서는 SQLAlchemy를 사용해 다양한 데이터베이스와 연동할 수 있습니다. 이 라이브러리는 ORM(Object Relational Mapping)을 지원하여 Python 객체와 데이터베이스를 쉽게 연결해 줍니다.
pip install Flask-SQLAlchemy
2. 데이터베이스 구성하기
이번 강의에서는 SQLite를 사용하여 간단한 사용자 데이터를 관리하는 API를 만들어 보겠습니다. 우선 Flask와 SQLAlchemy를 설정하는 코드를 작성합니다.
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를 설정할 수 있습니다.
# 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 애플리케이션의 성능 최적화와 보안 강화 기법에 대해 다루어 보겠습니다.
- 이전 수업 목록
































'프로그래밍 > Python' 카테고리의 다른 글
[Python 강의] 35강 - Flask 애플리케이션의 확장성과 테스트 방법 (4) | 2024.11.15 |
---|---|
[Python 강의] 34강 - Flask 애플리케이션의 성능 최적화와 보안 강화 기법 (1) | 2024.11.14 |
[Python 강의] 32강 - Flask 기반 RESTful API 구축과 활용 (0) | 2024.11.12 |
[Python 강의] 31강 - Flask로 만든 애플리케이션을 배포하고 최적화하는 방법 (1) | 2024.11.11 |
[Python 강의] 30강 - Flask와 프론트엔드 연동을 통한 완성도 높은 웹 애플리케이션 구축 (1) | 2024.11.08 |