본문에서는 Rails 8 애플리케이션을 Dockerfile 방식과 Buildpacks 방식으로 배포했을 때의 결과를 상세히 비교합니다.
Dockerfile 방식 배포 결과
-
초기 설정 및 배포:
kamal setup시 119.5초 소요. Docker 설치 시간(약 60초)을 제외하면 약 1분 만에 배포 완료. Rails 8의 컨테이너 배포 용이성을 보여줍니다. -
코드 변경 후 배포:
ApplicationHelper에hello메서드 추가 후kamal deploy시 107.0초 소요. Docker 빌드 캐시를 활용하여 초기 배포보다 시간 단축. -
새로운 Gem 추가 후 배포:
mission_control-jobsGem 추가 후kamal deploy시 212.3초 소요.Gemfile.lock변경으로 인해 Gem 재설치 필요, 빌드 캐시가 깨져 시간이 더 오래 걸림. Gem 캐싱을 위한 Dockerfile 추가 설정으로 개선 가능. -
최종 이미지 크기: 압축된 Docker Hub 이미지 크기는 219.79 MB.
Buildpacks 방식 배포 결과
Buildpacks 배포를 위해 Procfile 추가, asset_path 변경, PORT 설정, 그리고 heroku/builder:24 빌더와 heroku/ruby, heroku/procfile 빌드팩 지정 등의 추가 설정이 필요했습니다.
-
초기 설정 및 배포:
kamal setup시 203.5초 소요. Dockerfile 방식보다 약 1분 이상 느림. 이는 Buildpack 이미지가 더 크고 빌드 단계에 필요한 패키지가 사전 설치되어 있기 때문으로 추정됩니다. -
코드 변경 후 배포:
ApplicationHelper에hello메서드 추가 후kamal deploy시 71.7초 소요. Dockerfile 방식보다 약 30초 빠름. Buildpacks의 자동 캐싱 기능 덕분입니다. -
새로운 Gem 추가 후 배포:
mission_control-jobsGem 추가 후kamal deploy시 124.3초 소요. Dockerfile 방식보다 약 1분 이상 빠름. Gemfile 변경 시 Buildpacks가 자동으로 캐싱 단계를 처리하여 효율성을 높입니다. -
최종 이미지 크기: 압축된 Docker Hub 이미지 크기는 211.37 MB. Dockerfile 방식과 큰 차이는 없으나 약간 더 작습니다.