Kamal을 활용한 Rails 8 애플리케이션 프로덕션 배포 가이드

Ep 7. Deploy with Kamal | Rails New Tutorial with Typecraft

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

핵심 요약

  • 1 Kamal은 Rails 8에 내장된 배포 도구로, Heroku와 같은 서드파티 플랫폼 없이 Ruby on Rails 애플리케이션을 프로덕션 환경에 직접 배포하는 과정을 간소화합니다.
  • 2 로컬에서 Docker 이미지를 빌드하여 컨테이너 레지스트리에 푸시한 뒤, SSH를 통해 대상 서버에 배포하여 애플리케이션을 실행하는 효율적인 워크플로우를 제공합니다.
  • 3 SSL 자동 설정, 영구 스토리지 볼륨 마운트 등 실용적인 기능을 통해 개발자가 인프라를 직접 제어하며 안전하고 안정적인 배포를 구현할 수 있도록 지원합니다.

도입

본 문서는 Ruby on Rails 8에 새롭게 도입된 배포 도구인 Kamal을 활용하여 'Doable'이라는 Rails 애플리케이션을 프로덕션 환경에 배포하는 과정을 상세히 설명합니다. Kamal은 Heroku, Render, Vercel과 같은 외부 플랫폼에 의존하지 않고, 개발자가 직접 제어하는 서버(예: Digital Ocean VPS)에 애플리케이션을 배포할 수 있도록 설계되었습니다. 이 가이드를 통해 Kamal의 기본적인 작동 방식과 `deploy.yaml` 파일의 핵심 설정, 그리고 배포 후 유용한 명령어를 이해하고 실제 Rails 애플리케이션 배포에 적용할 수 있습니다.

Kamal을 이용한 배포 워크플로우는 다음과 같습니다. 먼저 개발자의 로컬 머신에서 Kamal은 Git(GitHub)으로부터 최신 코드를 가져와 이를 기반으로 Docker 이미지를 빌드합니다. 이 이미지는 Ruby on Rails 애플리케이션을 실행하기 위한 컨테이너 역할을 합니다. 빌드된 Docker 이미지는 Docker Hub와 같은 컨테이너 레지스트리에 푸시됩니다. 이후 Kamal은 SSH를 통해 배포 대상 서버(예: Digital Ocean Droplet)에 접속하여 해당 레지스트리에서 이미지를 풀(pull)하고 컨테이너를 실행함으로써 애플리케이션을 구동합니다.

배포를 위한 핵심 설정은 config/deploy.yaml 파일에서 이루어집니다. 주요 설정 항목으로는 서비스 이름(예: doable), 컨테이너 이미지 이름(예: Typcraft HQ/Doable), 그리고 컨테이너 레지스트리 연결 정보가 있습니다. 컨테이너 레지스트리 연결을 위해 Docker Hub 토큰을 생성하고, 이를 KAMAL_REGISTRY_PASSWORD 환경 변수로 설정하여 사용합니다. 프로덕션 환경에서는 hatchbox와 같은 Ruby Gem이나 1Password와 같은 비밀 관리 도구를 활용하는 것이 권장됩니다.

서버 설정에 있어서 Kamal은 Digital Ocean과 같은 VPS(Virtual Private Server)에 SSH 접속만 가능하면 Docker 설치를 포함한 모든 필요한 환경 설정을 자동으로 처리합니다. 또한, deploy.yaml 파일의 proxy 섹션에서 호스트 도메인(예: doable.typcraft.dev)을 설정하면 Let’s Encrypt를 통해 무료 SSL 인증서가 자동으로 적용되어 HTTPS를 통한 보안 접속을 지원합니다.

SQLite 데이터베이스와 같은 영구 데이터 저장을 위해서는 volume 설정을 통해 서버 외부의 영구 스토리지 볼륨을 마운트하는 것이 권장됩니다. 이는 서버 교체나 문제 발생 시 데이터 손실을 방지하는 모범 사례입니다.

배포 전 로컬 시스템에 Docker가 설치되어 있어야 하며, Rails 8은 기본적으로 애플리케이션 루트 디렉토리에 간단한 Dockerfile을 제공하여 이미지 빌드를 용이하게 합니다.

Kamal의 배포 과정은 kamal setup 명령어를 통해 시작됩니다. 이 명령어는 Docker 이미지 빌드 및 푸시, 서버 SSH 접속, 이미지 풀 및 컨테이너 실행 등 일련의 과정을 자동으로 수행하여 애플리케이션을 프로덕션에 배포합니다. 배포 후에는 kamal logs를 통해 애플리케이션 로그를 확인하고, kamal console을 통해 프로덕션 환경에서 Rails 콘솔에 접근할 수 있으며, kamal roll back 명령어를 사용하여 이전 버전으로 롤백하는 것도 가능합니다.

결론

Kamal은 Rails 개발자가 복잡한 DevOps 과정 없이도 자신의 Rails 애플리케이션을 프로덕션 환경에 직접 배포하고 관리할 수 있도록 지원하는 강력한 도구입니다. 몇 줄의 `deploy.yaml` 설정만으로 Docker 기반의 배포, 무료 SSL, 영구 스토리지 마운트 등의 기능을 활용할 수 있습니다. 이는 Rails의 '컨벤션 오버 컨피규레이션' 철학을 배포 영역까지 확장하여, 개발자가 인프라를 완벽하게 제어하면서도 효율적인 배포 파이프라인을 구축할 수 있게 합니다. Kamal은 Rails 애플리케이션 배포의 새로운 표준을 제시하며, 개발자에게 더 큰 자율성과 통제권을 부여합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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