Starlette
Starlette는 2018년에 Tom Christie가 개발한 경량 ASGI 프레임워크.
ASGI(Asynchronous Server Gateway Interface)는 Python의 비동기 웹 서버와 애플리케이션 간의 표준 인터페이스를 제공한다.
특히 FastAPI의 기반 프레임워크로도 사용되어 널리 알려져 있다.
주요 개념
- ASGI (Asynchronous Server Gateway Interface): Starlette는 ASGI를 기반으로 하여 비동기 웹 애플리케이션을 구축한다.
- 라우팅: URL과 핸들러 함수를 연결하여 요청을 처리한다.
- 미들웨어: 요청/응답 처리 과정에 개입하여 추가 기능을 제공한다.
- 이벤트 핸들링: 시스템 시작 및 종료 이벤트를 처리할 수 있다.
특징
- 경량성: 최소한의 의존성으로 가볍고 빠른 개발이 가능하다.
- 모듈성: 독립적으로 사용 가능한 컴포넌트들로 구성되어 있다.
- 비동기 지원: asyncio를 기반으로 한 비동기 프로그래밍을 지원한다.
- 확장성: ASGI 인터페이스를 통해 다양한 컴포넌트를 조합할 수 있다.
장점
- 높은 성능: 비동기 처리를 통해 고성능을 제공한다.
- 유연성: 필요한 기능만 선택적으로 사용할 수 있다.
- 테스트 용이성: requests 기반의 테스트 클라이언트를 제공한다.
- 타입 안정성: 100% 코드 기반 어노테이트된 자료형을 제공한다.
단점
- 학습 곡선: 비동기 프로그래밍에 익숙하지 않은 개발자에게는 어려울 수 있다.
- 생태계 규모: Django나 Flask에 비해 상대적으로 작은 생태계를 가지고 있다.
- 기능의 제한: 풀스택 프레임워크에 비해 기본 제공 기능이 제한적일 수 있다.
개발 특성
- 선언적 라우팅: 라우팅을 중앙화된 리스트로 관리할 수 있다.
- 컴포넌트 기반 설계: 재사용 가능한 ASGI 컴포넌트를 만들 수 있다.
- 비동기 프로그래밍: asyncio를 활용한 비동기 코드 작성이 가능하다.
성능과 기능
- 웹소켓 지원: 실시간 양방향 통신을 구현할 수 있다.
- GraphQL 지원: GraphQL API를 쉽게 구축할 수 있다.
- 백그라운드 작업: 인-프로세스 백그라운드 작업을 지원한다.
- 미들웨어: CORS, GZip 등 다양한 미들웨어를 제공한다.
서버 구현 예제
이 예제는 간단한 JSON 응답을 반환하는 홈페이지 라우트를 구현한다.
같이 사용하는 패키지
- Uvicorn: ASGI 서버로 Starlette 애플리케이션을 실행한다.
- Pydantic: 데이터 검증과 설정 관리에 사용된다.
- SQLAlchemy: ORM을 통한 데이터베이스 작업에 사용된다.
- Jinja2: 템플릿 엔진으로 사용된다.
- Python-multipart: 폼 데이터 파싱에 사용된다.
- databases: 비동기 데이터베이스 쿼리를 위한 라이브러리.
- itsdangerous: 보안 관련 기능을 제공한다.
- httpx: 비동기 HTTP 클라이언트로 외부 API 호출에 사용된다.