새로운 Rails 앱을 위한 37signals의 바닐라 스택 권고

37signals Dev — A vanilla Rails stack is plenty

3줄 요약

  • 새로운 Rails 앱 개발 시, 최소한의 의존성을 유지하는 '바닐라' 접근 방식을 적극 권장합니다.
  • 프론트엔드는 Hotwire, 백엔드는 관계형 DB 기반의 Solid 라이브러리, 배포는 Kamal 등 Rails 기본 스택을 최대한 활용할 것을 강조합니다.
  • 이러한 전략은 생산성 극대화, 유지보수 용이성, 그리고 향후 원활한 업그레이드를 위한 최적의 균형을 제공합니다.

오늘날 복잡한 기술 스택의 홍수 속에서, 37signals는 새로운 Rails 애플리케이션 개발 시 '바닐라(Vanilla)' 접근 방식을 채택할 것을 강력히 권고합니다. 이는 불필요한 의존성을 최소화하고 프레임워크의 기본 기능을 최대한 활용함으로써, 개발 생산성과 앱의 민첩성을 극대화하려는 철학을 담고 있습니다. 이들의 제안은 복잡성 대신 단순함을 통해 장기적인 이점을 확보하는 데 초점을 맞춥니다.

37signals의 ‘바닐라’ 스택은 구체적인 기술 선택과 개발 철학을 제시합니다. 첫째, 루비 및 JavaScript 의존성 추가에 극도로 신중할 것을 강조하며, Gemfile을 Rails가 생성한 원본에 가깝게 유지해야 한다고 말합니다. 프론트엔드 개발에서는 React 같은 복잡한 프레임워크나 JSON API 없이, Hotwire(Turbo, Stimulus)를 활용하는 것이 생산적이고 실용적이라고 역설합니다. 모바일 앱의 경우에도 Hotwire Native를 통한 하이브리드 접근 방식이 순수 네이티브 개발 대비 압도적인 생산성을 제공한다고 설명합니다.

이들은 서버 사이드 렌더링(ERB 템플릿, 뷰 헬퍼)의 가치를 재조명하며, #nobuild 철학을 통해 JavaScript 번들링 대신 Import Maps를, CSS 번들링 대신 현대 표준 CSS를 Propshaft를 통해 직접 제공하는 방식을 제안합니다. HTTP/2 멀티플렉싱으로 수많은 독립 요청도 효율적으로 처리합니다.

데이터베이스 영역에서는 Redis 대신 관계형 데이터베이스 기반의 solid_cache (캐싱), solid_queue (백그라운드 잡), solid_cable (Action Cable) 사용을 권장합니다. 이 솔루션들은 모두 검증되었으며, 관계형 데이터베이스의 강점을 활용합니다. 테스트는 Minitest와 현실적인 픽스처를 사용하며, Rails 8에서 완벽히 지원되는 PWA(Progressive Web App)를 통해 모바일 앱 필요성까지 충족할 수 있다고 덧붙입니다. 배포는 Kamal을 활용할 것을 제안합니다.

이러한 원칙들은 importmap.rb에 Turbo, Stimulus, 앱 컨트롤러 외에는 거의 추가하지 않고, Gemfile은 Rails가 생성한 것과 거의 동일해야 한다는 구체적인 지침으로 이어집니다. 37signals는 그들의 작은 팀이 생산성과 사용자 만족을 동시에 추구하기 위해 이 스택을 ‘오마카세 스택’으로 선택했다고 설명하며, 이는 최적의 균형을 제공한다고 강조합니다.

결론적으로, '바닐라' 접근 방식은 애플리케이션을 민첩하게 유지하고, 의존성 감소를 통해 미래의 잠재적 문제를 줄이며, 핵심 기능 구축에 집중하도록 돕습니다. 이는 또한 향후 Rails 버전 업그레이드를 더욱 원활하게 만듭니다. 새로운 의존성이 매력적으로 보이지만, 장기적으로 무엇을 잃는지 간과해서는 안 되므로 이 접근 방식은 '결단력'을 요구합니다. Rails는 유연한 프레임워크이지만, 37signals는 이 '바닐라' 철학에 공감한다면 이를 선택할 것을 강력히 권유합니다.