Rails 애플리케이션에 JavaScript를 통합하는 전략은 프레젠테이션 및 동작 책임을 프런트엔드 JavaScript에 얼마나 위임할지에 따라 다양한 수준으로 구분됩니다.
1. 최소한의 JavaScript 활용
- 바닐라 Rails: 서버 측 렌더링 HTML과 Rails View Components 기반으로, JavaScript는 페이지를 보조적으로 향상시키는 역할(예: Stimulus 컨트롤러)을 수행합니다. Unobtrusive JavaScript를 통해 JS 비활성화 시에도 기능 유지가 가능합니다.
- Hotwire: Turbo와 Stimulus를 활용해 프런트엔드를 가볍게 유지하고 백엔드 비즈니스 로직에 집중합니다. 속도와 반응성이 중요한 애플리케이션에 적합합니다.
2. 점진적인 JavaScript 책임 위임 (하이브리드)
- 아일랜드 아키텍처 (Islands Architecture): Rails가 대부분의 HTML을 처리하고, 특정 페이지 영역만 클라이언트 측 JavaScript 컴포넌트로 렌더링됩니다. 정적 콘텐츠의 속도와 동적 콘텐츠의 반응성을 결합하나, 복잡성 증가 및 책임 구분의 모호성 위험이 있습니다.
3. 페이지 단위 JavaScript 책임 위임
- 페이지 컴포넌트 렌더링: 전체 페이지 렌더링 책임을 프런트엔드 JavaScript 프레임워크에 위임합니다. Rails 뷰는 “페이지” 컴포넌트를 로드하는 얇은 래퍼가 되며, Rails는 API 라우트를 제공합니다. 이는 점진적 마이그레이션 전략에 유용합니다.
4. 최대의 JavaScript 책임 위임 (분리된 프런트엔드)
- 단일 페이지 애플리케이션 (SPA): 모든 라우팅 책임을 JavaScript 프런트엔드 프레임워크에 위임합니다. Rails는 단일 HTML 페이지를 제공하고, SPA 로드 후에는 API 역할만 수행합니다.
- 별도 프런트엔드 서비스: Rails는 API 모드로 백엔드만 담당하고, JavaScript 프런트엔드는 자체 Node 기반 서버에서 별도 서비스로 구현됩니다. 확장성 및 배포 용이성을 높이지만, 시스템 복잡성 증가와 프런트엔드-백엔드 간 통신 증가가 발생할 수 있습니다.