인프라 및 배포
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(권한 부여 라이브러리) 등 개발 생산성과 코드 품질을 높이는 다양한 도구들을 언급하며, 각 도구의 장점과 활용 경험을 공유합니다.