Shopify에서의 Ruby 오픈소스 안식년 경험 공유

A Ruby open-source sabbatical | Rails at Scale

작성자
발행일
2025년 07월 01일

핵심 요약

  • 1 한 Shopify 엔지니어가 Ruby 오픈소스 안식년을 통해 Ruby LSP 인덱서 최적화 프로젝트를 수행하고 있습니다.
  • 2 이 안식년은 대규모 코드베이스에서의 느린 인덱싱, 캐싱 부재, 높은 메모리 사용량 등의 문제를 해결하는 데 중점을 둡니다.
  • 3 안식년 동안 인터프리터 설계(Crafting Interpreters)와 Rust 프로그래밍 언어 학습을 병행하며 깊이 있는 기술 역량을 강화하고 있습니다.

도입

본 글은 Shopify의 Ruby 개발자 경험(Ruby DX) 팀 소속 엔지니어 Sid가 수행하고 있는 Ruby 오픈소스 안식년 경험의 첫 부분을 공유합니다. 이 안식년은 회사의 엔지니어들이 3개월간 특정 관심 분야를 깊이 탐구하고 얻은 지식을 팀과 공유하도록 설계된 프로그램입니다. Sid의 안식년은 주로 Ruby LSP(Language Server Protocol)를 위한 인덱서 추출 및 최적화 프로젝트에 초점을 맞추고 있으며, 이는 언어 서버의 핵심 기능(정의로 이동, 모든 참조 찾기, 코드 완성, 이름 변경 등)을 지원하는 데 필수적인 부분입니다.

현재 Ruby LSP 인덱서 구현에는 몇 가지 중요한 문제가 있습니다. 첫째, 대규모 코드베이스(예: Shopify의 핵심 Rails 모놀리스)의 경우 인덱싱에 약 90초가 소요되어 매우 느립니다. 둘째, 인덱스에 대한 캐싱 기능이 없어 언어 서버가 시작될 때마다 처음부터 인덱스를 다시 빌드해야 합니다. 셋째, 인덱스가 많은 메모리 공간(Shopify 코어의 경우 약 2.2GB)을 차지하며, 마지막으로 현재 Ruby LSP의 내부 구성 요소이기 때문에 다른 서비스에서 인덱스에 접근할 수 없습니다.

Sid는 이러한 문제들을 해결하기 위해 성능, 캐싱, 메모리 사용량 측면에서 개선된 인덱서를 구축하는 데 기여하고 있습니다. 특히, 대규모 코드베이스의 AST(추상 구문 트리) 파싱 및 순회에 대한 Ruby 및 Rust 구현 벤치마킹을 통해 Rust가 훨씬 빠르다는 결과를 확인했습니다. 이러한 경험은 추출될 인덱서의 기술 스택 결정에 중요한 영향을 미칠 것으로 예상됩니다.

안식년 동안 Sid는 두 권의 중요한 기술 서적을 탐독하고 있습니다. 첫 번째는 ‘Crafting Interpreters’로, 인터프리터, 컴파일러 및 프로그래밍 언어에 대한 이해를 높이는 데 도움을 주며, Lox 인터프리터를 Ruby로 구현하는 실습을 통해 언어 분석의 기본 원리를 심화하고 있습니다. 이는 Ruby LSP가 소스 코드를 나타내는 AST를 생성하기 위해 Prism에 의존하는 방식과 직접적으로 연관되어 있습니다. 두 번째 책은 ‘The Rust Programming Language’로, Rust의 소유권(ownership) 및 빌림(borrowing) 규칙과 같은 독특한 패러다임을 이해하는 데 중점을 둡니다. 예를 들어, 값에 대한 단일 소유자 유지와 가변 참조 사용 시 다른 참조의 사용 금지가 메모리 관리 효율성과 데이터 경쟁 방지에 어떻게 기여하는지 명확히 이해하게 되었습니다.

결론

Sid의 Ruby 오픈소스 안식년은 프로젝트 중심의 기여와 심층적인 학습을 성공적으로 결합하고 있습니다. 인덱서 최적화 작업을 통해 Ruby LSP의 성능과 유용성을 크게 향상시키는 동시에, 인터프리터 설계 및 Rust와 같은 새로운 언어 패러다임을 학습하며 개인의 기술 역량을 폭넓게 심화시키고 있습니다. 이 경험은 학습에 대한 열정을 재점화하고, 오픈소스 커뮤니티에 기여하며, 기술적 지식을 공유하는 목표를 달성하는 데 중요한 발판이 되고 있습니다. 앞으로 더 많은 기술적 통찰을 공유할 예정이며, 이는 Ruby 커뮤니티에 귀중한 자산이 될 것입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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