A New Life for aiohttp?
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Python 비동기 웹 프레임워크 개발자, aiohttp 기반 프로젝트 유지보수자, FastAPI 사용자.
난이도: 중급(비동기 프로그래밍 경험, Pydantic, DI 이해 필요)
핵심 요약
- Rapidy는 aiohttp의 성능과 유연성에 Pydantic v1/v2, DI(Dishka),
mypy
지원을 추가한 현대적 비동기 웹 프레임워크 - aiohttp 호환성 유지하면서
strict typing
,lifecycle hooks
,content-type filtering
등 확장 기능 제공 - 기존 aiohttp 코드를 그대로 사용할 수 있는
backward compatibility
지원
섹션별 세부 요약
- Rapidy의 주요 기능
- 🔄 aiohttp 호환성 보장 (기존 코드 재사용 가능)
- ✅ Pydantic v1/v2,
mypy
플러그인, DI(Dishka) 통합 지원 - 🧰
lifecycle hooks
,content-type filtering
,middleware
기능 강화 - 🧩 간결한 라우팅, 컨트롤러, 미들웨어 구조 제공
- 미들웨어 및 데이터 검증 예제
pydantic.BaseModel
기반의 요청/응답 본문 검증@middleware
데코레이터로 인증 토큰 처리 로직 구현- 예시: Bearer 토큰 검증 미들웨어에서
Header
인자 사용
- Dishka DI 통합
Provider
클래스 기반 의존성 주입@provide(scope=Scope.REQUEST)
로 요청 범위 의존성 정의FromDI[str]
타입 어노테이션으로 의존성 주입
- aiohttp 호환성 확보
web.RouteTableDef
기반 기존 aiohttp 라우팅 코드 재사용HTTPRouter
를 통해/v1
과/v2
경로 병렬 처리Rapidy
인스턴스에v1_app
및v2_router
동시 등록
- 컨트롤러 기반 뷰
@controller('/')
데코레이터로 클래스 기반 뷰 정의PathParam
,get
,post
메서드로 라우팅 매핑UserController
클래스 내get_by_id
,get_all_users
메서드 구현
- 확장성과 생명주기 관리
@asynccontextmanager
를 통한 백그라운드 작업 관리on_startup
,on_shutdown
,on_cleanup
이벤트 핸들러 등록lifespan
옵션으로 앱 생명주기 커스터마이징
- 본문 추출 및 콘텐츠 타입 처리
Body(content_type=ContentType.json)
으로 요청 본문 타입 지정multipart/form-data
,application/x-www-form-urlencoded
등 다양한 콘텐츠 타입 지원
결론
Rapidy는 aiohttp의 기반을 유지하면서 Pydantic, DI, mypy
지원과 현대적 기능을 결합한 프레임워크로, 기존 aiohttp 프로젝트의 확장성과 유지보수성을 극대화할 수 있음. OpenAPI 지원, 미들웨어 템플릿, WebSocket/gRPC 기능 확장 등 지속적인 개발 계획이 있으므로, 비동기 웹 개발에 관심 있는 개발자는 문서(https://rapidy.dev)에서 상세 기능 확인 후 도입을 고려할 것.