Cal Proxy 소개

Kevin McConnell - Introducing Kamal Proxy - Rails World 2024 - YouTube

3줄 요약

  • Cal Proxy는 Kamal 1의 기존 프록시를 대체하며, Rails 애플리케이션 배포의 무중단성을 강화하고 성능 및 운영 편의성을 극대화합니다.
  • 자동 HTTPS, HTTP/2, 캐싱 등 다양한 기능을 내장하여 프로덕션 환경에 최적화된 배포를 지원합니다.
  • 이를 통해 개발자는 더 쉽고 효율적으로 애플리케이션을 배포하고 관리할 수 있습니다.

Cal Proxy는 37signals의 배포 도구인 Kamal의 핵심 요소로, 기존 Kamal 1의 서드파티 프록시를 대체합니다. 이 프록시는 무중단 배포의 안정성과 효율성을 높이고, Rails 애플리케이션의 프로덕션 성능 및 관리 편의성을 극대화하는 것을 목표로 합니다. Cal Proxy는 자체 호스팅 환경에서 애플리케이션 배포 및 운영 경험을 개선하는 데 중점을 둡니다.

Cal Proxy 개발의 첫 번째 이유는 무중단 배포의 개선입니다. Kamal 1의 프록시 상호 작용은 복잡하고 오류 가능성이 있었습니다. Cal Proxy는 cal proxy deploy 명령을 통해 이 과정을 간소화합니다. 이 명령은 새 컨테이너 상태 확인, 신규 요청 전환, 기존 요청 완료 대기 후 완벽한 전환을 처리하여 배포를 더욱 견고하고 빠르게 만듭니다.

두 번째 이유는 Rails 앱의 프로덕션 성능 및 관리 편의성 향상입니다. 이는 Thruster 라이브러리 경험을 바탕으로, 모든 Rails 앱에 프로덕션 필수 기능을 제공하려는 목표에서 비롯되었습니다.

Cal Proxy의 주요 기능은 세 가지 범주로 나뉩니다:

  • 쉬운 프로덕션 배포:
    • 호스트 기반 라우팅: 단일 서버에서 여러 앱을 호스트 이름으로 라우팅하여 효율적인 멀티 앱 배포를 지원합니다.
    • 자동 HTTPS: Let’s Encrypt를 통한 자동 HTTPS 설정으로 보안 및 설정 간소화를 제공합니다.
    • 요청/응답 버퍼링: 기본적으로 요청과 응답을 버퍼링하여 Rails 프로세스를 클라이언트 문제로부터 보호합니다.
  • 성능 향상:
    • HTTP/2 지원: 기본 HTTP/2를 통해 다수 애셋을 가진 앱의 성능을 향상시킵니다.
    • HTTP 캐싱: Thruster의 인메모리 캐시를 활용, 정적 파일 및 캐시 가능한 응답을 Rails 없이 직접 서빙하여 최대 50배 빠른 속도를 제공하고 Rails 부하를 줄입니다.
    • X-Sendfile 지원: 대용량 파일 응답 시 Rails 대신 Thruster가 직접 파일을 서빙하여 Rails 부담을 줄이고 처리 속도를 높입니다(Active Storage에 유용).
  • 애플리케이션 관리:
    • 유지보수 페이지: cal proxy stop 명령으로 사용자 정의 메시지/템플릿을 포함한 유지보수 페이지를 즉시 표시하고, resume으로 서비스를 재개합니다.
    • 요청 일시 중지: 짧은 유지보수(예: DB 재시작) 중 요청을 큐에 보관, 작업 완료 후 일괄 처리하여 무중단에 가까운 경험을 제공합니다.
    • 롤아웃: 메인 버전과 함께 대체 버전을 배포하고, 특정 트래픽(예: 사용자 ID, 계정 비율)만 새 버전으로 라우팅하여 카나리 배포나 A/B 테스트를 정교하게 수행합니다.

Cal Proxy는 Kamal을 통한 Rails 애플리케이션 배포에 있어 단순한 프록시 이상의 가치를 제공합니다. 무중단 배포의 안정성과 속도를 향상시키고, 자동 HTTPS, HTTP/2, 고급 캐싱 등 프로덕션 필수 기능을 내장하여 성능을 최적화합니다. 또한 유지보수, 요청 일시 중지, 정교한 롤아웃 기능을 통해 운영 편의성을 크게 높였습니다. 향후 로드 밸런싱 및 웹소켓 가속화 기능이 추가될 예정이며, 이는 자체 호스팅의 매력을 더욱 증대시킬 것입니다.