Render.com에 Rails 8 애플리케이션 배포하기: Solid Tri-fecta 및 PostgreSQL 통합

#238 Deploy Rails 8 to Render.com. Solid Trifecta on Postgres

작성자
SupeRails
발행일
2025년 04월 23일

핵심 요약

  • 1 Render.com에 Rails 8 애플리케이션을 배포하는 과정을 PostgreSQL 데이터베이스 통합 및 Solid Tri-fecta 설정을 중심으로 상세히 설명합니다.
  • 2 Solid Queue, Solid Cache, Solid Cable을 단일 PostgreSQL 데이터베이스에 통합하고, Puma 플러그인을 활용하여 웹 서비스 내에서 Solid Queue를 실행하는 방법을 시연합니다.
  • 3 Render Blueprints (render.yaml)를 사용하여 데이터베이스, 웹 서비스, 환경 변수 등을 코드로 정의하고 자동화된 배포를 구현하는 효율적인 방법을 소개합니다.

도입

본 비디오는 Rails 8 애플리케이션을 Render.com 프로덕션 환경에 배포하는 과정을 상세히 다룹니다. 발표자는 자신의 Super Rails 애플리케이션이 Render에서 오랜 기간 안정적으로 운영되고 있음을 언급하며, Render의 웹 서비스, 워커, PostgreSQL 데이터베이스를 활용한 기존 Super Rails의 구성 방식을 간략히 소개합니다. 특히, Active Job을 위해 GoodJob Gem을 사용하고 Redis 대신 PostgreSQL을 활용하는 점을 강조하며, Render 환경에 최적화된 Rails 8 애플리케이션 배포 전략의 필요성을 제기합니다.

Render.com에 Rails 8 애플리케이션을 배포하기 위한 주요 단계와 최적화 방안은 다음과 같습니다.

1. 데이터베이스 변경 및 Solid Tri-fecta 통합

  • PostgreSQL로 전환: Rails 8의 기본 SQLite 데이터베이스를 Render 환경에 적합한 PostgreSQL로 변경합니다. rails db:system:change --to=postgresql 명령어를 사용하여 Gemfile, Dockerfile, database.yml 파일을 업데이트합니다.

  • 단일 데이터베이스 전략: Rails 8은 Solid Cache, Solid Queue, Solid Cable을 기본적으로 별도의 데이터베이스에 구성하지만, 비용 효율성과 관리 편의성을 위해 이를 단일 PostgreSQL 데이터베이스로 통합합니다.

    • Solid Cache, Solid Queue, Solid Cable의 스키마 마이그레이션을 단일 마이그레이션 파일로 병합하고, 별도의 스키마 파일(db/q_schema.rb 등)은 삭제합니다.
    • config/database.yml, config/cable.yml, config/cache.yml 파일에서 각 서비스가 primary 데이터베이스를 사용하도록 설정합니다.
    • config/production.rb에서 Solid Queue의 별도 데이터베이스 연결 설정(config.solid_queue.connects_to)을 제거합니다.

2. Solid Queue 설정 및 모니터링

  • 개발 환경 설정: config/development.rb에서 config.active_job.queue_adapter = :solid_queue를 설정하여 개발 환경에서도 Solid Queue를 사용하여 비동기 작업을 처리하도록 합니다.

  • 프로덕션 환경 최적화: 별도의 워커 프로세스 없이 웹 서비스 내에서 Solid Queue를 실행하기 위해 Puma 플러그인을 활용합니다. Render 환경 변수에 SOLID_QUEUE_IN_PUMA=true를 설정하여 이를 활성화합니다.

  • 작업 모니터링: mission_control-jobs Gem을 설치하여 작업 대시보드를 제공하고, 대시보드를 통해 큐에 추가되거나 완료된 작업을 시각적으로 확인합니다. 개발 환경에서는 인증을 일시적으로 비활성화하여 접근 편의성을 높일 수 있습니다.

3. Render.com 배포 과정

  • 수동 배포:
    • Render에서 PostgreSQL 데이터베이스를 생성하고, 생성된 DATABASE_URL을 복사합니다.
    • 새로운 웹 서비스를 생성하고 GitHub 저장소를 연결합니다.
    • 빌드 명령(bundle exec rails db:migrate) 및 시작 명령(bundle exec rails server)을 설정합니다.
    • 환경 변수(RAILS_MASTER_KEY, DATABASE_URL, SOLID_QUEUE_IN_PUMA=true)를 추가합니다.
    • 헬스 체크 경로를 /up으로 설정하고 자동 배포를 활성화합니다.
    • 배포 후 웹 애플리케이션, 게시물 생성, Rails 콘솔을 통한 작업 트리거 및 Mission Control 대시보드 확인을 통해 정상 작동을 검증합니다.
  • Blueprint (render.yaml) 활용:
    • Render Blueprints는 render.yaml 파일을 통해 데이터베이스, 웹 서비스, 워커, 환경 변수 등 모든 인프라를 코드로 정의하고 자동화된 배포를 가능하게 합니다.
    • render.yaml 파일은 서비스 유형, 지역, 플랜, 디스크 크기, 빌드 및 시작 명령 등을 명시하여 일관되고 반복 가능한 배포를 지원합니다.
    • 원클릭 배포 버튼을 통해 손쉽게 애플리케이션을 배포할 수 있으며, 인프라 구성을 버전 관리하여 추적성을 높입니다.

4. 추가 최적화 및 Render 장점

  • Gemlock 적용: LD_PRELOAD=/usr/lib/libjemalloc.so.2 환경 변수를 설정하여 애플리케이션의 메모리 사용량을 최적화하고 감소시킵니다.

  • Render의 이점: Render는 Heroku에 비해 더 긴 HTTP 요청 타임아웃(100분 대 30초), 더 저렴한 비용, 그리고 영구 디스크(Persistent Disks) 제공과 같은 장점을 가지고 있어, 특히 파일 업로드와 같이 영구적인 스토리지가 필요한 경우에 유리합니다.

결론

본 비디오는 Render.com을 활용하여 Rails 8 애플리케이션을 프로덕션 환경에 성공적으로 배포하는 포괄적인 가이드를 제공합니다. PostgreSQL로의 데이터베이스 전환, Solid Tri-fecta 서비스의 효율적인 통합, 그리고 Puma 플러그인을 통한 Solid Queue의 인라인 실행은 현대적인 Rails 애플리케이션 배포의 핵심 전략임을 보여줍니다. 특히 Render Blueprints를 통한 인프라의 코드화는 배포 프로세스의 자동화 및 관리 효율성을 극대화하며, Gemlock과 같은 최적화 기법 및 Render의 다양한 이점은 안정적이고 비용 효율적인 운영을 가능하게 합니다. 이러한 접근 방식은 Rails 개발자들이 프로덕션 환경에서 애플리케이션을 효과적으로 운영하는 데 중요한 통찰을 제공합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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