목록으로

FastAPI 개요

시리즈, 입문
2024. 5. 28. AM 9:47:19
#FastAPI, #OpenAPI 3 Spec, #Redoc, #Python, #파이썬, #학습, #Type Annotation, #비동기, #Async

FastAPI 개요

소개

FastAPI는 Django나 Flask에 비하면 최근에 나온 신생 웹 프레임워크입니다. 하지만 FastAPI의 두 개 기둥인 Starlette와 Pydantic은 좀 더 오랜 시간동안 사용되어온 도구예요. Starlette은 비동기로 동작하는 경량 ASGI 프레임워크로 FastAPI의 웹 네트워크를 처리하고, Pydantic은 데이터 검증 구현을 쉽고 직관적으로 할 수 있는 데이터 구현체로 FastAPI가 다루는 데이터 영역을 담당하고 있죠. 강력한 두 도구를 Python 자료형 각주(Type annotation)로 유려하게 통합한 것이 바로 FastAPI고요.

FastAPI는 빠른 동작과 빠른 구현, 즉 성능과 생산성을 주요하게 내세우는데요. 저는 여기에 한 가지를 더하고 싶어요. 바로 빠른 학습이죠.

명시적이고 명료하게, 그래서 쉽고 효과적으로.

FastAPI엔 매력있는 기능과 특성이 여럿 있지만, FastAPI를 이해하고 활용하는 데 가장 중요한 개념은 적은 노력(코드)으로 명시적이고 명료하게 구현을 하는 점이예요. 생산성과 학습을 빠르게 하는 데에도 아주 중요한 개념이죠.

웹 애플리케이션 서버가 동작을 촉발하는 연결점, 즉 진입점(종단점, endpoint)에 자료형 각주를 아주 효과적으로 활용해요. 웹과 Python이 소통하는 인터페이스를 자료 각주로 정의하게 되어 함수의 명세가 곧 인터페이스로 작용해요. HTTP Header나 Body를 분해할 때 자료 각주를 참고하여 진입점 함수에 인자로 전달해주죠. 다시 말해, URL 질의문자열(QueryString)과 경로(Path)를 자료 각주를 분석하여 진입점 함수의 인자로 전달해주고, 이 뿐만 아니라 HTTP Cookie, FormData, File도 같은 방식으로 처리하는 거죠. 그래서 FastAPI 기반 코드를 보면 빠르게 함수의 명세와 의도를 파악할 수 있어요.

뿐만 아니라 자료 각주를 문서화에도 활용하는데, OpenAPI Spec이나 Redoc에서 자료 각주를 자동 생성한 문서에 반영해요.

Redoc으로 자동생성된 문서 이미지

Redoc으로 자동생성된 문서

OpenAPI Spec으로 자동생성된 문서 이미지

OpenAPI Spec으로 자동생성된 문서

자료형 각주 뿐만 아니라 [Docstring]도 사용합니다. 문서 자동화를 위해 따로 기능을 익혀 다루거나 관리하지 않고, 언어의 기능인 자료형 각주와 Docstring로 쉽고 편하게 쓸만한 문서화가 가능해요.

마지막으로 FastAPI는 진입점을 함수로 작성하는 게 일종의 관례예요. 함수는 인자를 받으며 동작을 시작했다가 객체를 반환하며 동작을 마치잖아요. 그래서 동작의 맥락(Context)과 상태는 함수 단위로 끊어져요. 외부에서 영향을 받아 부수작용(Side effect)을 받을 여지도, 일으킬 여지도 적게 유도하죠.

외부 상태를 갖는 의존성은 함수, 정확히는 호출 가능한 객체로 주입할 수 있어요. 이후 연재에서 자세히 다룰 Depends로 주입하죠. FastAPI는 코루틴(Coroutine)으로 비동기(asynchronous) 동작하는데, 진입점 함수와 의존성 주입 객체 모두 함수로 작성한다면 함수가 상태를 갖지 않는 특성 상 비동기 맥락(Context)을 의식하지 않고 편안하게 코드를 작성할 수 있어요.

추세

충분히 성숙한 Django와 Flask가 일정한 점유율과 관심을 유지하고 있는 것과 달리 FastAPI 관심도는 꾸준히 늘고있어요. 다음 그래프에서 파란 선은 Django, 빨간 선은 Flask, 노란 선은 FastAPI인데, 지난 2년 동안 두 배 이상 관심도가 높아진 걸 알 수 있어요.

Django, Flask, FastAPI 관심도 그래프

특히 Flask를 사용하던 분은 친숙하고 금방 익숙해져서 FastAPI를 채택하는 경우가 많아 보여요. 조합하는 기술스택도 비슷한데, 성능이 좋고 비동기 구현에 있어서 레거시 영향을 덜 받아 Flask 사용자가 FastAPI를 채택하는 것이 아닐까 생각해요. 안 그래도 학습하기 쉽고 좋은데, 기존에 사용하던 Flask와 비슷한 인상을 받으니 더 좋은 거죠.

학습, 구현 환경

이번 연재 컨텐츠는 다음 개발 환경을 기반으로 해요.

  • Python 3.10 이상

  • FastAPI 버전 0.111 이상

  • Pydantic 버전 2.7 이상

  • SQLAlchemy 버전 2.0 이상

  • pytest 7 이상

이외에도 추가로 사용할 패키지가 더 있는데, 그건 필요할 때마다 다룰게요.

FastAPI는 버전 간 차이가 크진 않은 편인데, 0.111에 FastAPI CLI가 새롭게 추가되었어요. 그래서 가장 최신 버전을 선택했고요. Pydantic과 SQLAlchemy의 경우, 버전 1을 기반으로 하는 자료에 비해 버전 2를 기반으로 하는 최신 자료가 아직 많진 않더라고요. 그래서 메이저 업데이트한 이래 안정 버전으로 관리되고 있는 Pydantic 2.7, SQLAlchemy 2 이상에서 동작하도록 구현할 예정이예요.

학습이 이뤄지고 있는지 확신이 안 서나요?
사수가 없나요?
효과적이고 효율적으로 학습하며 성장하는
자기만의 학습과 성장 체계를 만들 수 있습니다.
연사자들의 각양각색 학습과 성장 스토리로
여러분의 학습과 성장을 키워보세요.
푸딩캠프 뉴스레터를 구독하면 학습과 성장, 기술에 관해 요약된 컨텐츠를 매주 편하게 받아보실 수 있습니다.
이전 컨텐츠
다음 컨텐츠
목차