본 발표는 Shopify의 스태프 개발자 Alexander Mumilof가 RBS(Ruby Signature) 파서를 기존의 Ruby C 확장 기반에서 순수 C 라이브러리로 전환한 여정을 다룹니다. 발표는 Ruby 코드의 타입 정의 표준인 RBS의 개념과, 코드 내 주석으로 타입 정보를 포함하는 인라인 RBS의 이점을 설명합니다. 나아가, Shopify의 Sorbet 타입 체커와의 통합 필요성, 즉 Sorbet의 기존 SIG 문법 한계를 극복하고 RBS의 간결한 문법과 Sorbet의 고성능 백엔드를 결합하려는 목표를 제시합니다.
RBS는 Ruby 코드의 타입 정의 표준으로, 개발 편의성을 위해 인라인 형태로 발전했습니다. Shopify는 고성능 Sorbet 타입 체커와 RBS를 통합하려 했으나, Sorbet 기존 SIG 문법의 런타임 의존성과 장황함이 문제였습니다. 이에 RBS의 간결한 문법과 Sorbet의 효율적인 백엔드를 결합하고자 RBS 파서를 순수 C 라이브러리로 전환했습니다.
이 전환의 주요 이점은 높은 이식성, Ruby VM의 Global VM Lock(GVL) 회피를 통한 병렬 처리 성능 향상, 그리고 메모리 및 CPU 사용 효율 극대화입니다.
그러나 순수 C 마이그레이션은 Ruby의 예외 처리 및 자동 메모리 관리 부재라는 도전 과제를 수반했습니다. 오류 처리는 수동 전파 방식으로, 메모리 관리는 ‘Arena Allocation’ 전략을 통해 메모리 누수 위험을 경감시켰습니다. Ruby 표준 라이브러리 데이터 구조 부재는 외부 C 라이브러리 활용으로 해결했습니다.
결론적으로, RBS 파서를 순수 C 라이브러리로 전환하는 것은 이식성, 병렬 처리, 메모리 효율성 측면에서 큰 발전을 의미합니다. 이 마이그레이션의 성공은 초기 설계 단계에서 일관된 오류 처리와 효율적인 메모리 관리 전략(Arena Allocation)을 수립하는 중요성을 보여줍니다. 이는 Shopify의 타입 체크 경험을 향상시키고 Ruby 생태계의 타입 안전성 강화에 기여할 것입니다.