Python

타입 체커의 진화: Pyrefly vs Ty, 파이썬을 위한 새로운 선택지

파파누보 2025. 5. 30. 11:43
728x90
반응형

파이썬 타입 검사, 이제는 Rust로 더 빠르고 정밀하게

파이썬 코드의 신뢰성을 높이기 위해 많은 개발자들이 타입 체커를 사용하고 있다. 하지만 기존의 mypy, pyright 등은 느린 속도나 부족한 추론 능력으로 인해 불편함을 겪는 경우가 많았다.

최근 공개된 두 개의 Rust 기반 타입 체커, PyreflyTy는 이 문제를 정면으로 해결하고자 한다. 각각 Meta와 Astral이 개발 중인 이 도구들은 압도적인 성능 향상뿐만 아니라, 새로운 방식의 타입 시스템을 도입해 파이썬 개발 경험을 한 단계 끌어올리고 있다.

이 글에서는 Pyrefly와 Ty의 등장 배경, 철학, 성능, 기능적 차이점 등을 꼼꼼하게 비교해 본다. 지금 당신이 새로운 타입 체커 도입을 고민 중이라면, 이 비교가 중요한 선택의 기준이 될 수 있다.

반응형

Pyrefly와 Ty란 무엇인가?

Pyrefly: Meta가 만든 차세대 타입 체커

  • Meta에서 개발한 Pyrefly는 기존 OCaml 기반 Pyre의 후속 격으로, Rust로 전면 재구현되었다.
  • 목표는 명시적 타입 없이도 최대한 많은 오류를 잡아내는 능동적 타입 추론이다.
  • Pyrefly는 성능 면에서도 기존 툴 대비 수십 배 향상을 목표로 하고 있다.

Ty: Astral이 만든 점진적 타입 안정성 지향 도구

  • uv, ruff 등의 툴로 유명한 Astral이 개발 중인 Ty는 “gradual guarantee”라는 철학을 중심으로 설계되었다.
  • 명시적 타입이 없는 경우에도 코드가 깨지지 않도록 보장하며, 필요한 경우에만 타입을 명시하도록 유도한다.

공통점: 새로운 세대의 공통 언어, Rust

Pyrefly와 Ty 모두 Rust로 개발되었고, 성능과 안정성 면에서 기존 도구와는 차원이 다르다.

공통적으로 갖는 특징은 다음과 같다:

  • 증분 분석 지원: 전체 프로젝트를 다시 검사하지 않고, 변경된 부분만 빠르게 분석
  • ruff 기반 AST 파싱: 파이썬 코드를 빠르고 정확하게 파싱
  • LSP 및 IDE 통합: VSCode, Cursor 등 주요 개발 환경과 연동이 쉬움

주요 차이점 비교

1. 성능: 압도적인 속도의 Ty

세 가지 오픈소스 프로젝트를 기준으로 한 벤치마크 결과:

  • PyTorch: Ty가 Pyrefly보다 23배 빠름. 기존 mypy, pyright보다 1020배 향상.
  • Django: Ty가 가장 빠름. Pyrefly는 그 다음, pyright는 현저히 느림.
  • mypy 저장소: Ty > Pyrefly > mypy/pyright 순.

Ty는 현존 타입 체커 중 가장 빠른 속도를 보여주고 있으며, 대규모 프로젝트에서 체감 성능 차이가 크게 나타난다.

2. 타입 철학: 추론 vs 안정성

  • Pyrefly는 명시적 타입 없이도 최대한 추론해 오류를 잡아내는 능동적 방식.
  • Ty는 작동하는 코드를 최대한 유지하면서 점진적으로 타입 안정성을 확보하는 gradual guarantee를 따름.

예를 들어, 명시적 타입이 없는 필드에 값을 할당해도 Ty는 에러를 발생시키지 않고 Unknown | None처럼 처리한다.

3. 증분 분석 방식: 모듈 vs 함수

  • Pyrefly는 변경된 파일(모듈) 단위로 증분 분석을 수행한다.
  • Ty는 Rust의 Salsa 프레임워크를 활용해 함수 단위 증분화를 제공, 더 정밀한 분석이 가능하다.

프로젝트의 규모나 복잡도에 따라 어떤 방식이 적합할지는 달라질 수 있다.

4. 타입 시스템의 혁신성

Pyrefly의 장점:

  • 명시적 타입 없이도 리스트, 딕셔너리 등 복잡한 구조를 정확히 추론
  • 제네릭 타입 추론에서 높은 정확도
  • 복잡한 타입(오버로드, 와일드카드 import 등)에 강함

Ty의 특징:

  • 교차 타입 (Intersection Types), 부정 타입 (Negation Types) 같은 고급 타입 연산 지원
    • 예: MyClass & ~MySubclass → 특정 서브클래스 제외 가능
  • 오류 메시지가 간결하고 직관적
  • 타입 정보가 부족하면 Unknown, @Todo 등으로 명확하게 표현

에디터 연동 및 실제 사용

두 도구 모두 커맨드라인 실행과 LSP 기반 IDE 연동을 제공하며, 실제로 VSCode나 Cursor에서 빠르게 사용 가능하다.

Ty는 Astral의 기존 도구들과의 연동이 잘 되어 있으며, 마크다운 기반 테스트 문서도 활용 가능하다 (ruff의 mdtest와 유사).


어떤 도구를 선택할까?

Pyrefly가 적합한 경우

  • 타입 어노테이션 없이도 오류를 많이 잡고 싶은 경우
  • 복잡한 제네릭, 오버로드를 많이 사용하는 프로젝트
  • Meta 생태계에 익숙하거나 Pyre에서 마이그레이션을 고려 중인 경우

Ty가 적합한 경우

  • 속도가 최우선일 경우 (대규모 프로젝트)
  • 코드가 이미 돌아가고 있고, 점진적으로 타입을 강화하고 싶은 경우
  • 더 직관적인 오류 메시지를 원하는 경우
  • 교차/부정 타입 같은 고급 기능이 필요한 경우

728x90

타입 체커의 미래를 엿보다

Pyrefly와 Ty는 단순한 툴 이상의 의미를 가진다. 파이썬 타입 시스템이 새로운 국면으로 진입하고 있으며, Rust 기반 도구들이 그 물꼬를 트고 있다.

아직 알파 버전이지만, 성능과 철학 모두에서 기존의 도구들과는 분명한 차이를 보인다.

지금 바로 도입을 결정하지 않더라도, 이 두 도구가 향후 파이썬 타입 검사 환경의 기준이 될 가능성은 충분하다. 실험적으로 도입해보고 프로젝트 특성에 맞게 선택해보는 것이 현명한 접근이다.

https://blog.edward-li.com/tech/comparing-pyrefly-vs-ty/

 

Pyrefly vs. ty: Comparing Python’s Two New Rust-Based Type Checkers

A deep dive into Meta's pyrefly and Astral's ty - two new Rust-based Python type checkers that both promise faster performance and better type inference.

blog.edward-li.com

728x90
반응형