grpc 젬의 버전 잠금 및 Ruby 4.0 호환성 문제
grpc 젬은 RubyGems를 통해 다양한 아키텍처 및 플랫폼에 맞는 사전 컴파일된 바이너리(네이티브 확장)를 제공하여 젬 설치 시간을 크게 단축합니다. 예를 들어, 1.76.0 버전의 경우 ‘x86-linux-gnu’, ‘x86_64-linux-gnu’ 등과 같은 특정 플랫폼용 바이너리가 제공됩니다.
그러나 이러한 사전 컴파일된 바이너리는 특정 Ruby 버전에 엄격하게 잠겨 있습니다. 본 사례에서 1.76.0 버전의 grpc 젬은 Ruby >= 3.1 및 <= 3.5.dev 범위 내에서만 호환되도록 설정되어 있었습니다. 이는 Ruby 4.0 버전이 이 호환성 범위에 포함되지 않음을 의미합니다.
-
Ruby 4.0 환경에서의 문제: Ruby 4.0 환경에서
grpc젬을 설치하려고 시도할 경우, 호환되는 사전 컴파일된 바이너리를 찾을 수 없게 됩니다. 이로 인해grpc젬은 모든 네이티브 확장을 소스 코드로부터 직접 컴파일하게 됩니다. -
성능 저하: 과거
sassc나nokogiri젬이 사전 컴파일 기능 도입 이전에 보였던 것과 유사하게, 소스 컴파일은 매우 오랜 시간을 소요하며 빌드 시간을 30분 이상으로 급증시키는 주된 원인이 되었습니다.
빌드 시간 지연 문제 진단 방법
문제의 근본 원인을 파악하기 위해 다음과 같은 진단 방법을 사용했습니다.
-
-j옵션 없이bundle install실행:bundle install명령어를 병렬 설치를 비활성화하는-j옵션 없이 단일 스레드로 실행했습니다. 이는 각 젬의 설치 시간을 개별적으로 측정하기 위함입니다. -
타임스탬프 분석: CI 빌드 단계에서
bundle install프로세스의 각 라인에 출력되는 타임스탬프를 면밀히 분석했습니다. 이를 통해 특정 젬의 설치가 유독 많은 시간을 소요하는 것을 확인할 수 있었습니다. -
grpc젬 식별: 분석 결과,grpc젬의 설치 단계에서 가장 많은 시간이 소요되었으며, 이것이 전체 빌드 시간 지연의 주범임을 명확히 파악할 수 있었습니다.