ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 처음 시작하는 FastAPI
    2024. 7. 28. comments
    반응형

    빌 루바노빅 지음

    최근에는 프로덕션 레벨로 Java을 활용하여 작업을 이어오면서 개인프로젝트 몇몇을 제외하고는 Python 기반의 웹 서비스 개발을 거의 못하고 있었다. 종종 FastAPI에 대한 이야기를 듣곤 했었다. 작년말 해커톤에 참여할 일이 있었는데 그 때 함께 작업하시는 분이 FastAPI 이야기를 하셔서 1시간 정도 레퍼런스 문서를 보고 백엔드 API 서버를 만들기는 했었는데 이번에 이렇게 관련 서적을 읽을 기회가 있어서 한번 각을 잡고 읽어보게 되었다.

    Python을 개발언어의 강력함은 배우기 쉽고 이를 지탱하는 프레임워크가 굉장히 많다는 점이다. 그 중 웹 프레임워크는 과거부터 2가지 종류가 굉장히 인기가 많았다. 일종의 거대한 프레임워크라고 할 수 있는 Django와 대조적으로 경량화된 Flask이다. 어드민부터 시작하여 CLI 도구등 (Ruby on rails의 영향을 받은듯한) 다양한 기능들을 직접적으로 지원하여 간단한 웹 어플리케이션은 굉장히 빠르게 개발할 수 있는 Django는 그 유명한 인스타그램에서 초기에 활용한 프레임워크이기도 하다. 

    지금도 그렇지만 개인적으로 웹사이트를 만들 일이 있다면 거리낌없이 Django를 활용했었고, 마이크로서비스가 주류가 된 이후로는 자유도가 높고 경량화된 백엔드API 서버를 만들 수 있는 Flask를 활용하여 백엔드 API 서버를 개발하였다. 한가지 아쉬웠던 점은 Python의 GIL(Global Interpeter Lock) 때문에 멀티 프로세스보다 경량화된 멀티 쓰레딩을 활용하기 어렵다는 점이고 일반적으로 I/O가 많은 백엔드서버에서 비동기를 지원하지 않아 성능적으로 이점을 많이 가져가지 못한 점이 있었다. 

    이 때 필요한 기술은 비동기이다. Django와 Flask 모두 결국 비동기를 지원하게 되었지만 결국 FastAPI가 비동기 API 서버의 흐름을 잡고 있지 않을까 생각을 한다. Flask와 비슷한 간결함과 자유도 그리고 비동기 지원. 자동화된 문서화와 ORM까지 어느정도 갖춰서 사용할 수 있는 레퍼런스가 제공되는 점까지 프로덕션 레벨에서 사용하지 않을 이유가 없다. 

    실용적인 목적으로 빠르게 활용하기 위해서만 학습했었는데 내부 동작이나 기능의 지원여부 그리고 Django, Flask와의 차이점에 대해 정리된 글을 보고 싶다는 생각을 했었는데 이 책에서는 궁금한 점들을 잘 표현하고 있다. 주니어 개발자들을 위한 서비스, API, HTTP, Restful, 동시성등 개념적인 설명과 더불어 어느정도 웹개발에 대한 경험이 있는 독자들을 대상으로 글을 쓴 것 같은 인상또한 받았다. 

    책의 장점이자 단점인데, "단순히 API 서버는 이렇게 만들면 됩니다"가 아니라 API 서버를 개발하는데 필요한 개념들부터, 테스트를 위한 도구(pytest), 코드 포맷팅, ORM, 의존성 주입, 로깅, 인증/인가등 다양한 범위로 설명을 한다. Cython, pypy등의 언급까지 정말 많은 영역을 다루다 보니 특정 부분은 설명이 적거나 개론적인 부분만 적혀있는 것도 있어 단점이라고도 볼 수 있다. 하지만 API에 대한 큰 틀을 한번 정리해준다는 점은 장점으로 생각된다.

    데이터 계층에 대한 설명은 로우레벨인 쿼리부터 시작한다는 점은 인상적이지만 최근 ORM을 거의 다 사용하는 추세인데 너무 적게 내용을 할당해 아쉬움이 좀 있었다.

    Python을 시작해서 FastAPI로 처음 개발을 시작한다면 추천하기 좀 어렵다. 하나하나 집어주는 부분은 참 좋았지만 기술적 단어나 배경에 대한 이해가 부족할 수 있어 맥락을 이해하기 어려울 것으로 본다. 하지만 Django/Flask 개발 경험이 있는 사람이 FastAPI를 도입하거나 사용하기 위해 이 책을 읽어본다면 빠르게 어느정도 퀄리티가 보장된 서버를 만들 수 있는 가이드가 될 것이라고 생각한다.

    "한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    반응형

    댓글

Designed by Tistory.