콘텐츠로 이동

역사, 디자인 그리고 미래

어느 날, 한 FastAPI 사용자가 이렇게 물었습니다:

이 프로젝트의 역사를 알려 주실 수 있나요? 몇 주 만에 멋진 결과를 낸 것 같아요. [...]

여기서 그 역사에 대해 간단히 설명하겠습니다.


대안

저는 여러 해 동안 머신러닝, 분산 시스템, 비동기 작업, NoSQL 데이터베이스 같은 복잡한 요구사항을 가진 API를 개발하며 여러 팀을 이끌어 왔습니다.

이 과정에서 많은 대안을 조사하고, 테스트하며, 사용해야 했습니다. FastAPI의 역사는 그 이전에 나왔던 여러 도구의 역사와 밀접하게 연관되어 있습니다.

대안 섹션에서 언급된 것처럼:

FastAPI는 이전에 나왔던 많은 도구들의 노력 없이는 존재하지 않았을 것입니다.

이전에 개발된 여러 도구들이 이 프로젝트에 영감을 주었습니다.

저는 오랫동안 새로운 프레임워크를 만드는 것을 피하고자 했습니다. 처음에는 FastAPI가 제공하는 기능들을 다양한 프레임워크와 플러그인, 도구들을 조합해 해결하려 했습니다.

하지만 결국에는 이 모든 기능을 통합하는 도구가 필요해졌습니다. 이전 도구들로부터 최고의 아이디어들을 모으고, 이를 최적의 방식으로 조합해야만 했습니다. 이는 :term:Python 3.6+ 타입 힌트 와 같은, 이전에는 사용할 수 없었던 언어 기능이 가능했기 때문입니다.


조사

여러 대안을 사용해 보며 다양한 도구에서 배운 점들을 모아 저와 개발팀에게 가장 적합한 방식을 찾았습니다.

예를 들어, 표준 :term:Python 타입 힌트 에 기반하는 것이 이상적이라는 점이 명확했습니다.

또한, 이미 존재하는 표준을 활용하는 것이 가장 좋은 접근법이라 판단했습니다.

그래서 FastAPI의 코드를 작성하기 전에 몇 달 동안 OpenAPI, JSON Schema, OAuth2 명세를 연구하며 이들의 관계와 겹치는 부분, 차이점을 이해했습니다.


디자인

그 후, FastAPI 사용자가 될 개발자로서 사용하고 싶은 개발자 "API"를 디자인했습니다.

Python Developer Survey에 따르면 약 80%의 Python 개발자가 PyCharm, VS Code, Jedi 기반 편집기 등에서 개발합니다. 이 과정에서 여러 아이디어를 테스트했습니다.

대부분의 다른 편집기도 유사하게 동작하기 때문에, FastAPI의 이점은 거의 모든 편집기에서 누릴 수 있습니다.

이 과정을 통해 코드 중복을 최소화하고, 모든 곳에서 자동 완성, 타입 검사, 에러 확인 기능이 제공되는 최적의 방식을 찾아냈습니다.

이 모든 것은 개발자들에게 최고의 개발 경험을 제공하기 위해 설계되었습니다.


필요조건

여러 대안을 테스트한 후, Pydantic을 사용하기로 결정했습니다.

이후 저는 Pydantic이 JSON Schema와 완벽히 호환되도록 개선하고, 다양한 제약 조건 선언을 지원하며, 여러 편집기에서의 자동 완성과 타입 검사 기능을 향상하기 위해 기여했습니다.

또한, 또 다른 주요 필요조건이었던 Starlette에도 기여했습니다.


개발

FastAPI를 개발하기 시작할 즈음에는 대부분의 준비가 이미 완료된 상태였습니다. 설계가 정의되었고, 필요조건과 도구가 준비되었으며, 표준과 명세에 대한 지식도 충분했습니다.


미래

현시점에서 FastAPI가 많은 사람들에게 유용하다는 것이 명백해졌습니다.

여러 용도에 더 적합한 도구로서 기존 대안보다 선호되고 있습니다. 이미 많은 개발자와 팀들이 FastAPI에 의존해 프로젝트를 진행 중입니다 (저와 제 팀도 마찬가지입니다).

하지만 여전히 개선해야 할 점과 추가할 기능들이 많이 남아 있습니다.

FastAPI는 밝은 미래로 나아가고 있습니다. 그리고 여러분의 도움은 큰 힘이 됩니다.