FastAPI: Python 기반의 고성능 API 서버 개발로 REST와 GraphQL 지원하기
FastAPI는 Python으로 API 서버를 개발할 때 고려해야 할 가장 인기 있는 프레임워크 중 하나로, 고성능, 유연성, 그리고 사용 편의성이 특징입니다. 특히 RESTful API와 GraphQL을 모두 지원하기 때문에 현대 웹 애플리케이션 개발에서 중요한 역할을 하고 있습니다. 이 글에서는 FastAPI를 처음 사용하는 개발자들을 위해 기본적인 사용법과 특징을 쉽게 설명하겠습니다.
1. FastAPI란 무엇인가?
FastAPI는 Python 3.6+를 기반으로 작성된 비동기 웹 프레임워크입니다. 주요 특징은 다음과 같습니다:
- 빠른 성능: FastAPI는 ASGI(Asynchronous Server Gateway Interface)를 기반으로 하고, Starlette과 Pydantic 위에서 동작하여 매우 높은 성능을 제공합니다.
- 자동 문서화: OpenAPI와 JSON Schema를 활용하여 API 문서를 자동으로 생성합니다.
- 유효성 검사: Pydantic을 사용해 입력 데이터와 출력 데이터의 유효성을 쉽게 검사할 수 있습니다.
- REST와 GraphQL 지원: RESTful API와 GraphQL 모두를 간단히 설정할 수 있습니다.
2. FastAPI 설치 및 첫 번째 프로젝트 시작하기
FastAPI를 시작하려면 Python이 설치된 환경에서 아래의 명령어로 FastAPI와 ASGI 서버(Uvicorn)를 설치합니다.
pip install fastapi uvicorn
설치 후, 아래와 같은 간단한 "Hello, World!" 예제를
작성해보세요.
# 파일명: main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
서버 실행:
uvicorn main:app --reload
이제 브라우저에서 http://127.0.0.1:8000
로 접속하면
JSON 응답이 나타납니다. /docs
에 접속하면 FastAPI가
자동 생성한 Swagger UI 문서를 확인할 수 있습니다.
3. FastAPI의 주요 개념
(1) 경로 동작(Path Operation)
FastAPI에서 API의 각 엔드포인트는 "경로 동작"이라고 불립니다. 아래와 같이 HTTP 메서드(GET, POST 등)를 데코레이터로 지정합니다.
@app.post("/users/")
async def create_user(name: str, age: int):
return {"name": name, "age": age}
(2) 데이터 유효성 검사
Pydantic을 사용하여 데이터 스키마를 정의하면, FastAPI는 요청 데이터를 자동으로 검사하고 오류를 처리합니다.
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
@app.post("/users/")
async def create_user(user: User):
return {"name": user.name, "age": user.age}
(3) 비동기 처리
FastAPI는 비동기 작업을 자연스럽게 지원합니다. 예를 들어, 데이터베이스나
외부 API와 통신할 때 async
/await
를 활용할 수 있습니다.
4. REST API와 GraphQL 지원
REST API
FastAPI는 RESTful API를 설계할 때 기본적인 CRUD(Create, Read, Update, Delete)를 빠르게 구현할 수 있는 도구를 제공합니다.
GraphQL
FastAPI는 GraphQL을 구현하기 위해
graphene
라이브러리를 사용할 수 있습니다.
pip install graphene
예제 코드:
from fastapi import FastAPI
from starlette.graphql import GraphQLApp
import graphene
class Query(graphene.ObjectType):
hello = graphene.String(name=graphene.String(default_value="World"))
def resolve_hello(self, info, name):
return f"Hello {name}!"
app = FastAPI()
app.add_route("/graphql", GraphQLApp(schema=graphene.Schema(query=Query)))
5. FastAPI의 장단점
장점
- Python 타입 힌트를 활용한 직관적 코드 작성
- 비동기 지원으로 높은 처리 성능 제공
- OpenAPI 기반의 문서 자동 생성
- 유효성 검사 내장
단점
- Flask와 Django에 비해 상대적으로 짧은 생태계 및 커뮤니티
- 높은 성능을 활용하려면 ASGI 서버에 대한 이해가 필요
6. FastAPI를 활용한 다음 단계
FastAPI로 더 복잡한 프로젝트를 만들고 싶다면 아래 항목들을 학습해보세요:
- 데이터베이스 연동 (예: SQLAlchemy, Tortoise ORM)
- OAuth2 인증 구현
- WebSocket 지원
- 배포 (Docker, Kubernetes 등)
FastAPI는 간단한 프로젝트에서부터 대규모 서비스까지 확장 가능한 훌륭한 선택지입니다. REST와 GraphQL 모두를 지원하며, 개발 속도를 높이고 유지보수를 간소화할 수 있습니다.
Comments
Post a Comment