Ruby 4.0 환경에서 grpc Gem으로 인한 빌드 속도 저하 문제 해결

Beware grpc gem and Ruby 4.0

작성자
발행일
2025년 10월 24일

핵심 요약

  • 1 grpc 젬은 특정 Ruby 버전(3.1 이상, 3.5.dev 이하)에만 사전 컴파일된 바이너리를 제공하여 Ruby 4.0에서는 소스 컴파일이 발생합니다.
  • 2 Ruby 4.0에서 grpc 젬을 소스 컴파일하면 빌드 시간이 30분 이상으로 급증하여 전체 애플리케이션 빌드 성능을 저하시킵니다.
  • 3 bundle install 시 -j 옵션 없이 타임스탬프를 분석하여 빌드 지연의 원인이 되는 특정 젬을 효과적으로 진단할 수 있습니다.

도입

한 애플리케이션에서 30분 이상 소요되는 비정상적으로 긴 빌드 시간 문제에 직면했습니다. 이 문제는 `sassc`와는 무관했으며, `newrelic-infinite_tracing` 젬이 의존하는 `grpc` 젬과 관련이 있었습니다. `grpc` 젬은 일반적으로 사전 컴파일된 네이티브 확장을 제공하여 설치 시간을 단축하지만, 특정 환경에서는 이러한 이점이 발휘되지 않아 빌드 성능에 심각한 영향을 미쳤습니다. 본 글은 이처럼 예기치 않게 발생한 빌드 지연의 근본 원인을 파악하고 해결하는 과정을 다룹니다.

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 젬은 모든 네이티브 확장을 소스 코드로부터 직접 컴파일하게 됩니다.

  • 성능 저하: 과거 sasscnokogiri 젬이 사전 컴파일 기능 도입 이전에 보였던 것과 유사하게, 소스 컴파일은 매우 오랜 시간을 소요하며 빌드 시간을 30분 이상으로 급증시키는 주된 원인이 되었습니다.

빌드 시간 지연 문제 진단 방법

문제의 근본 원인을 파악하기 위해 다음과 같은 진단 방법을 사용했습니다.

  1. -j 옵션 없이 bundle install 실행: bundle install 명령어를 병렬 설치를 비활성화하는 -j 옵션 없이 단일 스레드로 실행했습니다. 이는 각 젬의 설치 시간을 개별적으로 측정하기 위함입니다.

  2. 타임스탬프 분석: CI 빌드 단계에서 bundle install 프로세스의 각 라인에 출력되는 타임스탬프를 면밀히 분석했습니다. 이를 통해 특정 젬의 설치가 유독 많은 시간을 소요하는 것을 확인할 수 있었습니다.

  3. grpc 젬 식별: 분석 결과, grpc 젬의 설치 단계에서 가장 많은 시간이 소요되었으며, 이것이 전체 빌드 시간 지연의 주범임을 명확히 파악할 수 있었습니다.

결론

결론적으로, `grpc` 젬의 특정 Ruby 버전 잠금 정책과 Ruby 4.0 환경에서의 비호환성이 애플리케이션 빌드 시간을 30분 이상으로 지연시킨 핵심 원인이었습니다. 사전 컴파일된 바이너리의 이점을 활용하지 못하고 소스 코드로부터 직접 컴파일하는 과정이 이러한 성능 저하를 초래했습니다. 이 사례는 젬의 의존성 관리 및 Ruby 버전 업그레이드 시 젬의 호환성, 특히 네이티브 확장을 포함하는 젬의 잠금 버전을 면밀히 검토하는 것이 효율적인 개발 환경 유지에 얼마나 중요한지 보여줍니다.

댓글 0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!