이 게시물은 Rails와 Hanami 간의 모델 및 데이터 지속성 차이를 명확히 하기 위해 2024년 5월 23일에 업데이트되었습니다.
Ruby on Rails는 Ruby 생태계에서 가장 인기 있는 웹 프레임워크이며 프리랜서부터 대기업에 이르기까지 대규모 사용자 기반을 보유하고 있습니다. 활발한 사용자 커뮤니티와 광범위한 문서를 통해 간단한 애플리케이션부터 복잡한 웹 플랫폼까지 모든 것을 구축하는 데 사용할 수 있습니다.
즉, 새로운 참가자가 전체 스택 Ruby 프레임워크 타이틀인 Hanami에서 Rails의 우위를 점하고 있습니다. Rails에 비해 향상된 성능과 유지 관리성을 갖춘 빠른 모듈식 Ruby 프레임워크입니다.
이 문서에서는 성능, 기능, 테스트 등의 측면에서 각 프레임워크의 강점과 약점을 살펴보겠습니다. 따라서 고객 대상 웹 앱, 내부 도구 또는 대규모 확장 가능한 API를 구축하려는 경우 다음 프로젝트에 무엇을 사용할지에 대해 더 나은 정보를 얻어야 합니다.
각 프레임워크에 대한 간단한 소개부터 시작해 보겠습니다.
Ruby on Rails 소개
Ruby on Rails는 개발자 생산성을 향상한다는 사명을 지닌 가장 잘 알려진 Ruby 웹 애플리케이션 개발 프레임워크입니다(종종 "Rails 방식"이라고 함).
이러한 가정 중 일부에는 개발자가 구성 항목을 구성하는 데 시간을 낭비하지 않도록 하는 것, 즉 "구성보다 관례"라고 하는 것과 DRY("반복하지 마십시오") 원칙 사용에 대한 강조가 포함됩니다. DRY 원칙은 개발자가 코드를 반복해서 반복하는 것을 피하는 대신 앱 기능에 대한 단일하고 집중적인 표현을 사용하여 유지 관리성과 구성을 보장하도록 권장합니다.
하나미를 소개합니다
Rails는 Ruby 커뮤니티에서 매우 잘 알려져 있지만 Hanami는 덜 알려져 있습니다. 이는 전체 스택 웹 프레임워크 공간에서 Rails의 우위를 차지하려는 상당히 새로운 최신 Ruby 프레임워크입니다.
Hanami는 처음부터 작은 메모리 공간과 모듈성에 중점을 두고 구축되어 매우 빠르고 민첩한 프레임워크를 제공합니다.
분명히 이러한 간략한 소개가 자신에게 가장 적합한 프레임워크를 결정하는 데 필요한 모든 정보를 실제로 제공하지는 않습니다. 이를 위해서는 구조가 어떻게 구성되어 있는지부터 시작하여 각각에 대해 더 자세히 알아볼 필요가 있습니다.
레일과 하나미의 구조와 건축
Rails와 Hanami는 둘 다 Ruby 프레임워크라는 점에서 다소 유사합니다. 그러나 각각의 구축 방식과 애플리케이션 아키텍처에서 대부분의 차이점을 찾을 수 있습니다.
우선, Rails를 사용하면 파일이나 추상화가 더 적습니다. (앱을 구축하는 데 사용하는 빌딩 블록)은 앱을 개발함에 따라 크기가 커지는 경향이 있습니다. 반면 Hanami는 크기가 더 작은 파일을 많이 사용하여 추상화를 완전히 새로운 수준으로 끌어 올렸습니다.
아래 다이어그램은 요점을 더 명확하게 보여줍니다. Rails부터 시작해 보겠습니다.

이제 Rails 추상화 다이어그램을 아래 Hanami 추상화 다이어그램과 비교해 보세요.

보시다시피 각 프레임워크는 일반적으로 model-view-controller를 따릅니다. (MVC) 구조. 그러나 Hanami는 추상화를 한 단계 더 발전시켰습니다.
다음은 각 프레임워크가 구성되는 방식에 대한 간략한 개요입니다.
- 경로 - 각 프레임워크에는 앱의 엔드포인트가 포함된 경로 정의가 있습니다.
- 컨트롤러와 액션 - Rails에서는 하나 또는 두 개의 작업이 포함된 컨트롤러를 얻을 수 있습니다. 컨트롤러는 라우팅 요청을 관련 작업으로 안내하여 수신하고 응답합니다. 하나미에는 컨트롤러가 없습니다. 대신, 독립된 액션으로 바로 이동합니다(각 액션에는 자체적으로 독립된 클래스가 있습니다).
- 모델 및 지속성 - Rails 모델 레이어는 앱에 있을 수 있는 모든 쿼리를 포함하여 데이터 검증 및 데이터베이스 통신을 처리합니다. 지속성은 Ruby Object Mapper(ROM)에 의해 처리됩니다. Hanami에서는 모델 계층이 더 추상적이며 엔터티와 리포지토리로 구분됩니다. 엔터티는 도메인 로직을 처리하고 데이터베이스에 구애받지 않지만 저장소 (repos)는 데이터베이스와 통신하는 데 사용됩니다. Hanami 2.0 이후 버전은 사전 구성된 지속성 레이어 없이 제공되므로 필요에 맞는 ORM(객체 관계형 매퍼)을 선택하거나 ORM을 무료로 프로그래밍할 수 있습니다.
- 렌더링 보기 - 지속성 레이어와 마찬가지로 Ruby on Rails 뷰에는 외부 세계에 데이터를 렌더링하는 데 필요한 모든 것이 한 곳에 포함되는 경향이 있습니다. 여기에는 모든 HTML 구조, 보기 도우미 및 보기 논리가 포함됩니다. Hanami의 뷰 렌더링에 관해서는 상황이 더 추상적입니다. 우선 조회수가 있습니다. 앱에 있는 모든 보기 도우미를 활용하고 템플릿도 렌더링합니다. . 템플릿 실제 HTML 구조를 처리하는 반면 부분 프레젠테이션 논리를 잘 관리하세요.
그렇다면 앱을 구축할 때 이 모든 것이 무엇을 의미할까요? 추상화가 적은 Rails는 앱을 시작하는 데 좋은 선택이며 초보자에게 더 친숙합니다(이 기사의 뒷부분에서 살펴보겠지만). Rails를 사용하면 매우 강력한 모놀리스 앱을 구축할 수 있지만 확장할수록 코드가 점점 더 복잡해집니다. 반면에 Hanami의 더 복잡한 구조는 배우기가 어려울 수 있지만 이를 통해 대규모로 확장 가능한 애플리케이션을 구축할 수 있으며 훨씬 더 나은 코드 구성을 만들 수 있습니다.
다음으로 각 프레임워크의 생태계를 살펴보겠습니다.
생태계와 커뮤니티
앞서 언급했듯이 Rails는 Hanami보다 더 확립된 프레임워크를 가지고 있습니다. Rails는 오랫동안 존재해왔기 때문에 더 크고 성숙한 커뮤니티를 보유하고 있습니다.
생태계와 커뮤니티의 차이점은 다음과 같습니다.
- 문서 - 무엇을 구축하려고 하는지는 중요하지 않습니다. Rails를 사용하면 매우 잘 작성된 문서에 액세스할 수 있습니다. 인증부터 데이터 지속성, 보기 프레젠테이션 및 그 사이의 모든 것에 이르기까지 앱 빌드의 모든 부분을 안내합니다. 또한 다양한 타사 튜토리얼에서는 애플리케이션 구축과 관련하여 상상할 수 있는 거의 모든 것을 다룹니다.
즉, 하나미 측면에서는 상황이 그렇게 확립되어 있지 않습니다. 비교적 새로운 프레임워크인 Hanami는 문서 기반이 비교적 제한되어 있습니다. Hanami 팀은 공식 가이드를 통해 인상적인 작업을 수행했지만 Rails 문서 기반과 비교하면 근접하지 않습니다.
- 커뮤니티 - 여기서는 문서와 마찬가지로 Rails가 확실한 승자입니다. Rails는 Hanami보다 훨씬 오랫동안 사용되어 왔기 때문에 가장 많이 채택되었습니다. 초보자인지 고급 개발자인지는 중요하지 않습니다. 관련 하위 레딧, Slack 그룹, Discords 등에서 Rails 커뮤니티를 찾을 수 있습니다. 반면 하나미는 여전히 성장하고 있습니다. 이는 커뮤니티 규모가 훨씬 작다는 것을 의미합니다.
- 보석 및 라이브러리 - Hanami와 Rails는 모두 Ruby 프레임워크이므로 Rails에서 작동하는 gem이 Hanami에서도 작동할 것이라고 주장할 수 있습니다. 이것이 기술적으로는 사실이지만, Rails가 모든 종류의 특수 기능을 위한 더욱 확립된 gem 및 라이브러리 기반을 갖고 있다는 것을 종종 발견하게 될 것입니다.
즉, Hanami는 추상화와 전문화에 중점을 두기 때문에 Rails 앱을 다음 단계로 끌어올릴 수 있는 매우 진보된 보석을 갖추고 있습니다. 예를 들어 Hanami의 기본 dry-rb gem은 Rails 앱에서 사용될 때 더 나은 코드 구성과 추상화를 가져올 수 있습니다.
계속해서 각 프레임워크의 학습 곡선과 채택을 비교해 보겠습니다.
사용 편의성, 채택, 거버넌스 및 학습 곡선
이전 섹션에 설명된 바로 그 이유로 인해 Ruby on Rails는 사용 용이성, 업계 채택 및 학습 곡선 측면에서 Hanami를 쉽게 능가합니다. 특히 다음과 같습니다.
- 학습 - 당신이 새로운 프로그래밍 언어를 배우려는 완전한 초보자라고 상상해 보십시오. 가장 먼저 생각해야 할 것은 온라인 학습 리소스를 확인하는 것입니다. 프레임워크에 앱 구축 프로세스를 처음부터 끝까지 다루는 학습 자료가 널리 사용 가능한 경우 다른 언어보다 해당 언어를 선택할 가능성이 높습니다. 그리고 Rails는 보다 확고한 문서 기반을 갖추고 있기 때문에 초보자가 선택하는 프레임워크로서 Hanami보다 우선합니다. 또한 Rails는 내부적으로 너무 많은 가정을 하기 때문에 초보자가 배우기에 훨씬 더 친숙합니다(앱을 구축하는 보다 추상적인 방법을 제공하는 Hanami와 비교할 때). Hanami의 추상화는 기존 Rails 개발자에게도 어려울 수 있습니다.
- 업계 채택 - Python, React, C# 등과 같은 널리 사용되고 확립된 다른 프레임워크의 채택을 포함하지 않고 Ruby 프레임워크의 채택을 고려한다면 Rails는 Hanami를 쉽게 압도합니다. Rails 홈페이지에는 프레임워크를 사용하는 일부 유명 조직이 나열되어 있습니다. 반면에, 블록의 새로운 아이로서 하나미는 그렇게 널리 채택되지 않습니다. 앞으로 변화가 있을지 지켜봐야겠습니다.
- 취업 시장 전망 - 취업 전망 측면에서 보면 Hanami 개발자보다 Rails 개발자에게 더 많은 채용 공고가 있을 것입니다.
- 거버넌스 - 간과해서는 안되는 또 다른 중요한 측면은 거버넌스입니다. 변화하는 환경은 오픈 소스 프레임워크가 어떻게 발전하고 발전하는지 안내합니다. 그러나 그보다 더 중요한 것은 이러한 프레임워크의 핵심 팀 구성원이 엄청난 권한을 행사하는 경우가 많으며 프레임워크에 들어갈 항목, 개발 방법 등을 지시할 수 있다는 것입니다.
좋은 예가 Rails 창시자인 David Heinemeier Hansson(DHH)의 1월 발표입니다. 그는 앞으로 Rails가 풀스택 프로그레시브 웹 애플리케이션 및 기본 알림 구축을 위한 최고 수준의 지원을 제공하도록 추진할 것이라고 말했습니다. 이러한 기능은 모바일 개발자에게 Rails를 매우 매력적으로 만들어줄 것입니다.
이에 대한 반응으로 Ruby 생태계 외부의 일부 개발자와 수년에 걸쳐 Rails를 삭제한 일부 개발자를 포함한 많은 개발자들은 DHH가 약속을 지킨다면 기꺼이 프레임워크를 선택하거나 배우겠다고 말하면서 압도적으로 긍정적인 반응을 보였습니다. 이 예는 어떤 프레임워크를 선택할지 결정할 때 거버넌스가 매우 중요한 고려 사항임을 보여줍니다.
이제 방향을 바꿔 좀 더 기술적인 애플리케이션 성능에 대해 살펴보겠습니다.
성능:Ruby on Rails와 Hanami
개발자로서 귀하는 앱의 안정성, 응답성 및 프로덕션에 배포된 후 서버 리소스를 어떻게 활용할 것인지에 대해 우려하게 될 것입니다. 이는 프레임워크 선택에 큰 영향을 미칠 수 있는 근본적인 문제입니다.
다양한 방법을 사용하여 앱에서 성능 테스트를 실행할 수 있으며 가장 널리 사용되는 방법 중 하나는 Apache JMeter입니다. 벤치마크 수치를 사용하여 Hanami와 Rails를 비교해 보겠습니다.
다음은 각 프레임워크가 초당 처리할 수 있는 요청 수를 보여주는 빠른 벤치마크 테스트입니다.

Hanami는 Rails가 처리할 수 있는 것보다 3배 더 많은 요청을 처리하는 능력으로 Rails를 압도합니다.
다음 스크린샷은 각 프레임워크의 평균 지연 시간 값을 보여줍니다.

역시 Hanami는 약 3배 더 짧은 평균 대기 시간으로 Rails를 능가합니다.
엄청나게 빠른 Ruby 프레임워크를 찾고 있다면(예를 들어 빠르고 확장성이 뛰어난 API로 작업해야 하는 경우) Ruby 환경에서 Hanami보다 더 나은 것을 찾기 어려울 것입니다.
테스트
코드 테스트에 있어서 두 프레임워크는 다재다능한 RSpec 라이브러리를 사용하여 테스트할 수 있으므로 매우 유사합니다.
RSpec은 hanami-rspec를 통해 포함됩니다. Hanami 앱용 gem은 rspec-rails을 설치해야 합니다. Rails 앱에서 사용하려면 gem을 사용하세요. 아래 예는 새로운 Hanami 앱에 포함된 매우 기본적인 테스트 사양을 보여줍니다.
$ bundle exec rspec spec/requests/root_spec.rb으로 실행 테스트에 통과해야 합니다(기본 보기 템플릿을 편집하지 않았다고 가정):
Rails 측에서는 일부 작업을 직접 처리해야 합니다. 먼저 Gemfile의 개발/테스트 블록에 RSpec gem을 추가해야 합니다. 아래와 같이 bundle을 실행하세요. :
다음 단계는 bundle exec rails generate rspec:install 명령을 사용하여 RSpec 설치를 실행하는 것입니다. Rails 프로젝트를 준비하는 데 도움이 됩니다.
마지막으로, 테스트를 작성하고 실행하기 전에 Rails 앱에 대한 테스트 데이터를 정의하기 위해 또 다른 gem인 FactoryBot을 설치해야 할 수도 있습니다.
그리고 테스트 스위트를 적절하게 설정하고 몇 가지 테스트를 정의했다고 가정하면 Hanami에서와 마찬가지로 bundle exec rspec spec/models/user_spec.rb를 사용하여 테스트를 실행할 수 있습니다. . Hanami 앱에서와 마찬가지로 테스트 결과를 얻을 수 있습니다:
마지막으로 배포와 관련하여 프레임워크를 어떻게 비교하는지 살펴보겠습니다.
배포
요즘에는 Ruby 앱을 프로덕션 환경에 배포하는 옵션이 많이 있습니다.
우선, 보다 원활한 경험을 위해 Heroku나 Fly와 같은 PaaS(Platform-as-a-Service) 제공업체를 선택할 수 있습니다. 약간의 DevOps도 수행할 수 있습니다. VPS에 Docker 설치를 설정하고 거기에 앱을 배포하세요.
어떤 옵션을 선택하든 두 경우 모두 배포가 상대적으로 유사할 것으로 예상할 수 있습니다. 유일한 주의점은 Hanami 앱 배포에 대한 광범위한 문서와 튜토리얼이 부족하다는 것입니다.
이전에 지적했듯이, 새로운 프레임워크인 Hanami에는 배포 프로세스와 발생할 수 있는 문제를 다루는 광범위한 문서가 아직 없습니다. 이 문제를 해킹해도 괜찮다면 괜찮을 것입니다.
마무리
이 기사에서는 Ruby on Rails와 Hanami라는 두 가지 Ruby 프레임워크를 기능, 아키텍처, 성능 등의 측면에서 비교했습니다. 궁극적으로 우리는 "어떤 프레임워크를 사용해야 하며, 왜 사용해야 하는가?"라는 질문에 답해야 합니다. 다음과 같이 요약할 수 있습니다:
- 초보 Ruby 개발자라면 Rails로 시작하세요. 익히고 배우는 것이 더 쉽습니다. 고급 Ruby 개발자라면 Hanami 기술을 개발하세요. 이는 훨씬 더 강력한 Ruby 애플리케이션을 개발하는 데 도움이 됩니다.
- 빠른 앱을 개발해야 한다면 여러 클라이언트에 서비스를 제공하는 API, Hanami의 작은 메모리 공간, 엄청나게 빠른 응답, 낮은 대기 시간이 도움이 될 것입니다. 그러나 SaaS 아이디어를 검증하기 위해 모놀리식 풀스택 앱을 개발해야 한다면 Rails를 사용하면 확실히 더 빨리 목표에 도달할 수 있습니다.
결국 무엇을 선택하게 될지는 전적으로 당신에게 달려 있습니다. 두 프레임워크 모두에서 기술을 습득하는 것은 나쁜 생각이 아닙니다. 이렇게 하면 프로젝트의 요구 사항에 따라 가장 적합한 프레임워크를 결정할 수 있습니다.
즐거운 코딩 되세요!
추신 Ruby Magic 게시물이 보도되는 즉시 읽으려면 Ruby Magic 뉴스레터를 구독하고 단 하나의 게시물도 놓치지 마세요!
추신 AppSignal에 Rails와 Hanami가 통합되어 있다는 사실을 알고 계셨나요?