본문 바로가기
TIL/FastAPI

[FastAPI] FastAPI란? / FastAPI 장점 및 특징 / FastAPI 2022년 기준 현상황

by 왁왁s 2022. 11. 13.

 

 

FastAPI 란?

 

파이썬 3.6 이상에서 작동하는, 표준 파이썬 타입 힌트를 바탕으로 한, 현대적이고 빠른 API 서버 웹 프레임 워크이다.

비교적 최근에 나온 프레임워크로, 릴리즈 노트로는 2019년 초에 발표를 하고 2018년에 처음 커밋을 했다.

 

FastAPI는 Flask와 비슷한 구조를 가졌으며, 기본적으로 비동기식으로 작성되어 있어 I/O 병목현상이 자주 일어나는 웹 서버에서 빠른 성능을 보여준다.

 

 

 

FastAPI 장점 및 특징

 

  • 빠름: (Starlette과 Pydantic 덕분에) NodeJS 및 Go와 대등할 정도로 매우 높은 성능. 사용 가능한 가장 빠른 파이썬 프레임워크 중 하나.
  • 빠른 코드 작성: 약 200%에서 300%까지 기능 개발 속도 증가. *
  • 적은 버그: 사람(개발자)에 의한 에러 약 40% 감소. *
  • 직관적: 훌륭한 편집기 지원. 모든 곳에서 자동완성. 적은 디버깅 시간.
  • 쉬움: 쉽게 사용하고 배우도록 설계. 적은 문서 읽기 시간.
  • 짧음: 코드 중복 최소화. 각 매개변수 선언의 여러 기능. 적은 버그.
  • 견고함: 준비된 프로덕션 용 코드를 얻으십시오. 자동 대화형 문서와 함께.
  • 표준 기반: API에 대한 (완전히 호환되는) 개방형 표준 기반: OpenAPI (이전에 Swagger로 알려졌던) 및 JSON 스키마.

 

 

 

실무에서 FastAPI 채택 이유 - 문서 자동화

마이크로서비스를 지향하는 입장에서는 Flask 마이크로프레임워크는 요청/응답 등 데이터 검증 처리에 있어서, 나은 선택이지만 그마저도 자주 변화하는 코드에 문서를 변경하는 수작업은 불리하다.

 

백엔드 개발자가 소스 코드를 반영해 서버 배포는 자동화 하였지만, API 문서까지 최신화를 하지 않아, 기존에 받은 문서에 의존하는 프론트 엔지니어와의 협업에 있어 문제가 발생한다.

 

그렇기에 API 문서와 같은 문서의 자동화가 필요하다.

 

FastAPI는 코드의 변화에 따라 발생하는 요청/응답 스키마를 자동으로 문서화 해 제공하는 파이프라인을 제공해줌으로써 업무의 효율을 증진시킬 수 있기 때문이다.

 

FastAPI를 이용해 애플리케이션을 개발하면 기본적으로 /docs, /redoc, /openapi.json 이 생성된다.

3가지의 엔트포인트는 API에 대한 문서를 위한 것이다. 기본적으로 FastAPI는 OpenAPI를 채택하고 있어, 이를 기반으로 자신의 코드를 읽어 OpenAPI 규격에 맞는 json 파일을 만들어주기 때문에 백엔드 엔지니어가 문서 작업에 할애하는 시간을 줄일 수 있다.

 

 

또한 서버 개발을 할 때 Django처럼 크게 개발하는 것보다 Micro 서비스라고 해서 서버를 작은 단위로, 기능 별로 분할을 해서 만드는 방식을 채택하고 있기 때문에 FastAPI를 선택한다.

 

 

 

FastAPI 2022년 현상황

기존에 파이썬으로 웹 서버를 만들기 위해 django라든지, Flask를 사용하였으나

최근에 들어서 'FastAPI'에 관심도가 점차 증가하기 시작했다.

 

 

 

 

아래의 사진을 보면 flask나 django에 비해 fastAPI

서버에서 유저에게 문자 전송하는 속도, DB 데이터 입출력 속도 등에서

2배 이상의 퍼포먼스(performance)를 내는 것을 확인할 수 있다.

 

 

서버에서 유저에게 문자 전송하는 속도

 

 

DB 입출력 속도

 

HTML 파일 전송량

 

 

위와 같이 뛰어난 퍼포먼스를 내는 이유는 비동기 처리를 기본적으로 지원하기 때문이다.

 

 

비동기처리 (Asynchronous : 동시에 일어나지 않는)란?

특정 로직의 실행이 끝날때까지 기다려주지 않고 나머지 코드를 먼저 실행하는것을 비동기 처리라고 한다.

특정 코드가 오래 걸리거나, 요청에 대한 응답을 언제 줄 지 모르기 때문에 기다리지 않고 다른 코드를 실행하는 것이다.

 


 

 

FastAPI 기능

GET POST 요청받기

DB 입출력

회원인증

데이터 Validation

웹 소켓

async/await

type 넣기

API 문서 자동 생성

댓글