FastAPI

FastAPI 로 파이썬 마이크로서비스

cocojen 2022. 3. 13. 21:41

FastAPI의 장단점 

 

요즘 우리 팀은 모놀리틱 서비스를 마이크로 서비스로 바꾸려고 하고 있다.

그 중에서도 내가 맡은 프로젝트가 첫 스타트를 끊게 되었는데, 덕분에 팀원분과 함께 자유롭게 언어와 프레임워크, 배포 툴 등을 고를 수 있었다.

하지만 우리 회사는 거의 모두가 파이썬을 사용하고 있기때문에 마이크로서비스가 기술 선택에 있어 아무리 자유롭다고 하더라도 현실적으로 자바를 선택할 수는 없는 일이었다. 그리고 사실 프레임워크도 우리가 먼저 선택하기 전에 시니어분이 fastAPI 를 추천해주셨는데,

마침 나도 FastAPI 가 좋아보여서 즐거운 마음으로 전향할 수 있었다.

 

FastAPI 는 파이썬 프레임워크 중 굉장히 새로운 (2018년 12월에 최초 출시되었다고함 겨우 네 살임!) 프레임워크이다. 이름부터 그렇듯이 빠른 것을 내세우고 있다. 과연 그런지, 장점과 단점은 무엇인지 정리해보자.

 

 

FastAPI 의 장점

1. 진짜로 빠르다.

 

위 스크린샷과 아래의 표는 플라스크와 장고, fastAPI의 속도를 비교한 것이다.

위 스크린샷은 weighted score를 낸 것이고,

아래의 표는 Hello world API(단순히 hello world 메시지를 반환하는 api) 를 세 가지 프레임워크로 만든 후,

응답 시간을 테스트한 것이다.

이 테스트 결과에 의하면

- flask 는 속도가 항상 일정하지만 셋 중 가장 느리고,

- 장고는 첫 번째 api 콜 이후에는 속도가 fastAPI 보다 조금은 빨라지지만 첫 번째 콜이 너무 너무 느리다. 

 

프레임워크 첫 번째 api 콜 응답시간 첫 번째 콜 이후에 api 를 연속적으로 요청했을 때 평균 응답시간
FastAPI 17 ms 6.2 ms
Django 517.2 ms 5.834 ms
Flask 507.2 ms 508.9 ms

 

2. 비동기 코드를 지원한다. https://fastapi.tiangolo.com/async/

- FastAPI는 비동기 방식으로 요청을 처리한다. Python은 파이썬 스크립트(웹 어플리케이션)가 웹 서버와 통신하기 위한 인터페이스인 WSGI(Web Server Gateway Interface)를 사용한다. 하지만 WSGI는 동기 방식만 지원하기 때문에 먼저 들어온 요청에 대한 처리가 끝날 때까지 다음 요청은 계속 기다려야 한다는 단점이 있다. FastAPI는 WSGI 대신 비동기 방식인 ASGI(Asynchronous Server Gateway Interface)를 사용하기 때문에 비동기로 요청을 처리할 수 있다.

 

3. 개발 시간이 짧다. 

- 진짜 간단하다. hello world API 만드는 것도 정말 장고랑 비교해서 어마어마하게 빨리 수행할 수 있다. 나도 시간을 재보았는데 설치부터 띄우는 것 까지 복붙없이 2분이면 가능하다.

 

4. 테스팅이 쉽다. 

- FastAPI 가 제공하는 TestClient 를 이용해서 직관적인 테스트가 가능하다 -> TDD 가 쉽다(고 한다).

 

5. Mangum 을 이용해서 AWS Lambda 에 배포하기 간편하다.

 

6. * Swagger 를 자동생성해준다 (너무 편리함)

 

7. Pydantic 으로 벨리데이션이 가능하다. (빠르고 간편하다)

 

 

FastAPI 의 단점

- FastAPI 만의 단점이라기 보다는 프레임워크의 단점이다.

   - 서드파티 라이브러리가 장고와 플라스크에 비교할 수 없이 적다.

   - 레퍼런스가 적다. 책, 강의, 스택오버플로우 질문 등.

   

 

우리팀은 위의 장점들을 기반으로 fastAPI를 선택했다.

아직까지는 serverless framework 와 깃헙액션을 사용하여 AWS lambda에 자동배포 하는 환경을 구축하느라 fastAPI 에서

코드를 짜보지는 않았는데,  본격적으로 fastAPI 를 사용하여 api 를 만들면서 직접 느낀 장점과 단점을 정리해보아야겠다.

 

참고 링크

- https://dev.to/fuadrafid/fastapi-the-good-the-bad-and-the-ugly-20ob

- https://www.merixstudio.com/blog/how-use-fastapi-microservices-python/

 

How to use FastAPI for microservices in Python? | Merixstudio

Use this article as a guide on how to use FastAPI in Python to reap all the microservices' benefits.

www.merixstudio.com