Falcon을 활용한 Ruby 웹 애플리케이션의 성능, 확장성 및 우아함 극대화

Building and Deploying Interactive Rails Applications with.. / Samuel Williams - Kaigi on Rails 2025

작성자
Kaigi on Rails
발행일
2025년 11월 25일

핵심 요약

  • 1 Falcon 웹 서버는 Fiber 기반의 효율적인 동시성 모델을 통해 Ruby 애플리케이션의 성능과 확장성을 혁신하며, Shopify에서 일일 300억 건 이상의 요청을 처리하며 성공적으로 운영되고 있습니다.
  • 2 Falcon은 HTTP/2, TLS, Active Record, Active Job, Action Cable 등 Rails 8의 주요 기능과 완벽하게 통합되며, Async, Traces, Metrics, Console과 같은 보조 Gem을 통해 개발, 배포, 모니터링을 위한 포괄적인 솔루션을 제공합니다.
  • 3 개발자는 Falcon Rails Gem과 Agent Context Gem을 활용하여 AI 에이전트의 도움을 받아 차세대 대화형 Ruby 웹 애플리케이션을 쉽고 빠르게 구축하고 배포할 수 있습니다.

도입

본 발표는 Ruby 애플리케이션의 동시성, 효율성, 확장성, 그리고 우아함에 대한 새로운 비전을 제시하며 시작됩니다. 발표자는 2017년부터 Ruby의 한계를 극복하고자 하는 개인적인 열망으로 Async Gem과 Falcon 웹 서버를 개발하게 된 배경을 설명합니다. 특히, Ruby 애플리케이션이 대규모 인프라 없이도 엄청난 부하를 처리할 수 있다면 웹 애플리케이션 구축 방식이 어떻게 변화할지에 대한 질문을 던지며, 이는 Ruby의 가치를 높이고 전 세계 개발자들에게 더 나은 경험을 제공하기 위한 중요한 전환점이 될 것임을 강조합니다. 이러한 아이디어는 Shopify에서 Falcon을 성공적으로 배포하며 입증되었으며, 이는 Ruby 생태계에 큰 영향을 미 미치고 있습니다.

Falcon의 핵심 기술 및 Rails 통합

Falcon은 Ruby의 동시성을 혁신하기 위해 설계된 웹 서버로, Async 프레임워크와 IO event Gem을 기반으로 합니다. 특히, FiberScheduler 인터페이스를 활용하여 Fiber의 실행을 효율적으로 관리하며, 요청당 하나의 Fiber를 사용하는 모델을 통해 이벤트 루프 디자인의 확장성을 극대화합니다.

Rails 애플리케이션 구축

1. 기본 설정 및 HTTP/2 지원

  • 새로운 Rails 프로젝트에서 Puma 대신 Falcon을 사용하도록 전환합니다.

  • falcon serve 명령은 기본적으로 HTTP/2와 TLS를 지원하며, localhost Gem을 통해 로컬 개발 환경에서 자체 서명된 인증서를 쉽게 설치하여 HTTPS 개발 환경을 구축할 수 있습니다.

  • Falcon은 Rack 호환 서버 중 유일하게 HTTP/2 및 TLS를 기본으로 제공하여 최신 웹 애플리케이션 개발에 최적화되어 있습니다.

2. Active Record 지원

  • Falcon은 데이터베이스 쿼리를 포함한 비블로킹 I/O에 매우 효율적입니다.

  • Rails 8에서는 config.active_record.async_query_isolation = :fiber 설정을 통해 Fiber당 요청 격리를 보장하여, 각 요청이 고유한 데이터베이스 연결을 사용하도록 하여 동시성 환경에서의 안정성을 확보합니다.

  • 이를 통해 Falcon은 Active Record와 함께 높은 처리량을 제공하며, 동일한 하드웨어 리소스에서 Puma 대비 200% 이상의 처리량 개선을 시연했습니다.

3. Active Job 및 Async Job

  • 기존의 Active Job 러너(Solid Queue, Sidekiq)는 Async를 인식하지 못하여 I/O 발생 시 동시성 제한이 발생할 수 있습니다.

  • Async Job Gem은 백그라운드 작업의 동시성을 높이기 위해 개발되었습니다. 이는 Redis 또는 인메모리 큐를 사용하여 작업 데이터를 직렬화하고 실행하며, 기존 어댑터와 달리 래퍼 없이 Active Job을 직접 호출하여 오버헤드를 줄입니다.

  • active_async_job_adapter Gem을 설치하고 Rails 설정에서 큐 어댑터를 정의하여 사용할 수 있습니다.

4. Action Cable 및 Async Cable

  • Action Cable은 HTTP 1.1만 지원하지만, Falcon은 기본적으로 HTTP/2를 사용합니다.

  • Async Cable Gem은 Action Cable의 구현을 Async WebSocket으로 대체하여 HTTP 1.1과 HTTP/2를 모두 지원하며, 기존 Action Cable보다 2배 이상의 메시징 속도를 제공하여 호환성과 성능을 개선합니다.

5. 실시간 양방향 스트리밍

  • Rack 3의 주요 기능인 실시간 양방향 스트리밍을 활용하여 순서가 보장된 메시지 전달이 가능합니다.

  • 서버 측 렌더링을 통해 브라우저에서 Flappy Bird와 같은 대화형 게임을 실행하는 데모를 통해 Falcon의 강력한 실시간 스트리밍 지원 능력을 시연했습니다.

애플리케이션 배포

1. Falcon Host

  • 개발 시 falcon serve 대신 프로덕션 배포를 위해 falcon host 명령을 사용합니다. 이는 Falcon.rb 서비스 구성 파일을 읽어 애플리케이션 실행 방식을 정의합니다.

  • Falcon.rb 파일은 Rack 및 Let’s Encrypt TLS 환경을 포함하여 표준 Rails 애플리케이션 배포에 필요한 기본 구성을 제공합니다.

  • 단일 Falcon.rb 파일 내에서 웹 애플리케이션과 백그라운드 작업 서비스를 통합하여 배포를 간소화할 수 있습니다.

2. 가상 호스팅 및 시스템 통합

  • falcon virtual 명령을 사용하여 단일 서버에서 여러 Falcon.rb 서비스 파일을 실행하고, HTTP 및 HTTPS 엔드포인트를 모두 바인딩하여 가상 호스팅을 구현할 수 있습니다.

  • Systemd의 type=notify 프로토콜을 지원하여 시스템 서비스 프레임워크와 직접 통합되며, Kubernetes 환경에서는 로그 파일을 통한 Readiness Probe 통신을 지원합니다.

애플리케이션 모니터링

1. 자동 헬스 체크 및 슈퍼바이저

  • Async 컨테이너는 자식 프로세스의 헬스 체크를 자동으로 수행하여 애플리케이션이 중단되거나 이벤트 루프가 정체될 경우 프로세스를 강제로 재시작합니다.

  • 슈퍼바이저 서비스는 웹 애플리케이션과 함께 실행되며, 메모리 사용량 모니터링 및 메모리 누수 감지와 같은 다양한 기능을 수행할 수 있습니다. 메모리 제한을 설정하여 애플리케이션 안정성을 확보합니다.

2. Traces Gem

  • Traces Gem은 애플리케이션 실행 추적을 통해 성능을 측정하고 다양한 작업의 지연 시간을 모니터링하는 데 유용합니다.

  • 기존 코드에 최소한의 오버헤드로 계측 기능을 추가할 수 있는 인터페이스를 제공하며, W3C 추적 사양에 따른 분산 트레이싱을 지원합니다. OpenTelemetry 백엔드도 제공됩니다.

3. Metrics Gem

  • Metrics Gem은 카운트, 지속 시간, 크기 등 고빈도 이벤트를 집계하여 효율적으로 저장하고 시각화하는 데 사용됩니다.

  • Traces Gem과 유사한 인터페이스를 제공하며, 애플리케이션의 상태를 추적하고 오류 조건을 감지하는 데 유용합니다.

4. Console Gem (통합 로깅)

  • Console Gem은 여러 어댑터와 출력을 지원하는 간단한 로깅 인터페이스를 제공합니다.

  • 주제 기반 로그 형식과 구조화된 데이터 포함을 지원하며, 출력 래퍼를 추가하여 로그 메시지를 풍부하게 하거나 수정할 수 있습니다. DataDog 트레이스 컨텍스트 기반의 로그 상관관계 기능을 통해 디버깅 효율성을 높일 수 있습니다.

간소화된 개발 경험

  • Falcon Rails Gem은 Falcon, localhost, Async Job, Async Cable, Traces, Metrics, Console 등 오늘 논의된 많은 기능을 기본적으로 포함하여 설정을 간소화합니다.

  • Agent Context Gem은 AI 에이전트가 참조할 수 있는 문서를 프로젝트에 복사하여, 개발자가 AI 에이전트에게 Falcon을 사용하도록 애플리케이션을 업데이트하라고 지시할 수 있게 합니다. 이는 Ruby 개발을 더욱 쉽고 재미있게 만듭니다.

결론

결론적으로 Falcon은 Async, Fiber 기반의 강력한 아키텍처를 통해 Ruby 웹 애플리케이션의 효율성, 확장성, 그리고 우아함을 한 단계 끌어올리는 혁신적인 솔루션입니다. Shopify에서의 대규모 성공 사례는 Falcon의 안정성과 성능을 명확하게 입증하며, Rails 8과의 완벽한 통합, Active Record, Active Job, Action Cable, 그리고 실시간 스트리밍에 대한 포괄적인 지원을 제공합니다. 또한, Falcon Host, Falcon Virtual, Systemd 및 Kubernetes 통합을 통한 간편한 배포와 자동 헬스 체크, 슈퍼바이저, Traces, Metrics, Console을 포함한 강력한 모니터링 도구는 개발자가 안정적이고 고성능의 애플리케이션을 구축하고 운영할 수 있도록 지원합니다. `Falcon Rails` Gem과 `Agent Context` Gem을 통해 개발 과정이 더욱 간소화되어, 모든 Ruby 개발자가 다음 세대의 대화형 애플리케이션을 자신 있게 구축할 수 있도록 독려합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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