티스토리 뷰
목차
FastAPI + SQLAlchemy + Pydantic을 이용한 게시판 만들기
[FastAPI]SQLAlchemy + Pydantic를 이용한 게시판 만들기-(1) 회원가입 및 로그인 구현(JWT)
[FastAPI]SQLAlchemy + Pydantic를 이용한 게시판 만들기-(1.5) 디테일 수정
[FastAPI]SQLAlchemy + Pydantic를 이용한 게시판 만들기-(2-1)Feed CRUD - Model, Service
[FastAPI]SQLAlchemy + Pydantic을 이용한 게시판 만들기-(2-2)Feed CRUD - Routes, main.py
[FastAPI]SQLAlchemy + Pydantic을 이용한 게시판 만들기-(3)S3 버킷을 이용한 사진 업로드
[FastAPI]SQLAlchemy + Pydantic를 이용한 게시판 만들기-(4-1)Comment CRUD - Models, Services
[FastAPI]SQLAlchemy + Pydantic를 이용한 게시판 만들기-(4-2)Comment CRUD - Routes, main.py
지난 주말을 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의 비동기 및 동시성 기능을 완벽하게 활용할 수 있다.
이를 비롯한 특징을 요약하면 아래와 같다.
- 비동기 지원
- 확장성: 다양한 미들웨어와 플러그인을 간단히 추가할 수 있다.
- 빠른 성능: 가볍고 빠르게 설계되어 성능이 좋다.
- Websocket 지원: 실시간 통신을 위한 Websocket을 쉽게 구현할 수 있다.
- GraphQL(페이스북에서 발표한 일종의 쿼리 언어) 지원
클라이언트와 타입 중심의 강력한 쿼리언어 GraphQL을 지원해 데이터 효율성 및 안정성, 유연성, 문서화 등을 쉽게 구현할 수 있다.
Pydantic
Pydantic은 파이썬의 데이터 유효성 검사 및 설정 관리 라이브러리이다.
파이썬 3.6 이상에서 지원되는 타입 힌트를 기반으로 하며, 데이터 유효성 검증은 물론이고
복잡한 데이터 타입(JSON 등)을 파이썬의 데이터 타입으로 변환할 수 있다.
이를 포함한 특징과 장점을 나열하면 아래와 같다.
- 타입 검증
내장된 파이썬 타입뿐 아니라 Pydanic 모델을 사용해 복잡한 데이터 구조의 유효성 검증이 가능하다. - 데이터 변환
입력 데이터를 명시적으로 지정된 타입으로 변환한다. 예를 들면 문자열 입력을 정수, 실수, 날짜 등으로 변환한다. - 간결한 문법
파이썬의 타입 힌트를 사용하기 때문에 가독성 높고 명확한 코드를 쉽게 작성할 수 있다. - 에러 메시지
유효성 검사 실패 시 자세한 에러메시지를 제공해 디버깅이 쉽다. - JSON 지원
Pydantic 객체는 JSON으로의 직렬화/역직렬화가 쉽다. 또한 다양한 데이터 소스와 쉽게 통합 가능하다.
위와 같은 특징과 검사 및 변환을 자동화해 개발 속도를 높일 수 있다.
다만 가파른 학습곡선 및 런타임 비용이 추가로 들 수 있다는 점이 단점이라고 한다.
WSGI
WSGI(Web Server Gateway Interface)는 2003년 발표된 파이썬 웹 앱과 웹 서버 간의 표준 인터페이스 스펙이다.
주요 특징은 아래와 같으며,
- 언어 독립성: WSGI는 파이썬 내부에서 실행되기 때문에 웹 서버의 언어나 기술에 구애받지 않는다.
- 모듈화/재사용성: 앱과 서버, 미들웨어 간의 명확한 구분으로 인해 코드의 모듈화 및 재사용성이 높다.
- 동기/블로킹: 기본적으로 동기적이며 블로킹 모델을 따른다.
이를 이루고 있는 컴포넌트는 아래와 같다.
- WSGI 서버(게이트웨이): HTTP 요청을 받아 WSGI 스펙에 맞게 변환한 뒤 앱에 전달한다.
- WSGI 앱: WSGI서버의 요청을 처리 및 응답해 서버로 반환한다. 플라스크와 장고가 이에 해당한다.
- WSGI 미들웨어: 요청과 응답 사이에 필요한 로직을 처리한다. 여러 미들웨어를 합쳐 사용할 수 있다.
이와 같은 표준화 및 유연성으로 인해 생산성이 증가했으나,
위에서 보았듯 비동기 지원이 부족하고 성능 오버헤드가 생긴다는 단점이 있다.
ASGI
ASGI(Asynchronous Server Gateway Interface)는 2016년 발표된,
파이썬 웹 애플리케이션과 웹 서버 간의 비동기 통신을 위한 인터페이스 스펙이다.
WSGI의 비동기 버전이라고 볼 수 있으며 Uvicorn, Daphne 등의 서버에서 사용된다.
주요 특징은 아래와 같으며,
- 비동기 지원
- 언어 독립성
- 프로토콜 다양성: HTTP, 웹소켓, HTTP/2 등 다양한 프로토콜을 지원한다.
- 미들웨어: WSGI와 비슷하게 ASGI미들웨어를 통해 요청과 응답 사이 로직을 처리할 수 있다.
WSGI와는 다르게 실시간 앱이나 대규모 데이터 처리에서 강점을 보인다.
다만 비동기 프로그래밍의 특징답게 디버깅이 어려우며, WSGI 미들웨어와 호환되지 않을 가능성이 있다.
Uvicorn
Uvicorn은 ASGI서버 중 하나로, 파이썬의 비동기 웹 앱을 위해 설계되었다.
주로 위에 적힌 Starlette, FastAPI와 함께 쓰이며
비동기 지원, 높은 성능 및 웹소켓 지원, HTTP/2 지원 등의 특징을 가지고 있어
효율적이고 확장성 높으며 안정적인 서버를 구축할 수 있다.
FastAPI + SQLAlchemy + Pydantic
FastAPI + SQLAlchemy + Pydantic조합은 FastAPI를 사용한 개발에서 가장 인기 있는 패턴이다.
SQLAlchemy는 파이썬을 위한 ORM 라이브러리로, DB와의 상호작용을 좀 더 Pythonic 하게 만들어준다.
쉽게 말하면 스프링 부트에서 JPA를 사용하듯이 파이썬에서 디비를 다룰 수 있게 해 준다.
그래서 다시 본론으로 돌아가면, 세 조합의 개발은 다음과 같은 장점을 가지는데,
- 생산성: 각 라이브러리의 장점을 조합하면 빠르고 안정적인 API 개발이 가능하다.
- 유지보수: 명확한 타입 힌팅과 데이터 검증 로직이 유지보수를 쉽게 해 준다.
- 확장성: 독립적인 컴포넌트로 이루어져 있기 때문에 시스템이 복잡해져도 유연하게 확장할 수 있다.
조금 더 구체적으로는 FastAPI가 요청 처리 및 라우팅을, Pydantic이 요청/응답 객체의 검증 및 직렬화를,
SQLAlchemy가 데이터베이스 작업을 담당한다고 한다.
일단 튜토리얼로 처음 보는 단어에 대해 공부해 보았다.
다음 글부터는 늘 하듯이 간단한 게시판을 위 기술 스펙으로 만들어볼까 한다.
얼마나 쉽고 개발자 친화적이고 빠른 개발이 가능한지, 기대해 보자.
끝!
'Python > FastAPI' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 백준
- 칼이사
- a6000
- 리스트
- 유럽
- java
- 세계여행
- 맛집
- Algorithm
- 면접 준비
- Backjoon
- 야경
- 알고리즘
- 동적계획법
- 유럽여행
- spring
- 세모
- 지지
- 세계일주
- BOJ
- Python
- 남미
- 자바
- 중남미
- 파이썬
- 기술면접
- RX100M5
- 여행
- 스프링
- 스트림
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |