Python으로 Application Server를 구축할 때 사람들이 많이 이용하는 프레임워크에는 3가지가 있다.
무겁지만 오랜 기간 이용되어 큰 커뮤니티와 다양한 레퍼런스를 가지고 있어서 빠르게 개발이 가능한 Django,
간결하고 가벼운 구조를 가지고 있어서 마이크로 서비스 개발을 빠르게 할 수 있는 Flask,
비동기 처리와 데이터 검증에 최적화되어 타 프레임워크보다 높은 성능을 가진 FastAPI가 있는데,
그중에서 FastAPI에 대하여 알아볼 것이다.
FastAPI 공식 홈페이지 : https://fastapi.tiangolo.com/ko/
1. FastAPI
공식 홈페이지를 접속하면, 위와 같은 특징과 더불어 현대적이고 빠른 파이썬의 프레임워크라고 소개하고 있는데, 아래 Github Star를 보면, 현대 사회에서 인기를 확인할 수 있다.
2003~2005년부터 개발되어 2008년에 1.0 버전이 첫 출시가 된 Django는, 현재 15년 가까이 이용되고 있고, 약 7만 3천을 넘는 Github Star를 보유하고 있다.
아래는 FastAPI의 공식 홈페이지 중 일부인데, Github Star가 6만 3천을 넘고 있는 것을 볼 수가 있다.
더 놀라운 것은 FastAPI가 2018년부터 개발이 시작되었고, 현재 정식으로 1.0 버전이 출시된 것도 아닌데, 20년에 가까운 역사를 가진 Django와 Github Star가 1만밖에 차이가 나지 않는다는 것이다.
(Flask와는 거의 유사한 Star를 보유)
이러한 인기가 우수한 성능과 현대적인 프레임워크라는 것을 증명하는 셈이 된 것이다.
FastAPI에서 주 축을 이루는 구성 요소는 아래 3가지가 있다.
- Pydantic : 데이터 유효성 검사와 직렬화를 하는 라이브러리로, Core는 Python + Rust로 제작되어 우수한 성능을 가짐
- Starlette : HTTP 요청 및 응답 처리, 미들웨어 지원과 라우팅을 담당하는 경량화된 ASGI(WSGI 호환) 프레임워크
- Uvicorn : ASGI 어플리케이션을 실행하기 위한 ASGI 서버
2. Pros and Cons
신생 프레임워크에 알맞게 다양한 수요를 반영하여, 강력한 장점을 가지고 있으나, 그에 따른 단점도 가지고 있다.
- Pros
- 빠른 개발 속도 : FastAPI는 직관적인 구문과 자동 문서화 기능으로 API를 빠르게 개발할 수 있다.
- 높은 성능 : 비동기 지원과 빠른 실행 속도로 대규모 및 실시간 애플리케이션에 최적화되었다.
- 타입 힌트 채택 : 파이썬 3.5버전부터 지원하는 타입 힌트를 통하여 코드의 가독성과 안정성을 높인다.
- 현대적인 기능 : 비동기 처리, 의존성 주입, 자동 검증 및 캐싱 등의 기능을 지원한다.
- Cons
- 비교적 새로운 프레임워크 : 상대적으로 최신 프레임워크여서 커뮤니티와 라이브러리 생태계가 약할 수 있다.
- 러닝 커브 존재 : 현대적 파이썬 문법을 다양하게 채택함으로, 타 프레임워크와 새로운 러닝 커브가 존재한다.
- 성숙도와 안정성 부족 : 빠르게 발전하고 있으나, 현재 1.0 버전으로 정식 출시되지도 않았기에, 타 프레임워크보다 상대적으로 성숙도와 안정성이 낮을 수 있다.
3. Install and Run
Python만 설치되어 있다면 간단하게 pip를 통하여 설치할 수 있다.
# FastAPI 설치
pip install fastapi
# ASGI 서버 설치(uvicorn)
pip install "uvicorn[standard]"
그리고 JAVA의 Controller와 같은 부분을 main.py에 간략하게 만들어서 간단한 동작을 확인할 수 있다.
# main.py
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return "Hello FastAPI"
아래 명령어를 통해 서버를 실행할 수 있다.
# uvicorn 서버 실행
uvicorn main:app --reload
# -----------출력----------- #
#INFO: Will watch for changes in these directories: ['S:\\Code\\Fastapi\\prac1']
#INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#INFO: Started reloader process [7876] using WatchFiles
#INFO: Started server process [11520]
#INFO: Waiting for application startup.
#INFO: Application startup complete
그리고 127.0.0.1:8000으로 접속하게 된다면 main.py에 입력한 값을 확인할 수 있을 것이다.