Rails 8 및 Kamal을 활용한 Dockerfile vs. Buildpacks 배포 비교

Dockerfile vs. Buildpacks with Rails 8 and Kamal

작성자
발행일
2025년 06월 20일

핵심 요약

  • 1 Rails 8 애플리케이션 배포 시 Dockerfile과 Kamal의 Buildpacks 기능을 이미지 크기 및 배포 시간 측면에서 비교 분석했습니다.
  • 2 초기 설정 시간은 Dockerfile 방식이 빠르지만, 코드 변경 및 Gemfile 업데이트 시 Buildpacks 방식이 빌드 캐싱 효율성으로 인해 더 빠른 배포 시간을 보였습니다.
  • 3 Buildpacks는 Dockerfile 커스터마이징 없이도 효율적인 배포를 가능하게 하여 개발 편의성을 높이는 대안을 제시합니다.

도입

Rails 8 애플리케이션 배포에 있어 기본 Dockerfile 방식과 Kamal 2.7.0에 도입된 Buildpacks 기능의 성능을 비교하는 것이 이 글의 주된 목적입니다. 저자는 프로젝트 간 Dockerfile 업데이트의 복잡성과 Gem 및 패키지 캐싱 관리의 어려움에 직면하며 Buildpacks에 관심을 갖게 되었습니다. 본 비교는 최신 Rails 8.0.2 버전을 사용하여 초기 설정, 코드 변경, 새로운 Gem 추가 등 일반적인 워크플로우를 가정하고 배포 시간과 최종 이미지 크기를 측정하여 두 방식의 장단점을 명확히 제시합니다.

본문에서는 Rails 8 애플리케이션을 Dockerfile 방식과 Buildpacks 방식으로 배포했을 때의 결과를 상세히 비교합니다.

Dockerfile 방식 배포 결과

  • 초기 설정 및 배포: kamal setup 시 119.5초 소요. Docker 설치 시간(약 60초)을 제외하면 약 1분 만에 배포 완료. Rails 8의 컨테이너 배포 용이성을 보여줍니다.

  • 코드 변경 후 배포: ApplicationHelperhello 메서드 추가 후 kamal deploy 시 107.0초 소요. Docker 빌드 캐시를 활용하여 초기 배포보다 시간 단축.

  • 새로운 Gem 추가 후 배포: mission_control-jobs Gem 추가 후 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 이미지가 더 크고 빌드 단계에 필요한 패키지가 사전 설치되어 있기 때문으로 추정됩니다.

  • 코드 변경 후 배포: ApplicationHelperhello 메서드 추가 후 kamal deploy 시 71.7초 소요. Dockerfile 방식보다 약 30초 빠름. Buildpacks의 자동 캐싱 기능 덕분입니다.

  • 새로운 Gem 추가 후 배포: mission_control-jobs Gem 추가 후 kamal deploy 시 124.3초 소요. Dockerfile 방식보다 약 1분 이상 빠름. Gemfile 변경 시 Buildpacks가 자동으로 캐싱 단계를 처리하여 효율성을 높입니다.

  • 최종 이미지 크기: 압축된 Docker Hub 이미지 크기는 211.37 MB. Dockerfile 방식과 큰 차이는 없으나 약간 더 작습니다.

결론

두 방식의 비교 결과, 초기 `kamal setup` 시간은 Dockerfile 방식이 더 빠르지만, 이는 Buildpack 이미지가 더 많은 사전 설치 패키지를 포함하기 때문으로 보입니다. 반면, 애플리케이션 코드 변경이나 새로운 Gem 추가와 같이 빈번하게 발생하는 배포 시나리오에서는 Buildpacks가 자동 캐싱 기능을 통해 Dockerfile 방식보다 훨씬 빠른 배포 시간을 제공했습니다. 최종 이미지 크기 차이는 미미합니다. Buildpacks는 Dockerfile의 세밀한 커스터마이징 없이도 효율적인 빌드 및 배포를 가능하게 하여 개발자가 '재미없는' 설정 작업에 시간을 덜 할애하고 애플리케이션 개발에 집중할 수 있도록 돕는 강력한 대안입니다.

댓글 0

로그인이 필요합니다

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

로그인 하러 가기

아직 댓글이 없습니다

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