Rails 8을 활용한 애플리케이션 개발 경험 및 도전 과제

What's new in Rails 8 - John Sherwood

작성자
Ruby Australia
발행일
2025년 05월 28일

핵심 요약

  • 1 Rails 8은 간편한 앱 개발을 가능하게 하지만, 실제 운영 환경에서는 클라우드 서비스와 같은 추가적인 고려 사항이 필요합니다.
  • 2 AI 도구는 개발 생산성을 높이지만, 최신 프레임워크 변경사항을 반영하지 못해 때로는 부정확한 정보를 제공할 수 있습니다.
  • 3 Kamal, Action Text, Solid Cable, Hotwire 등 Rails 8의 주요 기능들을 활용하며 겪었던 실용적인 문제점과 해결 방안을 공유합니다.

도입

본 발표는 Ruby on Rails 8을 활용하여 애플리케이션을 개발하면서 겪었던 실제 경험과 도전 과제들을 심층적으로 다룹니다. Rails 8이 초기 설정 및 개발 과정을 간소화하는 많은 발전을 이루었음에도 불구하고, 프로덕션 수준의 확장 가능하고 안정적인 솔루션을 구축하는 과정에서 직면하게 되는 복잡성과 절충안에 대해 상세히 설명합니다. 특히 데이터베이스 관리, 배포 전략, 실시간 기능 구현 등 다양한 측면에서 Rails의 기본 제공 기능과 개발자의 실용적인 선택 사이의 간극을 명확히 보여주며, 때로는 Rails의 '기본 방식'에서 벗어나야 할 필요성을 강조합니다.

인프라 및 배포

Rails 8은 개발 편의성을 위해 SQLite를 기본 데이터베이스로 제공하지만, 발표자는 백업 및 관리의 용이성, 그리고 안정성을 고려하여 AWS RDS의 PostgreSQL을 선호합니다. 배포 도구로는 Kamal 2를 활용하여 Docker 컨테이너 기반의 애플리케이션 배포를 간소화할 수 있음을 강조합니다. Kamal은 서버 초기화, 데이터베이스 설정, 애플리케이션 배포, 프로덕션 콘솔 접근, 로그 확인 등을 단일 명령어로 처리할 수 있게 하여 배포 과정을 효율적으로 만듭니다. 그러나 AI 모델이 Kamal 1 버전에 기반하여 학습되어 Kamal 2에 대한 부정확한 정보를 제공함으로써 문제 해결에 예상치 못한 시간을 소요하게 만들었던 경험을 공유합니다. 또한, 비용 절감을 위해 Intel 기반 서버에서 ARM 아키텍처(Graviton)로 마이그레이션하여 성공적으로 운영하고 있음을 언급합니다.

AI 활용의 양면성

발표자는 Cursor 및 Windsurf와 같은 AI 기반 코드 생성 도구를 적극적으로 활용하여 개발 생산성을 크게 향상시켰습니다. 특히 Rails 8의 새로운 기능이나 익숙하지 않은 부분에 대한 문서화가 부족할 때 AI의 도움을 받아 빠르게 코드를 생성할 수 있었습니다. 그러나 AI는 Rails 8의 최신 변경사항이나 Hotwire와 같은 특정 프레임워크의 미묘한 특성을 제대로 반영하지 못하고, 때로는 구식 React 코드나 Rails 7 기반의 코드를 제안하는 한계를 보였습니다. 이러한 AI의 부정확한 정보는 오히려 디버깅 시간을 늘리는 원인이 되기도 했습니다.

Rails 8 주요 기능 및 도전 과제

  • Action Text: Rails 6부터 도입된 풍부한 텍스트 편집 기능인 Action Text는 사용이 간편하지만, 기본적으로 마크다운을 지원하지 않는다는 점(Rails 8.1에서 추가 예정)이 한계로 지적됩니다. 특히 파일 첨부 시 S3 버킷 권한 설정 및 비동기 처리 과정에서 이미지 로딩 지연 문제가 발생했으며, Cloudflare를 통한 이미지 프록시 설정 시 S3 버킷이 공개적으로 노출되어 HTML 파일 업로드 보안 취약점이 발견된 사례를 공유하며 Rails 기본 기능의 보안적 함의를 조명합니다.
  • Solid Cache & Solid Cable: Solid Cache는 Redis 대신 보조 데이터베이스를 캐싱에 사용하는 대안을 제공하지만, Action Cable의 후속인 Solid Cable과 함께 사용할 때 다수의 데이터베이스가 생성되는 등의 예상치 못한 문제가 발생할 수 있습니다. 특히 Solid Cable을 통해 모든 사용자에게 레코드 업데이트를 브로드캐스트할 때, 인증(Warden) 관련 오류가 발생하여 인증된 사용자에게만 특정 정보를 보여줘야 하는 시나리오에서 복잡성을 야기할 수 있음을 데모를 통해 보여줍니다.
  • Propshaft: Rails 7부터 Sprockets를 대체하여 도입된 새로운 자산 파이프라인으로, JavaScript 종속성을 단순화하고 npm 없이도 빌드를 가능하게 하여 개발 워크플로우를 개선합니다. 발표자는 React나 npm 사용을 지양하고 Tailwind CSS와 Hotwire를 통해 ‘Rails 방식’으로 개발을 진행한 것에 만족감을 표합니다.
  • Hotwire: 모달 대신 페이지 이동 방식을 선호하며 Hotwire를 통한 단순하고 효율적인 UI 구축에 만족합니다. 그러나 AI가 Hotwire 관련 최신 변경사항을 반영하지 못하는 문제점은 여전히 존재합니다.
  • 인증 (Authentication): Rails 8에 내장된 인증 기능이 있지만, 이메일 확인, 비밀번호 재설정, SSO, 2FA, 세션 잠금 등 고급 기능이 부족하여 Devise Gem을 계속 사용하는 이유를 설명합니다.
  • Thruster: Kamal이 자동으로 설정하는 Docker 컨테이너 내의 pseudo-Engine X 역할의 로드 밸런서로, SSL 종료 등을 처리하며 개발 편의성을 높입니다.

기타 개발 도구

발표자는 RSpec(기본 테스트 프레임워크 대신 선호), RuboCop(Rails 8에 내장), GitHub Actions, Terraform, Ansible, Pundit(권한 부여 라이브러리) 등 개발 생산성과 코드 품질을 높이는 다양한 도구들을 언급하며, 각 도구의 장점과 활용 경험을 공유합니다.

결론

결론적으로, 발표자는 Rails 8이 개발자에게 많은 편의성과 생산성 향상을 제공하지만, 실제 프로덕션 환경에서는 예상치 못한 문제와 복잡성에 직면할 수 있음을 강조합니다. AI 도구의 한계, Action Text 및 Solid Cable과 같은 기본 기능의 미묘한 동작 방식, 그리고 보안 및 성능 최적화 과정에서 발생하는 트레이드오프는 개발자가 Rails의 'convention over configuration' 철학을 맹목적으로 따르기보다는, 프로젝트의 특성과 운영 환경을 면밀히 고려하여 가장 적합한 도구와 방식을 선택하는 것이 중요함을 시사합니다. 이러한 실질적인 경험 공유는 Rails 개발자들이 더욱 견고하고 효율적인 애플리케이션을 구축하는 데 귀중한 통찰력을 제공합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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