Rails 8과 최신 Ruby 개발 환경 탐험: AI와 함께하는 실전 경험

What's new in Rails 8 - John Sherwood

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

핵심 요약

  • 1 Rails 8은 배포 간소화 및 기본 기능 강화로 개발 경험을 크게 개선했으나, SQLite 백업, Action Text의 파일 처리, Solid Cable 인증 문제 등 여전히 고려할 점이 존재합니다.
  • 2 Kamal, Hotwire, Propshaft 등 Rails 8의 주요 기술 스택은 개발 편의성을 높이지만, AI 도구의 구버전 정보 제공 및 특정 기능의 한계로 인해 수동 조정이 필요할 수 있습니다.
  • 3 AI(Cursor, Warp)는 코드 생성 및 문서 탐색에 유용하지만, 최신 Rails 버전의 변경 사항이나 특정 라이브러리(예: Devise)와의 통합에서는 여전히 개발자의 판단과 디버깅이 중요합니다.

도입

본 발표는 Ruby on Rails 개발자가 Rails 8을 사용하여 새로운 애플리케이션을 구축하며 겪은 실제 경험과 인사이트를 공유합니다. 특히 Rails 8의 발전된 기능과 배포, 실시간 처리, 프론트엔드 통합 등 다양한 측면을 다루며, 개발 과정에서 AI 도구(Cursor, Warp)를 적극 활용한 경험을 상세히 설명합니다. Rails가 제공하는 '기본' 방식과 개인적인 선호 사이의 균형을 찾아가는 과정에서 발생한 도전 과제와 해결 방안을 제시하며, 현대적인 Ruby 개발 환경에 대한 실질적인 조언을 제공합니다.

Rails 8의 발전과 배포 전략

  • 개발 경험 간소화: Rails 8은 애플리케이션 구축 및 배포 과정을 크게 개선하여 초기 설정 시간을 단축했습니다.
  • 데이터베이스 선택: SQLite의 백업 및 재해 복구(DR) 문제로 인해 PostgreSQL과 AWS RDS를 선호하며, AWS RDS는 편리한 업그레이드 및 Redis 클러스터링 관리가 용이하다는 장점이 있습니다.
  • Kamal을 통한 배포: Capistrano의 대안으로 Kamal(구 Kamal 2)을 활용하여 Docker 기반의 서버 초기화, 데이터베이스 설정, 애플리케이션 배포를 자동화합니다. kamal console, kamal logs, kamal deploy와 같은 명령어를 통해 프로덕션 환경 관리가 편리해졌습니다.
  • Kamal 설정의 도전: architecture 오타로 인해 4시간 동안 디버깅했으며, AI 도구가 구버전 Kamal 1의 정보를 제공하여 해결에 어려움을 겪었습니다. ARM 아키텍처(Graviton)를 사용하여 비용을 절감했습니다.

AI 개발 도구 활용 및 한계

  • AI의 유용성: Cursor 및 Warp와 같은 AI 도구를 사용하여 코드 생성, 마이그레이션 명령, Rails 앱 초기화 등 개발 생산성을 높였습니다. RSpec 테스트 코드 생성에도 활용했습니다.
  • AI의 한계: AI는 최신 Rails 8의 변경 사항이나 특정 프론트엔드 스택(예: React 대신 Tailwind 사용)의 컨텍스트를 이해하지 못하고 구버전 또는 부적절한 코드를 제공하는 경우가 있었습니다. 특히 Action Text와 Hotwire 관련 변경 사항에서 이러한 문제가 두드러졌습니다.

Action Text와 파일 처리의 복잡성

  • Action Text 도입: Rails 6부터 내장된 위지윅(WYSIWYG) 에디터인 Action Text는 기본적인 기능을 제공하며, Rails 8.1부터 마크다운 지원이 예정되어 있습니다.
  • S3 파일 업로드 문제: S3에 파일 저장 시 안정성을 위해 버전 관리를 활용하지만, Active Storage의 백그라운드 후처리 지연으로 인해 이미지 로딩 시 404/403 오류가 발생했습니다.
  • 임시 해결책: JavaScript를 사용하여 이미지 로딩 상태를 지속적으로 확인하는 코드를 작성했습니다. Cloudflare를 통해 S3 버킷의 공개 URL을 프록시하는 과정에서 HTML 파일 업로드 보안 취약점이 발견되어 추가 정책 설정이 필요했습니다.

실시간 기능 및 프론트엔드

  • Solid Cable과 인증 문제: Solid Cable은 실시간 업데이트 기능을 제공하지만, current_user와 같은 인증 관련 코드를 포함한 스니펫을 “모두에게” 브로드캐스트할 때 Warden 오류가 발생했습니다. 이는 익명 사용자에게 인증 정보가 없기 때문입니다.
  • 해결책: 해키한 CSS 클래스 기반의 권한 처리 방식을 사용했습니다.
  • Propshaft와 Hotwire: Sprockets를 대체하는 Propshaft는 애셋 파이프라인을 간소화하며, npm 및 React 없이 Tailwind CSS와 Hotwire를 활용하여 Rails의 기본 방식을 따랐습니다. 그러나 Hotwire의 turbo delete와 같은 변경 사항에 대해 AI가 구버전 코드를 제시하는 문제가 있었습니다.

인증 및 기타 도구

  • Rails 8 내장 인증 vs. Devise: Rails 8의 내장 인증 기능은 간단한 앱에 적합하지만, 이메일 확인, 비밀번호 재설정, SSO, 2FA 등 고급 기능이 부족하여 Devise를 계속 사용했습니다.
  • Thruster: Kamal이 자동으로 설정하는 Engine X 유사한 리버스 프록시로, SSL 종료 등 기본적인 기능을 제공하여 편리함을 느꼈습니다.
  • Solid Cache vs. Redis: Solid Cache는 보조 DB를 캐싱에 사용하지만, Solid Cable과의 연동 문제 및 Redis의 유연성 때문에 AWS ElastiCache(Redis)를 선호했습니다. Sidekiq도 Active Job 대신 계속 사용합니다.
  • 개발 워크플로우: RuboCop 및 GitHub Actions가 Rails 8에 기본 포함되어 있었으며, Terraform과 Ansible로 서버 인프라를 관리합니다. Pundit을 사용하여 권한 관리를 효율적으로 수행합니다.

결론

Rails 8은 개발자의 생산성을 크게 향상시키는 많은 개선 사항을 제공하지만, 여전히 특정 시나리오에서는 개발자의 깊은 이해와 맞춤형 조정이 필요합니다. AI 도구는 초기 개발 속도를 높이는 데 탁월하지만, 최신 변경 사항이나 복잡한 요구사항에 대해서는 한계가 명확합니다. 특히 배포, 파일 처리, 실시간 통신, 인증과 같은 핵심 영역에서는 Rails의 기본 제공 기능만으로는 부족할 수 있으며, 기존의 견고한 Gem(예: Devise, Sidekiq)이나 클라우드 서비스(AWS RDS, ElastiCache)를 활용하는 것이 안정성과 확장성 측면에서 유리할 수 있습니다. 궁극적으로 Rails 개발은 프레임워크의 발전과 외부 도구의 장점을 적절히 조합하여 최적의 솔루션을 찾아가는 여정임을 시사합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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