Node.js 아성에 도전한다. FastAPI written in Python


Flask나 Django를 사용하고 계신가요? 훨씬 빠르고 개발이 편안한 FastAPI에 대해 들어보셨나요? 아직 못들어 보셨다고요? 이 글을 꼭 읽어보셔야 합니다. 저는 현업에서 FastAPI를 광범위하게 사용하고 있고, Django Rest Framwork와 Flask를 조금씩 잊어갈 정도로 이 프레임워크에 빠져 있습니다.





FastAPI는 아직 1.0 버전이 나오지 않은 파이썬의 웹 프레임 워크 입니다. 


아직 정식 버전도 없는 이 프레임워크가 이렇게 핫 해질 줄은 ... 당연히 모두가 알았을거에요. 특히 파이썬을 사용하는 엔지니어 분들께서는.. 얼마나 핫 한지 한번 보겠습니다.


이미 Django과 Flask를 절반정도 따라갔습니다.



FastAPI 공식 문서 대문


FastAPI의 철학은 다음과 같습니다.

  • High Performance
  • Easy to Learn
  • Fast to Code
  • Ready for Production



다른 프레임 워크에서 느껴볼수 없는 현실감 있는 특징

  • Starlette(https://github.com/encode/starlette) 프레임 워크를 기반으로한 비동기 API 서버 지원
  • Pydantic 을 사용하여 데이터 밸리데이션 지원
  • OpenAPI 를 사용하여 자동으로 생성되는 API Swagger
  • 성능과 부하 테스트에서 JS 와 GO 에 서 사용되고 있는 그 어떤 웹 프레임워크와도 비교해도 손색없는 수준



1. ASGI란?


이미 DJANGO나 Flask를 사용해 보신 분들은 WSGI 에 대해 익숙하실 겁니다. WSGI를 사용하는 순간 그 구조적인 문제로 인해 많은 트래픽을 감당해 내기에는 느려지는 한계를 극복하기가 쉽지 않습니다. 때문에, 우리는 비동기 작업을 위해 APScheduler 와 같은 백그라운드 Task를 처리해주는 모듈을 사용하거나, Redis-Celery 조합등으로 이를 해쳐 나갔습니다. 

이로인해, 많은 부분에서 관리 포인트가 생성되고, 이는 유지보수를 힘들게 만드는 단점이 있습니다. 문제를 극복하니 또 문제가 생기는 격이지요. 하지만, 이제는 이것을 걱정하실 필요 없습니다. ASGI를 사용하여, FastAPI 안에서 많은 비동기 처리를 수행할 수 있습니다.



2.  Pydantic 을 이용한 벨리데이션


최근에 Django도 3.x대 버전으로 올라오면서 @sync_to_async 라는 Decorator가 생기고, async ... await 으로 비동기를 구현 할 수 있습니다. Django Rest Framework에도 다시 숨결을 불어넣고 있습니다. 요즘 이렇게 ASGI를 지원하는 프레임워크가 많지만, 빈틈없는 공식 문서와 별다른 Serializer 없이 Pydantic을 통한 Json 데이터 서빙 등 아주 매력이 많은 프레임 워크 입니다. 



3. OpenAPI 지원으로 API Swagger 자동생성


물론, 프론트엔드-백엔드를 넘나들며 양쪽 모두 아우르는 개발자들이 있는 반면, 정확하게 역할 분담하여 개발이 진행되는 팀도 많이 있습니다. 현재 팀에서 양쪽으로 나누어져 개발자들이 일한다면, API Swagger 가 얼마나 좋은지 아실 겁니다. 


스웨거 공식 문서 (https://swagger.io)

이런 API 문서와 API 호출을 위해 필요한 데이터 종류, 응답 예시 등을 알려줍니다.


이 문서를 가지고 프론트엔드와 백엔드는 서로 협업을 하게 되고, 별 다른 문서를 작성하지 않아도 이 자체로 매뉴얼이 되어 업무에 상당한 도움이 됩니다.




4. Javascript, Go 언어로 되어 있는 웹서버의 성능에 도전한다.


다른거 필요없이 벤치마크 보시면 됩니다. 물론 FastAPI 보다 더 좋은 성능을 내는 웹 프레임워크도 많이 있지만, 필터링 해서 골라 보았습니다. 자세한 내용 TechMPower에서 확인하기 : 벤치마크 새 창에서 보기




그 밖에..


위에 언급한 이야기 말고도, Python 3.6 부터 지원한 Type Hinting 등을 사용하며, Dependency Injection 등을 사용하여 철저하게 코드 재사용이 가능합니다. 아직 생태계가 Django 만큼 크지 않아 아쉬운 부분이 있지만, 곧 최대 생태계를 가질 것으로 예상합니다. 앞으로, 많은 Tip등을 올릴 예정입니다!


  • [[a.original_name]] ([[a.file_size | fileSizer]])
'FastAPI 프로젝트' 시리즈 포스트
FastAPI 1화 - 프로젝트 생성
2020-12-18
파이썬에서 가장 빠른 웹프레임워크 FastAPI Feat. Pydandic
2021-01-04
Python FastAPI 로 백엔드 만들기 3화 - MySQL 연결
2020-12-27
Python FastAPI 로 백엔드 만들기 2화 - 프로젝트 구조
2020-12-21
Python으로 로그인 구현하기 (JWT X FastAPI)
2021-01-07
Node.js 아성에 도전한다. FastAPI written in Python
2020-10-13
좋아요[[ postLike | likePlus ]]
공유
라이언

“Lead Python Engineer”

댓글 [[totalCommentCount]]
[[ comment.author__nick_name ]] [[ comment.datetime_updated | formatDate]] (수정됨)

[블라인드 처리된 글 입니다.]

답장
[[ sub.author__nick_name ]] [[ sub.datetime_created | formatDate ]] (수정됨)

취소
댓글을 남겨주세요.
'파이썬' 관련 최신 포스트
[[ post.title ]]
[[ post.datetime_published_from | DateOnly ]]