Amer Elsheikh, Python 팀

Python은 Google의 주요 언어 중 하나로, 머신러닝 연구부터 개발자 인프라와 데이터 파이프라인까지 다양한 분야에서 쓰인다. 모노레포의 수십만 개 파일을 관리하려면 빠르고 신뢰할 수 있는 정적 타입 검사가 코드 안전성과 개발 속도 유지에 필수적이다.

Google은 이제 Meta가 개발한 오픈소스 타입 검사기 Pyrefly를 Python 타입 검사기로 사용한다. 기존 타입 검사 인프라를 Pyrefly로 바꾸면서 엔지니어와 에이전트의 작업 속도가 크게 향상됐고, 빌드 시스템의 컴퓨팅 자원 사용량도 상당히 줄었다고 Google은 밝혔다.

Pytype에서 전환한 이유

Google은 10여 년 동안 자체 개발한 타입 검사기 Pytype를 사용했다. Pytype은 Python 타입 검사를 개척했고, 오픈소스 커뮤니티와 협력해 typeshed를 만드는 데 참여했다.

하지만 Python의 타입 시스템이 빠르게 발전하면서 Pytype은 근본적인 어려움에 부딪혔다. 소스 코드의 추상 구문 트리(AST)가 아니라 컴파일된 바이트코드를 분석하는 구조 탓에, Python 버전마다 바이트코드가 달라지는 상황에서 최신 타입 관련 PEP를 따라가기가 점점 더 부담스러워졌다. 현대적인 개발 주기에 필요한 빠른 검사 결과를 제공하는 데도 어려움을 겪었다.

Pytype 업데이트 안내에 설명된 대로, Google은 Python 3.12를 Pytype이 마지막으로 지원하는 버전으로 정하고 최신 오픈소스 대안을 평가해 도입하기로 했다.

Pyrefly를 선택한 이유

Pyrefly에는 Python 타입 검사 생태계의 이전 도구들이 축적한 경험이 반영돼 있다. Google은 Pytype을 대체할 후보를 평가하면서 다음 세 가지 측면에서 Pyrefly가 두드러졌다고 밝혔다.

성능: Rust로 작성된 Pyrefly는 높은 처리량과 지연 평가·병렬 평가를 고려해 설계됐다. Google의 여러 프로젝트를 대상으로 한 내부 벤치마크에서 Pytype보다 약 10배 빨랐으며, 대규모 의존성 그래프에서도 성능이 안정적으로 확장됐다고 한다.

타입 명세 준수: Pyrefly는 공식 타입 준수 테스트 모음에서 약 97%를 기록했고, 새로운 Python 버전과 타입 관련 PEP를 지속적으로 반영하고 있다. Google은 이러한 언어 지원이 모노레포 전반의 Python 버전 업그레이드를 원활하게 한다고 설명했다.

Pyrefly는 새 구문을 지원할 뿐 아니라 Pytype이 과거에 허용하던 일부 불안전한 타입 사용도 검사한다. 예를 들어 Pytype은 int | None이나 int | str 같은 유니온 타입의 값에 대해, 유니온에 포함된 타입 중 하나만 함수의 매개변수 타입과 맞으면 해당 함수에 전달하는 것을 허용했다. 반면 Pyrefly는 유니온 타입을 엄격하게 검사해 다음과 같은 불일치를 잡아낸다.

```

foo.py

def process_id(x: int) -> None:

...

def get_id() -> int | None:

...

val = get_id()

Accepted by Pytype, but rejected by Pyrefly:

process_id(val)

```

오류 진단: Pyrefly는 Rust 컴파일러와 비슷한 진단을 제공한다. 문제가 있는 코드와 오류 원인을 가리키는 주석을 함께 보여주며, 때로는 수정 방법도 제안한다. 위 foo.py 사례에서는 다음과 같은 진단을 낸다.

```

ERROR Argument int | None is not assignable to parameter x with type int in function process_id [bad-argument-type]

--> foo.py:8:12

|

8 | process_id(val)

| ^^^

|

The declared type does not allow None. Consider narrowing the value with an is not None check.

```

성능과 인프라에 미친 영향

Google이 공개한 수치에 따르면 Pyrefly 도입 후 개발 환경과 인프라에서 다음과 같은 변화가 있었다.

  • 개발자가 편집한 뒤 다시 빌드하는 작업에서, 편집 중 데몬이 실행 중인 조건으로 여러 대상을 측정했을 때 증분 빌드 지연 시간이 최대 98% 줄었다. 대규모 머신러닝 대상에서는 타입 검사 시간이 몇 분에서 몇 초로 감소했다.
  • 주요 라이브러리와 모델을 대상으로 한 콜드 캐시 벤치마크에서, 전체 빌드의 임계 경로 중 타입 검사가 차지하는 시간이 90~99% 줄었다. Google은 이를 통해 빌드 파이프라인의 오랜 병목을 없앴다고 설명했다.
  • Python 타입 검사에 필요한 Google의 일일 최대 컴퓨팅 점유량이 80% 넘게 감소해, 매일 수천 개의 CPU 코어를 절약했다.

아래 그림은 규모가 다른 대상에서 Pytype과 Pyrefly의 편집·재빌드 전체 지연 시간을 비교한다.

[](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRNZHxQAbx9PNilxTAW04T1lLNqzvgxvVVWnCZHb0apsvl2EfEQ2DWmOkC0KFhduxTRZ9JRA_6pOPqGoiOvjiN_mNJOKrTZQxlzStCSnlj9N8yblR776WDuhOEjMvCnsPgowXUj-OC8iSYabkBDdwqtNjjzAE72eIF8xBZ5VZXpbEZbWGTJuFbYQcfS7M/s1600/incremental_rebuild_by_size_v5.png)

Google 엔지니어들의 반응

Google은 집계된 성능 지표뿐 아니라 Pyrefly가 일상적인 개발 주기를 개선해 엔지니어와 AI 코딩 에이전트가 버그를 더 빨리 찾도록 했다고 밝혔다. Google 엔지니어들은 다음과 같이 평가했다.

“프로젝트를 Pyrefly로 전환한 뒤 Pytype 작업이 끝나기를 기다린 적이 없다. 에이전트 기반 코딩에서는 효과가 두 배로 느껴진다. 이제 타입 검사가 테스트 실행보다 빠르다.” — Peter Hawkins, JAX 기술 책임자

“Pyrefly가 무엇이 잘못됐는지 정확히 알려주는 명확한 오류를 제공하는 점이 정말 좋다.” — Yotam Doron, Gemini 대규모 사전학습 담당

“Python 도구에 투자하면 연구 속도가 크게 향상된다. Pyrefly는 실험을 빠르게 반복하게 해주고, 명확하고 실행 가능한 오류 메시지로 미묘한 버그를 일찍 잡아낸다.” — Tom Ward, GDM Science

Google은 이번 도입이 공통 오픈소스 개발 도구를 함께 활용하는 가치를 보여준다고 밝혔다. 또한 도입 과정에서 신속하게 대응하고 업스트림 이슈를 처리한 Pyrefly 팀에 감사를 표했으며, 앞으로도 협력하고 Python 오픈소스 커뮤니티에 기여하겠다고 전했다.

Pyrefly에 대해 더 알아보거나 프로젝트에서 사용해 보려면 Pyrefly 웹사이트와 Pyrefly GitHub 저장소를 방문하면 된다.