Python 타입 시스템, TypeScript처럼 강력해질까? 새로운 PEP 827 제안!

by DD
3개월 전
조회수 10

Python 타입 시스템에 타입 레벨 검사 및 생성 기능을 추가하여 메타 프로그래밍 지원을 강화

Prisma 스타일 ORMFastAPI CRUD 모델 자동 생성과 같은 실용적인 사용 사례 제시

TypeScript의 조건부 타입, 맵드 타입, 유틸리티 타입 등에서 영감을 얻어 설계

런타임 타입 검사를 지원하여 IDE, CI, 툴링 간의 일관된 타입 검사 환경 구축

타입 조작(Type Manipulation)을 위한 새로운 기능 도입

PEP 827은 Python의 타입 시스템을 확장하기 위해 타입 부울(Type Booleans), 조건부 타입(Conditional Types), 언팩된 컴프리헨션(Unpacked Comprehension), 타입 멤버 접근(Type Member Access) 등 새로운 구문 기능을 제안한다. 특히, GetArg, GetMemberType와 같은 타입 연산자(Type Operators)를 통해 타입 수준의 복잡한 연산을 가능하게 하여, 기존 타입 시스템의 한계를 극복하고자 한다.

Prisma 스타일 ORM 구현

제안된 기능들을 활용하여 Prisma와 유사한 ORM을 Python에서 구현하는 방법을 제시한다. 핵심은 Attrs[K]를 사용하여 클래스의 속성 정보를 추출하고, NewProtocol을 통해 새로운 구조적 타입을 생성하는 것이다. 이를 통해 데이터베이스 스키마를 기반으로 동적으로 타입을 생성하고, IDE에서 코드 자동 완성을 지원하여 개발 생산성을 향상시킬 수 있다. 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 안전성을 확보한다.

FastAPI CRUD 모델 자동 생성

FastAPI의 CRUD 모델을 자동 생성하는 예시를 통해, 타입 레벨 연산의 실용성을 강조한다. Create, Update, Public과 같은 타입 앨리어스를 정의하여, 코드 중복을 줄이고 유지보수성을 높인다. InitField를 활용하여 필드 초기값을 처리하고, GetDefault를 통해 기본값을 추출하는 방식은 Pydantic 모델의 런타임 검증과 변환을 지원한다. 멀티모달 분석(Multimodal Analysis)을 통해 다양한 데이터 형식을 처리한다.

데코레이터(Decorator) 타입 힌팅(Type Hinting) 개선

데코레이터 함수의 타입 힌팅 문제를 해결하기 위해, ParamSpec을 활용한 확장된 Callable 타입을 제안한다. 이를 통해 키워드 매개변수의 추가/제거/수정, 가변 개수 매개변수 처리 등 기존에 지원되지 않던 패턴을 지원한다. Extended Callables는 임의의 복잡한 호출 가능 타입을 표현하고, 타입 레벨 계산을 통해 호출 가능 타입을 생성하고 검사할 수 있도록 설계되었다. 데이터 미저장 정책(Zero-Retention Policy)을 통해 보안을 강화한다.

런타임 평가(Runtime Evaluation) 지원

PEP 827은 타입 시스템 확장의 핵심 목표 중 하나로 런타임 평가를 지원한다. 이를 위해 special_form_evaluator라는 새로운 훅을 도입하여, 런타임에 타입 연산을 트리거할 수 있도록 한다. 런타임 평가를 통해, FastAPI CRUD 모델 자동 생성과 같은 기능을 구현하고, IDE, CI, 툴링 간의 일관된 타입 검사 환경을 구축할 수 있다. GDPR 규제 준수(GDPR Compliance)를 위한 유연성을 제공한다.

PEP 827 – Type Manipulation