On Rails 팟캐스트: Jean Busousier와의 Ruby on Rails 심층 분석 - Shopify의 성능 최적화 전략 및 오픈 소스 기여

Jean Boussier & IO-Bound Misconceptions - On Rails Podcast

작성자
Ruby on Rails Youtube
발행일
2025년 07월 15일

핵심 요약

  • 1 Shopify의 선임 스태프 엔지니어인 Jean Busousier는 Ruby on Rails 앱의 성능 최적화와 인프라 관리 경험을 공유합니다.
  • 2 그는 Ruby의 GVL(Global VM Lock)과 애플리케이션의 IO-바운드/CPU-바운드 특성을 이해하는 것이 중요하다고 강조하며, Shopify가 Puma 대신 Unicorn 기반의 Pitchfork를 사용하는 이유를 설명합니다.
  • 3 또한, 개발자들이 오픈 소스 젬 코드를 직접 탐색하고, 자신의 실제 문제를 해결하는 방식으로 오픈 소스에 기여할 것을 권장합니다.

도입

이번 On Rails 팟캐스트에서는 Shopify의 선임 스태프 엔지니어인 Jean Busousier와 함께 프로덕션 환경에서 Ruby on Rails 애플리케이션을 구축하고 유지 관리하는 데 필요한 기술적 의사결정에 대해 심층적으로 논의합니다. 특히 Ruby 스레드, GVL(Global VM Lock), IO-바운드와 CPU-바운드의 진정한 의미, 효과적인 성능 측정 방법, 그리고 '빠르다'는 것의 다양한 의미에 초점을 맞춥니다. Busousier는 또한 젬 의존성 관리, 소스 코드 읽기의 중요성, 그리고 Rails Core에서의 경험을 바탕으로 프레임워크의 근본적인 시스템을 이해하고자 하는 개발자들에게 귀중한 조언을 제공합니다.

Jean Busousier는 Ruby 언어 자체에 대한 깊은 만족감을 표현하며, Ruby의 간결함과 Rails(특히 Active Record, Active Support, Action Controller)의 직관적인 접근 방식이 개발 생산성을 높인다고 설명합니다. 과거 PHP와 Django 경험을 바탕으로 Rails에 정착하게 된 그는, Rails가 개발자에게 불필요한 반복 작업을 줄여주고 핵심 비즈니스 로직에 집중할 수 있게 해주는 ‘Don’t Repeat Yourself’ 철학을 잘 구현하고 있다고 말합니다.

Shopify에서 그는 Rails 인프라 팀에 소속되어 프레임워크의 성능 최적화, 최신화 유지, 버그 해결, 그리고 개발자 생산성 향상을 위한 자동화 도구 개발(예: 수백 개의 앱에 대한 Rails 업그레이드 자동화)에 주력합니다. Shopify는 Rails Edge 버전을 사용하여 최신 수정 사항을 즉시 적용하는 유연성을 확보하고 있으며, Busousier는 수많은 Ruby 젬에 기여하며 생태계 안정화에 중요한 역할을 하고 있습니다. 그는 젬 의존성을 마치 자신의 코드베이스의 일부처럼 다루고, 문제가 발생했을 때 직접 소스 코드를 열어보고 수정하는 것을 주저하지 말아야 한다고 강조합니다. 이는 개발자의 성장에 매우 중요하며, 대부분의 젬은 생각보다 복잡하지 않다고 덧붙입니다.

가장 중요한 논의 중 하나는 Shopify가 Puma 대신 Unicorn 기반의 Pitchfork를 사용하는 이유입니다. Busousier는 많은 Rails 애플리케이션이 흔히 생각하는 것과 달리 IO-바운드(IO 작업에 많은 시간을 소모)가 아닌 CPU-바운드(Ruby 코드 실행에 많은 시간을 소모)일 수 있다고 지적합니다. Shopify의 경우, 요청 처리 시간의 60-70%가 Ruby 코드 실행에, 30%가 IO 작업에 소요됩니다. Ruby의 GVL은 한 번에 하나의 스레드만 Ruby 코드를 실행할 수 있도록 제한하므로, CPU-바운드 애플리케이션에서 Puma와 같은 다중 스레드 서버를 사용하면 GVL 경합으로 인해 오히려 요청 지연 시간(latency)이 증가할 수 있습니다. 반면 Unicorn/Pitchfork는 다중 프로세스를 활용하고 fork 시스템 콜의 Copy-on-Write(쓰기 시 복사) 메커니즘을 통해 메모리 사용량을 효율적으로 관리합니다. 이는 처리량(throughput)을 높이는 동시에 지연 시간을 최적화하는 Shopify의 전략입니다.

그는 성능 측정 시 지연 시간과 처리량의 차이를 명확히 이해하는 것이 중요하다고 강조하며, ‘빠르다’는 것이 항상 동일한 의미는 아니라고 설명합니다. 또한, GVL 경합을 측정하기 위한 Shopify/GVL_tools와 같은 도구의 중요성을 언급합니다. 애플리케이션 최적화 측면에서는, 외부 서비스 호출과 같은 잠재적으로 느리거나 실패할 수 있는 작업을 백그라운드 작업으로 오프로드하는 것을 강력히 권장합니다. 마지막으로, 그는 Rails의 ‘마법’이라는 표현에 대해 비판적인 시각을 드러내며, 개발자들이 프레임워크의 소스 코드를 직접 탐색하고 이해함으로써 시스템에 대한 깊은 통찰력을 얻을 수 있다고 조언합니다. 오픈 소스 기여는 자신의 실제 필요를 해결하는 ‘가려운 곳을 긁는’ 방식으로 이루어져야 한다고 역설합니다.

결론

Jean Busousier와의 대화는 Ruby on Rails 생태계에 대한 깊이 있는 이해와 실제 프로덕션 환경에서의 최적화 전략을 제공합니다. Shopify의 사례를 통해 GVL의 영향, IO-바운드와 CPU-바운드 애플리케이션의 차이, 그리고 지연 시간과 처리량의 중요성을 명확히 인지하는 것이 얼마나 중요한지 알 수 있습니다. 그의 조언은 단순히 프레임워크를 사용하는 것을 넘어, 그 내부 동작 원리를 이해하고, 적극적으로 오픈 소스 커뮤니티에 기여함으로써 개발자로서 성장할 수 있는 실질적인 방안을 제시합니다. 궁극적으로 기술적 의사결정은 비즈니스 목표와 맥락에 따라 달라져야 하며, '빠르다'는 개념은 상대적이라는 그의 통찰은 모든 개발자에게 귀감이 될 것입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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