FTP에서 Kamal까지: Rails 애플리케이션 배포의 구술 역사

RailsConf 2025 From FTP to Kamal: 20 Years of Deploying Rails by Ben Curtis

작성자
Ruby Central
발행일
2025년 07월 24일

핵심 요약

  • 1 웹 페이지 배포 방식이 정적 HTML의 FTP 전송에서 동적 Rails 앱의 컨테이너 기반 자동화로 진화했습니다.
  • 2 Rails 앱 배포는 CGI, FastCGI, Mongrel, Passenger 등 다양한 웹 서버 및 애플리케이션 서버를 거쳐 발전했습니다.
  • 3 Capistrano와 같은 자동화 도구와 Heroku, Docker, Kamal 같은 플랫폼 및 컨테이너 기술이 개발자의 배포 부담을 크게 줄였습니다.

도입

본 발표는 Ruby on Rails 개발자이자 Faker Gem 및 Honeybadger의 창시자인 Ben Wyett이 Rails 애플리케이션 배포의 역사적 여정을 탐구합니다. 1991년 웹의 탄생부터 현재에 이르기까지, 웹 애플리케이션이 어떻게 배포되고 관리되어 왔는지에 대한 구술 역사를 제공하며, 특히 Rails 앱 배포 기술의 진화에 초점을 맞춥니다. 이는 단순한 기술 변화를 넘어 개발자들이 직면했던 도전과 이를 극복하기 위한 혁신적인 해결책들을 조명합니다.

Rails 애플리케이션 배포의 역사는 웹 기술의 발전과 궤를 같이합니다.

1. 초기 웹 배포 (1991년 ~ 1993년)

  • HTML 및 FTP: 웹 초기에는 주로 HTML 파일이 배포되었으며, FTP를 통해 공유 호스팅 서버의 홈 디렉토리에 파일을 업로드하는 방식이 일반적이었습니다. VI 에디터를 사용하여 서버에서 직접 파일을 편집하기도 했습니다.
  • CGI (Common Gateway Interface): 1993년, 동적인 웹 페이지의 필요성으로 CGI가 등장했습니다. 웹 서버가 요청을 받으면 Perl 스크립트와 같은 외부 프로그램을 포크(fork)하여 실행하고, 그 결과를 다시 브라우저에 전달하는 방식이었습니다. 이는 각 요청마다 새로운 프로세스를 생성하여 성능 오버헤드가 컸습니다.

2. PHP 및 Mod Ruby의 시대 (1997년 ~ 2004년)

  • PHP (PHP Hypertext Preprocessor): 1997년 PHP 3.0이 출시되며 CGI의 한계를 극복했습니다. PHP 인터프리터를 웹 서버 내부에 통합(mod_php)하여 각 요청마다 프로세스를 생성할 필요 없이 더 효율적인 처리를 가능하게 했습니다.
  • Mod Ruby의 시도: PHP와 유사하게 Ruby 인터프리터를 Apache 내부에 통합하려는 Mod Ruby가 있었으나, 안정성 문제와 애플리케이션 간 격리 부족으로 인해 실용적이지 못했습니다.

3. Rails의 등장과 배포의 진화 (2004년 ~ 2009년)

  • Rails 초기 (CGI 및 FastCGI): 2004년 Rails가 공개된 후, 초기에는 CGI로 배포되었으나 곧 성능 문제에 직면했습니다. 이후 FastCGI (및 SCGI)가 대안으로 부상했습니다. 이는 웹 서버와 별도의 데몬 프로세스를 통해 애플리케이션을 실행하는 방식이었으나, 불안정하고 취약하다는 단점이 있었습니다.
  • Mongrel 및 Mongrel Cluster: Ragel 파서를 기반으로 한 Mongrel은 HTTP를 직접 처리하며 Apache와 같은 웹 서버는 프록시 역할만 수행하는 방식으로 효율성을 높였습니다. Mongrel Cluster는 여러 Mongrel 프로세스를 실행하여 동시 요청 처리를 가능하게 했으나, 개발자가 프로세스 관리를 직접 해야 하는 부담이 있었습니다 (Monit, God 등).
  • Capistrano (2006년): 배포 자동화의 전환점이 된 Capistrano는 SSH를 통해 원격 서버에 코드를 배포하고 애플리케이션을 재시작하는 등의 작업을 스크립트로 처리하여 개발자의 수작업 부담을 크게 줄였습니다.
  • Passenger: Apache나 Nginx 내에서 Ruby 애플리케이션을 격리된 환경으로 실행하는 Passenger는 별도의 프로세스 관리 없이 웹 서버에 통합되어 편리성과 성능을 제공하며 빠르게 인기를 얻었습니다.

4. 현대적 배포 방식 (2009년 이후)

  • Unicorn, Puma, Thin: Mongrel의 아이디어를 계승한 Unicorn (프로세스 포크), Puma (멀티스레드), Thin (이벤트 기반)과 같은 애플리케이션 서버들이 등장하여 동시성 처리와 안정성을 개선했습니다.
  • Heroku: 2009년 Heroku의 등장은 배포 패러다임을 혁신했습니다. git push heroku master 명령 하나로 인프라 관리 없이 애플리케이션을 배포할 수 있게 하여 개발자들이 시스템 관리 부담에서 벗어나게 했습니다.
  • Docker (2013년): “내 컴퓨터에서는 되는데…” 문제를 해결한 Docker는 애플리케이션과 그 종속성을 컨테이너로 묶어 어떤 환경에서든 일관되게 실행될 수 있도록 보장했습니다. 이는 배포의 안정성과 이식성을 획기적으로 향상시켰습니다.
  • Kamal: Docker 기반의 배포 도구인 Kamal은 Capistrano의 정신을 이어받아 Docker 컨테이너를 원격 서버에 배포하고 관리하는 과정을 간소화했습니다. CI/CD 파이프라인과 통합되어 자동화된 배포가 가능해졌습니다.
  • 최신 배포 옵션: 오늘날에는 CI/CD, Docku, Koolifi와 같은 Heroku 유사 환경, Docker Swarm, Docker Compose, Kubernetes, 그리고 Fly.io, Render와 같은 클라우드 플랫폼 등 다양한 배포 옵션이 존재하여 개발자들은 각자의 요구에 맞는 최적의 솔루션을 선택할 수 있습니다.

결론

Rails 애플리케이션 배포의 역사는 초기 수동적인 FTP 파일 전송에서 시작하여 CGI, FastCGI와 같은 동적 스크립트 실행, Mongrel 및 Passenger를 통한 효율적인 애플리케이션 서버 통합, 그리고 Capistrano의 자동화 시대를 거쳐 Heroku의 PaaS 혁신에 이르렀습니다. 궁극적으로 Docker와 Kamal의 등장으로 컨테이너 기반의 일관되고 자동화된 배포가 표준이 되었습니다. 이러한 진화는 개발자들이 인프라 관리의 복잡성에서 벗어나 핵심 비즈니스 로직 개발에 집중할 수 있도록 지원하며, 끊임없이 변화하는 기술 환경 속에서 최적의 배포 방식을 찾아가는 여정의 중요성을 시사합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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