오늘은 fastAPI에 대해 알아보도록 하겠다.
1. 개요
FastAPI의 이론적인 개념은 다음과 같다.
fastAPI란?
파이썬 3.6부터 제공되는 트랜디하고 높은 성능을 가진 파이썬 프레임워크
위에서 알 수 있듯이 FastAPI는 파이썬 프레임워크이다.
우리가 알고 있는 기존에 가장 대중적으로 사용되고 있던 파이썬 프레임워크는 Django, Flask이다. 비교적 가벼운 웹개발이라면 Flask를 사용했고 조금 더 볼륨있는 프로젝트라면 Django를 사용했다.
하지만, 이 쌍둥이 타워 사이에 "조작법은 단순하면서도 성능적으로는 우세함을 보장한다"는 FastAPI라는 녀석이 비집고 들어온 것이다.
FastAPI의 특징에 대해 정리해본다면 아래와 같다.
FastAPI 특징
- API 문서 자동 생성 (Swagger와 ReDoc 스타일 동일)
- 의존성 주입 위주의 설계를 통한 DB 등에 대한 관리 편리
- 비동기 동작으로 빠른 성능 보장
- Pydantic을 사용한 Validation 체크
- 뛰어난 공식문서 가이드
위와 같은 특징을 가진 FastAPI는 실제로도 Django의 git star수의 절반에 가까운 수를 2년여만에 받으며 개발자들 사이에서도 호응을 받고 있다는 것을 다시 한번 검증하였다.
2. FastAPI 사용하기
FastAPI를 사용하는 방법에 대해서도 간단히 알아보도록 하자.
우선, 당연하게도 FastAPI를 설치부터 진행해야 한다.
- fastapi 설치
pip3 install fastapi - uvicorn 설치
pip3 install uvicorn
pip3 install uvicorn[standard]
uvicorn ?
uvicorn은 async/await을 기반한 비동기 프로그래밍 지원, 퍼포먼스가 가장 좋다고 알려진 ASGI이다.
본 페이지 내, 실행 결과에 대해 확인하기 위한 용도로 설치
그렇다면, 사용하기 위한 준비 단계는 모두 끝났으니 실제로 간단한 코드를 짜보도록 하자!
# main.py
from fastapi import FastAPI # FastAPI import
app = FastAPI()
@app.get("/")
def printHello():
return "Hello World"
@app.get("/json")
def printJson():
return {
"Number" : 12345
}
class Post(BaseModel):
title: str
content: str
@app.post("/posts"):
def createContents(post : Post):
title = post.title
content = post.content
printHello에 대해 먼저 해석해보면 아래와 같다.
@app.get("/")
def printHello():
return "Hello World"
GET 방식으로 루트경로가 호출될 경우, "Hello World"라는 문자열"을 넘겨준다.
다음으로 printJson 함수는 다음과 같다.
@app.get("/json")
def printJson():
return {
"Number" : 12345
}
GET 방식으로 '~/json'이 호출될 경우, Key/Value 형태의 JSON 데이터을 넘겨준다.
다음으로 createContents 함수는 다음과 같다.
class Post(BaseModel):
title: str
content: str
@app.post("/posts"):
def createContents(post : Post):
title = post.title
content = post.content
POST 방식으로 '~/createContents'가 호출될 경우, 인자로 넘어온 데이터로 값을 세팅한다.
코드에 대한 이해는 끝났으니 실제 파이썬 서버를 실행시켜 확인해보도록 하자.
uvicorn main:app --reload
- univorn: 서버 실행을 위해 기본적으로 기재해야하는 명령어
- main: 실행할 초기 파이썬 파일 이름. 만약 실행 소스코드 파일 이름이 index.py였다면 index:app으로 수정해줘야 한다.
- app: FastAPI()모듈을 할당한 객체명을 기재한다. 만약, start=FastAPI()라고 위에서 실행했었다면 여기서도 main:start라고 기재해줘야 정상 실행한다.
- reload: 소스코드가 변경되었을 시, 서버를 자동으로 재시작해주는 옵션
정상적으로 서버가 실행된 후, 본인이 작성한 api url을 확인해보면 위 소스예제와 동일한 결과값이 나타나는 것을 확인할 수 있다.