이 접근 방식의 핵심은 Rails의 비즈니스 로직을 보존하면서, 반복적이고 CPU 집약적인 작업을 외부의 전문화된 도구에 위임하는 것입니다.
Rails 확장 전략의 세 가지 원칙
- Rails 추상화 계층 활용: 성능 도우미는 Active Storage, Cache Store, Active Job 등 Rails의 기존 확장 지점에 자연스럽게 통합되어야 합니다. 이는 Rails 설계 철학에 부합하며 시스템 일관성을 유지합니다.
- 도구는 레시피를 알 필요 없음: 성능 도우미는 비즈니스 로직에 대해 전혀 알 필요가 없습니다. 오직 주어진 명령을 순수하게 실행하는 ‘실행 엔진’ 역할을 수행해야 합니다. 이는 도구의 복잡성을 낮추고 재사용성을 높입니다.
- 유지보수 계획: 외부 언어로 구축된 도우미는 팀의 전문성을 요구하므로, 검증된 오픈소스 솔루션을 우선 활용하고 커스텀 솔루션은 최후의 수단으로 고려해야 합니다.
실제 적용 사례
- imgproxy: Active Storage의 이미지 변환 작업을 Go로 작성된 imgproxy에 위임하여 Ruby 프로세스 부하를 줄이고 처리 속도를 향상시킵니다.
imgproxy-railsGem으로 쉽게 통합됩니다. - Playbook.com의 클라우드 처리: 파일 업로드 시 메타데이터 파싱, 썸네일 생성 등 계산 집약적인 작업을 Google Cloud 서비스(서버리스 함수, Cloud Tasks)에 위임하여 Rails 웹 워커의 부담을 경감합니다.
- AnyCable: Action Cable의 Ruby 구현을 Go 기반의 고성능 AnyCable로 대체하여 실시간 통신 처리 용량을 증대시키면서도 개발자 경험은 유지합니다.
- 기타 확장 예시: 웹 서버(Puma, Falcon), Active Storage 어댑터, 백그라운드 작업 큐(Sidekiq, GoodJob), 메일 전송 방식, WebSocket 어댑터 등 Rails는 다양한 영역에서 외부 도구와의 통합을 지원합니다.
이러한 전략은 개발자 생산성과 민첩성을 유지하면서, 성능이 중요한 특정 작업을 고성능 스택으로 분리하여 양쪽의 이점을 모두 취할 수 있게 합니다.