티스토리 뷰

Python/FastAPI

[FastAPI]FastAPI 튜토리얼

Vagabund.Gni 2023. 9. 27. 13:55
728x90
반응형

목차

     

     

    지난 주말을 Flask와 MVC 패턴을 이용한 게시판 초기 설정에 갈아 넣었는데,

     

    이번 월요일에 CTO님께서 FastAPI에 대한 언급을 하며 할 줄 알면 더 좋을 것 같다고 하셨다.

     

    그간 파이썬 하면 장고와 플라스크밖에 몰랐기 때문에 비교적 현대적인 FastAPI를 공부해 보기로 했다.

     

    FastAPI

     

    FastAPI는 콜롬비아 출신 Sebastián Ramírez에 의해 2018년 처음 릴리즈 된 현대적인 웹 프레임워크이다.

     

    RESTful API를 이용한 파이썬 프로젝트에 최적화되어 있으며, 빠르게 인기를 얻어 Flask를 대체하고 있다.

     

    특징으로는 개발 편의성, 속도, 그리고 자동 문서화 등이 있으며, Starlette을 웹 프레임워크로,

     

    Pydantic을 데이터 검증 라이브러리로 사용해 데이터를 검증, 직렬화/역직렬화한다.

     

    또한 비동기 프로그래밍을 완전히 지원하며, Gunicorn과 같은 WSGI서버뿐 아니라

     

    Uvicorn과 같은 ASGI 서버에서 실행이 가능해 속도가 빠르다.

     

    위와 같은 특징으로 실제 프로덕션 환경에서도 좋은 선택이 될 수 있으며,

     

    실제로 Flask에서 FastAPI로 변경을 진행하는 곳도 있다고 한다.

     

    Terminology

     

    늘 그렇든 모르는 단어가 쏟아졌다. 내가 모르는 것 위주로 하나씩 정리하고 넘어가겠다.

     

    Starlette

     

    Starlette은 ASGI를 기반으로 하는 파이썬 웹 프레임워크이다.

     

    위에 적었듯이 FastAPI의 사실상의 기반이자 핵심 기능이라고 할 수 있다.

     

    비동기 애플리케이션 및 서비스를 만들기 위해 가볍고 빠르게 설계되었으며

     

    비동기 요청의 처리를 위해 Python의 비동기 및 동시성 기능을 완벽하게 활용할 수 있다.

     

    이를 비롯한 특징을 요약하면 아래와 같다.

     

    1. 비동기 지원
    2. 확장성: 다양한 미들웨어와 플러그인을 간단히 추가할 수 있다.
    3. 빠른 성능: 가볍고 빠르게 설계되어 성능이 좋다.
    4. Websocket 지원: 실시간 통신을 위한 Websocket을 쉽게 구현할 수 있다.
    5. GraphQL(페이스북에서 발표한 일종의 쿼리 언어) 지원
      클라이언트와 타입 중심의 강력한 쿼리언어 GraphQL을 지원해 데이터 효율성 및 안정성, 유연성, 문서화 등을 쉽게 구현할 수 있다.

     

    Pydantic

     

    Pydantic은 파이썬의 데이터 유효성 검사 및 설정 관리 라이브러리이다.

     

    파이썬 3.6 이상에서 지원되는 타입 힌트를 기반으로 하며, 데이터 유효성 검증은 물론이고

     

    복잡한 데이터 타입(JSON 등)을 파이썬의 데이터 타입으로 변환할 수 있다.

     

    이를 포함한 특징과 장점을 나열하면 아래와 같다.

     

    1. 타입 검증
      내장된 파이썬 타입뿐 아니라 Pydanic 모델을 사용해 복잡한 데이터 구조의 유효성 검증이 가능하다.
    2. 데이터 변환
      입력 데이터를 명시적으로 지정된 타입으로 변환한다. 예를 들면 문자열 입력을 정수, 실수, 날짜 등으로 변환한다.
    3. 간결한 문법
      파이썬의 타입 힌트를 사용하기 때문에 가독성 높고 명확한 코드를 쉽게 작성할 수 있다.
    4. 에러 메시지
      유효성 검사 실패 시 자세한 에러메시지를 제공해 디버깅이 쉽다.
    5. JSON 지원
      Pydantic 객체는 JSON으로의 직렬화/역직렬화가 쉽다. 또한 다양한 데이터 소스와 쉽게 통합 가능하다.

    위와 같은 특징과 검사 및 변환을 자동화해 개발 속도를 높일 수 있다.

     

    다만 가파른 학습곡선 및 런타임 비용이 추가로 들 수 있다는 점이 단점이라고 한다.

     

     

    WSGI

     

    WSGI(Web Server Gateway Interface)는 2003년 발표된 파이썬 웹 앱과 웹 서버 간의 표준 인터페이스 스펙이다.

     

    주요 특징은 아래와 같으며,

     

    1. 언어 독립성: WSGI는 파이썬 내부에서 실행되기 때문에 웹 서버의 언어나 기술에 구애받지 않는다.
    2. 모듈화/재사용성: 앱과 서버, 미들웨어 간의 명확한 구분으로 인해 코드의 모듈화 및 재사용성이 높다.
    3. 동기/블로킹: 기본적으로 동기적이며 블로킹 모델을 따른다. 

    이를 이루고 있는 컴포넌트는 아래와 같다.

     

    1. WSGI 서버(게이트웨이): HTTP 요청을 받아 WSGI 스펙에 맞게 변환한 뒤 앱에 전달한다.
    2. WSGI 앱: WSGI서버의 요청을 처리 및 응답해 서버로 반환한다. 플라스크와 장고가 이에 해당한다.
    3. WSGI 미들웨어: 요청과 응답 사이에 필요한 로직을 처리한다. 여러 미들웨어를 합쳐 사용할 수 있다.

    이와 같은 표준화 및 유연성으로 인해 생산성이 증가했으나,

     

    위에서 보았듯 비동기 지원이 부족하고 성능 오버헤드가 생긴다는 단점이 있다.

     

    ASGI

     

    ASGI(Asynchronous Server Gateway Interface)는 2016년 발표된,

     

    파이썬 웹 애플리케이션과 웹 서버 간의 비동기 통신을 위한 인터페이스 스펙이다.

     

    WSGI의 비동기 버전이라고 볼 수 있으며 Uvicorn, Daphne 등의 서버에서 사용된다.

     

    주요 특징은 아래와 같으며,

     

    1. 비동기 지원
    2. 언어 독립성
    3. 프로토콜 다양성: HTTP, 웹소켓, HTTP/2 등 다양한 프로토콜을 지원한다.
    4. 미들웨어: WSGI와 비슷하게 ASGI미들웨어를 통해 요청과 응답 사이 로직을 처리할 수 있다.

    WSGI와는 다르게 실시간 앱이나 대규모 데이터 처리에서 강점을 보인다.

     

    다만 비동기 프로그래밍의 특징답게 디버깅이 어려우며, WSGI 미들웨어와 호환되지 않을 가능성이 있다.

     

    Uvicorn

     

    Uvicorn은 ASGI서버 중 하나로, 파이썬의 비동기 웹 앱을 위해 설계되었다.

     

    주로 위에 적힌 Starlette, FastAPI와 함께 쓰이며

     

    비동기 지원, 높은 성능 및 웹소켓 지원, HTTP/2 지원 등의 특징을 가지고 있어

     

    효율적이고 확장성 높으며 안정적인 서버를 구축할 수 있다.

     

    FastAPI + SQLAlchemy + Pydantic

     

    FastAPI + SQLAlchemy + Pydantic조합은 FastAPI를 사용한 개발에서 가장 인기 있는 패턴이다.

     

    SQLAlchemy는 파이썬을 위한 ORM 라이브러리로, DB와의 상호작용을 좀 더 Pythonic 하게 만들어준다.

     

    쉽게 말하면 스프링 부트에서 JPA를 사용하듯이 파이썬에서 디비를 다룰 수 있게 해 준다.

     

    그래서 다시 본론으로 돌아가면, 세 조합의 개발은 다음과 같은 장점을 가지는데,

     

    1. 생산성: 각 라이브러리의 장점을 조합하면 빠르고 안정적인 API 개발이 가능하다.
    2. 유지보수: 명확한 타입 힌팅과 데이터 검증 로직이 유지보수를 쉽게 해 준다.
    3. 확장성: 독립적인 컴포넌트로 이루어져 있기 때문에 시스템이 복잡해져도 유연하게 확장할 수 있다.

    조금 더 구체적으로는 FastAPI가 요청 처리 및 라우팅을, Pydantic이 요청/응답 객체의 검증 및 직렬화를,

     

    SQLAlchemy가 데이터베이스 작업을 담당한다고 한다.

     


    일단 튜토리얼로 처음 보는 단어에 대해 공부해 보았다.

     

    다음 글부터는 늘 하듯이 간단한 게시판을 위 기술 스펙으로 만들어볼까 한다.

     

    얼마나 쉽고 개발자 친화적이고 빠른 개발이 가능한지, 기대해 보자.

     

    끝!

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/06   »
    1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30
    글 보관함