Python 샘플 HTTP CRUD with FastAPI와 Flask

발행: (2026년 3월 4일 오전 08:04 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

위의 링크에 있는 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. (코드 블록이나 URL은 그대로 유지됩니다.)

소개

파이썬 웹 개발 세계에서 CRUD(Create, Read, Update, Delete)는 거의 모든 애플리케이션의 기본이자 핵심입니다. 초보자에게 첫 번째 장벽은 로직이 아니라 도구입니다. 10년 넘게 업계 표준으로 자리 잡은 신뢰할 수 있는 “마이크로‑프레임워크” Flask를 선택할까요? 아니면 개발 세계를 강타하고 있는 고성능 신예 FastAPI를 선택할까요?

가장 큰 차이는 보통 실행 방식에 있습니다. FastAPI는 비동기 기능을 처리하기 위해 uvicorn 같은 외부 서버가 필요하지만, Flask는 빠른 로컬 개발을 위해 자체 내장 서버를 제공합니다.

FastAPI 예제 (fastapi_server.py)

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Dict

app = FastAPI()

# Data Schema
class User(BaseModel):
    name: str
    email: str

# In-memory "Database"
db: Dict[int, User] = {}

@app.post("/users/{user_id}")
def create_user(user_id: int, user: User):
    if user_id in db:
        raise HTTPException(status_code=400, detail="User already exists")
    db[user_id] = user
    return {"status": "Created", "data": user}

@app.get("/users/{user_id}")
def read_user(user_id: int):
    if user_id not in db:
        raise HTTPException(status_code=404, detail="User not found")
    return db[user_id]

@app.put("/users/{user_id}")
def update_user(user_id: int, user: User):
    if user_id not in db:
        raise HTTPException(status_code=404, detail="User not found")
    db[user_id] = user
    return {"status": "Updated", "data": user}

@app.delete("/users/{user_id}")
def delete_user(user_id: int):
    if user_id not in db:
        raise HTTPException(status_code=404, detail="User not found")
    del db[user_id]
    return {"status": "Deleted"}

# To run: uvicorn fastapi_server:app --reload

FastAPI 테스트 (test_fastapi.py)

import requests

BASE = "http://127.0.0.1:8000/users"

# POST
print("POST:", requests.post(f"{BASE}/1", json={"name": "Alice", "email": "alice@web.com"}).json())
# GET
print("GET:", requests.get(f"{BASE}/1").json())
# PUT
print("PUT:", requests.put(f"{BASE}/1", json={"name": "Alice Smith", "email": "alice@web.com"}).json())
# DELETE
print("DELETE:", requests.delete(f"{BASE}/1").json())

Flask 예제 (flask_server.py)

from flask import Flask, request, jsonify

app = Flask(__name__)

# In-memory "Database"
db = {}

@app.route('/users/', methods=['POST'])
def create_user(user_id):
    if user_id in db:
        return jsonify({"error": "Exists"}), 400
    db[user_id] = request.json
    return jsonify({"status": "Created", "data": db[user_id]}), 201

@app.route('/users/', methods=['GET'])
def read_user(user_id):
    user = db.get(user_id)
    return jsonify(user) if user else (jsonify({"error": "Not found"}), 404)

@app.route('/users/', methods=['PUT'])
def update_user(user_id):
    if user_id not in db:
        return jsonify({"error": "Not found"}), 404
    db[user_id] = request.json
    return jsonify({"status": "Updated", "data": db[user_id]})

@app.route('/users/', methods=['DELETE'])
def delete_user(user_id):
    if user_id in db:
        del db[user_id]
        return jsonify({"status": "Deleted"})
    return jsonify({"error": "Not found"}), 404

if __name__ == '__main__':
    # Built-in server (No uvicorn needed)
    app.run(port=5000, debug=True)

Flask 테스트 (test_flask.py)

import requests

BASE = "http://127.0.0.1:5000/users"

# POST
print("POST:", requests.post(f"{BASE}/1", json={"name": "Bob", "email": "bob@web.com"}).json())
# GET
print("GET:", requests.get(f"{BASE}/1").json())
# PUT
print("PUT:", requests.put(f"{BASE}/1", json={"name": "Bob Jones", "email": "bob@web.com"}).json())
# DELETE
print("DELETE:", requests.delete(f"{BASE}/1").json())

어느 것을 선택해야 할까요?

두 가지를 모두 직접 사용해 보았으니, 선택은 프로젝트 목표에 따라 달라집니다:

  • Flask 선택: 코드 한 줄 한 줄을 완전히 제어하고, python app.py 하나의 명령으로 앱을 실행하고 싶을 때, 간단하고 가벼운 설정을 원한다면.
  • FastAPI 선택: 확장이 필요한 현대적인 애플리케이션을 만들고 있거나, 자동 데이터 검증과 즉시 인터랙티브한 문서를 좋아한다면.
0 조회
Back to Blog

관련 글

더 보기 »

구리지 않은 시맨틱 무효화

캐싱 문제 웹 애플리케이션을 어느 정도 기간 동안 작업해 본 사람이라면 캐싱에 대한 상황을 잘 알 것입니다. 캐시를 추가하면 모든 것이 빨라지고, 그 다음에 누군가…

현대 웹 앱에서 OTP 인증 시작하기

왜 OTP 인증이 중요한가 - 로그인 또는 회원가입 시 사용자 신원을 확인합니다 - 가짜 계정 생성을 방지합니다 - 추가적인 보안 계층을 제공합니다 - 일반적으로 사용됩니다

27일차 #100DaysOfCode — REST API

당신이 인식하든 못하든, 앱이 요청을 보내고 응답을 받을 때마다 이미 REST API를 사용하고 있습니다. 당신의 날씨 앱, 소셜 피드…