본문 바로가기

언어/Python

[ Python ] REST API 기능 제공하기

반응형

Python에서 REST API 서비스를 제공하려면 보통 FastAPI 또는 Flask 같은 웹 프레임워크를 사용합니다. 각각의 특징과 사용법을 간략히 설명하겠습니다.


1. FastAPI (추천)

FastAPI는 비동기 방식(Async)을 지원하며 속도가 빠르고 자동 문서화(Swagger UI, ReDoc)를 제공하는 강력한 프레임워크입니다.

🔹 설치

pip install fastapi uvicorn

🔹 기본 예제

app.py에 저장합니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI!"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

127.0.0.1:8000:::8000(IPv6) 두 개의 포트를 동시에 열려면, 서버를 실행할 때 IPv4와 IPv6를 모두 바인딩해야 합니다.

🔹 실행 Python uvicorn (FastAPI / Starlette)

만약 FastAPI 같은 웹 프레임워크를 사용하고 있다면 uvicorn 실행 시 --host 옵션을 0.0.0.0 또는 ::로 설정하세요.

uvicorn app:app --host 0.0.0.0 --port 8000

또는

uvicorn app:app --host :: --port 8000

이렇게 하면 IPv4(0.0.0.0:8000)와 IPv6(:::8000) 모두에서 수신할 수 있습니다.


👉 실행 후 http://127.0.0.1:8000/docs에서 API 문서를 확인할 수 있습니다.
👉 실행 후 http://ipaddress:8000/로 기능을 실행 할 수 있습니다.


2. Flask

Flask는 간단한 REST API를 구축할 때 많이 사용됩니다.

🔹 설치

pip install flask

🔹 기본 예제

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/", methods=["GET"])
def home():
    return jsonify({"message": "Hello, Flask!"})

@app.route("/items/<int:item_id>", methods=["GET"])
def get_item(item_id):
    q = request.args.get("q")
    return jsonify({"item_id": item_id, "q": q})

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

👉 실행 후 http://127.0.0.1:5000/items/1?q=test 요청을 보내면 JSON 응답을 받습니다.


3. Django REST Framework (DRF)

Django 기반으로 RESTful API를 만들 때 유용합니다. 기존 Django 프로젝트와 함께 사용하면 좋습니다.

🔹 설치

pip install django djangorestframework

🔹 기본 예제 (Django 프로젝트에서 사용)

  1. Django 프로젝트 생성
   django-admin startproject myproject
   cd myproject
  1. 앱 생성
   python manage.py startapp api
  1. settings.py 수정
   INSTALLED_APPS = [
       'rest_framework',
       'api',
   ]
  1. api/views.py에 간단한 API 추가
   from rest_framework.response import Response
   from rest_framework.decorators import api_view

   @api_view(["GET"])
   def hello_world(request):
       return Response({"message": "Hello, Django REST Framework!"})
  1. api/urls.py에 경로 등록
   from django.urls import path
   from .views import hello_world

   urlpatterns = [
       path('hello/', hello_world),
   ]
  1. myproject/urls.py 수정
   from django.urls import path, include

   urlpatterns = [
       path('api/', include('api.urls')),
   ]
  1. 서버 실행
   python manage.py runserver

👉 실행 후 http://127.0.0.1:8000/api/hello/ 요청을 보내면 JSON 응답을 받습니다.


4. Which One Should You Use?

Framework 속도 비동기 지원 자동 문서화 사용 용이성 추천 사용 사례
FastAPI 🚀 빠름 ✅ O ✅ O ⭐️ 쉬움 최신 API 서비스, Microservices
Flask 🔸 보통 ❌ X ❌ X ⭐️ 쉬움 간단한 REST API
Django DRF 🐢 느림 ❌ X ✅ O 🟡 중간 Django 기반 프로젝트

🔹 추천

  • FastAPI → 성능이 중요하거나 비동기 지원이 필요할 때
  • Flask → 간단한 API 개발
  • Django REST Framework → Django 프로젝트와 함께 사용할 때

어떤 프레임워크를 사용할지 고민 중이라면, FastAPI를 추천합니다! 🚀

반응형