본문 바로가기
나의 일/파이썬

파이썬으로 api 서버 만들기

by welovex2 2024. 11. 15.


파이썬으로 API 서버를 만드는 것은 매우 일반적이고 다양한 프레임워크를 통해 쉽게 구현할 수 있습니다. 가장 많이 사용되는 프레임워크는 FlaskFastAPI입니다. 두 프레임워크 모두 가벼우며, 빠르게 API 서버를 구축할 수 있도록 설계되었습니다.


 

1. Flask를 사용한 간단한 API 서버

Flask는 가벼운 프레임워크로, 빠르게 RESTful API를 만들 수 있습니다.

Flask 설치:

pip install flask
 

간단한 Flask API 예제:

from flask import Flask, jsonify, request

app = Flask(__name__)

# 기본 경로에 대한 간단한 응답
@app.route('/')
def home():
    return "Hello, this is a Flask API!"

# /data 경로에 대한 GET 요청 처리
@app.route('/data', methods=['GET'])
def get_data():
    return jsonify({"message": "This is a sample response", "status": "success"})

# /data 경로에 대한 POST 요청 처리
@app.route('/data', methods=['POST'])
def post_data():
    data = request.json  # 클라이언트로부터 JSON 데이터를 받음
    return jsonify({"received_data": data, "status": "received"})

if __name__ == '__main__':
    app.run(debug=True)
 
  • app.run(debug=True): 서버가 localhost:5000에서 실행되며, debug=True로 설정하면 코드가 변경될 때 자동으로 서버를 재시작합니다.

 

2. FastAPI를 사용한 API 서버

 

FastAPI는 성능이 우수하고, 데이터 검증 및 문서화 기능이 자동으로 제공됩니다. 비동기 기능과 함께 매우 빠릅니다.

FastAPI 설치:

pip install fastapi uvicorn
 

간단한 FastAPI API 예제:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# 데이터 모델 정의
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

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

@app.post("/items/")
def create_item(item: Item):
    return {"item": item, "status": "item received"}

# 서버 실행
# 터미널에서 아래 명령어를 실행하여 FastAPI 서버 실행
# uvicorn filename:app --reload
  • 자동 문서화: FastAPI 서버를 실행하고 /docs로 접속하면 자동으로 생성된 API 문서를 확인할 수 있습니다.
  • 데이터 검증: pydantic을 사용하여 데이터 모델을 정의하고 검증합니다.

 

Flask와 FastAPI 비교:

  • Flask:
    • 배우기 쉽고 간단한 프로젝트에 적합
    • 커스텀 개발과 다양한 확장 기능을 통해 다양한 요구사항을 지원
  • FastAPI:
    • 더 빠르고 비동기 코드에 최적화
    • 자동 데이터 검증 및 문서화 기능이 내장
    • 큰 프로젝트나 성능이 중요한 프로젝트에 적합

결론

파이썬으로 API 서버를 구축하는 것은 FlaskFastAPI를 사용하면 쉽게 구현할 수 있습니다. 프로젝트의 복잡성, 성능 요구사항, 학습 곡선 등을 고려하여 적절한 프레임워크를 선택하면 됩니다.

728x90