Skip to content

FastAPI: Python 웹 개발 변화시키기

Updated on

Django, Flask, Falcon 등 강력한 프레임워크 덕분에 Python은 웹 애플리케이션 개발을 위한 대표적인 언어 중 하나가 되었습니다. 머신 러닝에서 핵심적인 언어로 인해 모델을 패키징하고 서비스로 노출하는 편리한 도구로도 사용됩니다. 그러나 상대적으로 새로운 FastAPI라는 웹 프레임워크가 이 분야를 변화시키고 있습니다. FastAPI는 그 전신들을 참고하여 개선하고 발전시키면서 엄격하게 기능을 규정합니다.

FastAPI: Python 웹 프레임워크의 새로운 패러다임

새로운 참여자인 FastAPI는 기능과 개발자의 자유 사이에서 놀라운 균형을 이루어 Python 커뮤니티에서 자신의 공을 드높게 세우고 있습니다. Flask의 철학과 유사하지만 보다 건강한 균형을 유지합니다. 이 새로운 웹 프레임워크는 그 전신들의 강점을 제공하면서 동시에 단점들을 보완합니다.

FastAPI의 가장 강력한 장점 중 하나는 직관적이면서도 효과적인 인터페이스입니다. Pydantic과 같은 데이터 유효성 검사에 사용되는 강력한 Python 라이브러리를 활용하여 스키마를 정의하는 혁신적인 방법은 개발자의 작업 부하를 줄이는 데 큰 역할을 합니다. 이 기능은 자동 오류 처리 기능과 결합하여 FastAPI를 개발자 친화적인 프레임워크로 만듭니다.

from fastapi import FastAPI
from pydantic import BaseModel
 
class User(BaseModel):
 email: str
 password: str
 
app = FastAPI()
 
@app.post("/login")
def login(user: User):
 # 처리하는 로그인
 return {"msg": "로그인 성공"}

이 간단한 예제는 FastAPI의 직관성을 나타냅니다. Uvicorn으로 FastAPI 앱을 시작하면 빠른 시간 내에 요청 처리가 가능합니다.

FastAPI의 비동기적 이점

FastAPI는 Python WSGI 웹 프레임워크의 큰 단점 중 하나인 비동기 요청 처리 능력 부족을 해결함으로써 이 분야의 선두를 질주하고 있습니다. FastAPI는 Python의 ASGI를 활용하여 Node.js나 Go와 같은 웹 프레임워크와 성능을 동등하게 유지할 수 있습니다. 개발자는 'async' 키워드를 사용하여 엔드포인트를 간단하게 선언하여 앱의 성능을 향상시킬 수 있습니다.

@app.post("/")
async def endpoint():
 # 비동기 함수
 return {"msg": "FastAPI는 놀라운 것입니다!"}

FastAPI로 간단한 종속성 주입

FastAPI의 혁신적인 접근 방식 덕분에 종속성 주입이 더욱 간단해졌습니다. FastAPI는 종속성을 쉽게 관리할 수 있는 내장 주입 시스템을 제공합니다. FastAPI는 종속성의 실행 시간 평가로 테스트를 단순화하고 사용자 인증과 같은 프로시저를 쉽게 수행할 수 있도록 정교한 체크를 가능하게 합니다.

from fastapi import FastAPI, Depends
from pydantic import BaseModel
 
class Comment(BaseModel):
 username: str
 content: str
 
app = FastAPI()
 
```데이터베이스 = {
 "articles": {
 1: {
 "title": "지금 FastAPI를 사용해야 하는 이유 상위 3가지",
 "comments": []
 }
 }
}
 
def get_database():
 return database
 
@app.post("/articles/{article_id}/comments")
def post_comment(article_id: int, comment: Comment, database = Depends(get_database)):
 database["articles"][article_id]["comments"].append(comment)
 return {"msg": "댓글이 게시되었습니다!"}
 
## 쉬운 데이터베이스 통합
 
FastAPI는 데이터베이스 선택을 제한하지 않습니다. SQL, MongoDB 또는 Redis 일 수 있지만, 일부 프레임 워크(Django와 같은)와는 달리 원하는 데이터베이스를 깔끔한 방식으로 기술 스택에 추가할 수 있습니다. FastAPI는 통합을 쉽게하여 데이터베이스 선택을 프레임워크보다 더 많은 작업을 수행하게 만드는 것이 아니라 데이터베이스가 작업량을 결정하도록 합니다.
 
```python
from fastapi import FastAPI, Depends
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
 
engine = create_engine("sqlite:///./database.db")
Session = sessionmaker(bind=engine)
 
def get_db():
 return Session()
 
app = FastAPI()
 
@app.get("/")
def an_endpoint_using_sql(db = Depends(get_db)):
 # SQLAlchemy in action
 return {"msg": "작업이 성공적으로 완료되었습니다!"}

FastAPI Github에 접속하려면 여기 (opens in a new tab)를 클릭하세요.

GraphQL과 별도의 뛰어난 문서

FastAPI와 GraphQL 호환성도 두드러진 기능 중 하나입니다. 복잡한 데이터 모델을 다룰 때 REST는 어려움을 불러 일으킬 수 있습니다. 여기서 FastAPI와 Graphene과 완벽하게 통합된 GraphQL이 도움을 줄 수 있으며, 프론트 엔드 수정을 줄여 엔드포인트 스키마를 업데이트해야 하는 상황을 피할 수 있습니다.

FastAPI에는 문서 품질도 뛰어난 것으로 알려져 있어 Django나 Flask보다 어린 나이지만 문서 품질에서 비교할만한 것 같습니다.

결론

요약하자면, 머신러닝 모델에 대한 빠르고 가벼운 프레임워크가 필요한 경우 또는 좀 더 견고한 것이 필요한 경우 FastAPI는 이러한 작업에 놀라운 성능을 발휘합니다. FastAPI는 단순성, 다양성 및 성능이 있는 프로그래밍으로 Python 개발자에게 필수적인 프레임워크입니다.