Kamal은 Rails 8부터 기본으로 포함된 Docker 기반 배포 도구로, YAML 파일을 통한 간결한 설정과 블루/그린 배포를 지원하며 ‘어디든 웹 앱 배포’를 가능하게 합니다. kamal setup 명령 하나로 서버 초기 설정부터 Docker 설치, 이미지 빌드 및 레지스트리 푸시, 서버에서 이미지 풀 및 컨테이너 실행까지 일괄 처리하여 배포 과정을 극도로 단순화합니다. 발표자는 AWS CodePipeline을 활용한 자동 배포 파이프라인과 EC2, ECR, RDS, ALB, CloudWatch Logs 등으로 구성된 아키텍처에서 Kamal을 운영했습니다.
주요 운영 경험 및 문제 해결 사례
- ALB 헬스 체크 문제:
- ALB는 프라이빗 IP로 헬스 체크를 수행하나, Kamal Proxy는 호스트 이름을 기반으로 컨테이너에 라우팅하여 헬스 체크 요청이 Rails 앱에 도달하지 못했습니다.
- 해결책: 하나의 애플리케이션이 프라이빗 IP 요청을 받아들이도록 설정하여 헬스 체크를 통과시켰습니다.
- 다인 개발 환경에서의 배포 불편함:
- 수동 배포는 개발자별 SSH 키 및 ECR 푸시 권한 관리의 번거로움과 반복적인 배포 요청으로 비효율적이었습니다.
- 해결책: AWS CodePipeline을 구축하고 CodeBuild 단계에서
kamal deploy명령을 실행하도록 자동화하여 배포 과정을 간소화했습니다.
Kamal의 주요 장점
-
자동 SSL 지원:
ssl: true설정만으로 Let’s Encrypt를 통한 SSL 인증서 발급 및 자동 갱신을 처리합니다. -
간편한 유지보수 및 디버깅:
kamal console,kamal logs명령으로 Rails 콘솔 접속 및 애플리케이션 로그 확인이 용이합니다. -
환경별 배포 용이성:
deploy.staging.yml등 환경별 설정 파일을 분리하고kamal deploy -d staging명령으로 쉽게 배포 환경을 전환할 수 있습니다. -
Docker 로그 수집 설정 간편:
driver: awslogs설정으로 CloudWatch Logs 등으로 로그를 쉽게 수집할 수 있습니다.