Rails 개발자를 위한 Hanami: 라우팅, 액션, 뷰, 그리고 파트

Hanami for Rails Developers: Part 2: Controllers

작성자
발행일
2025년 10월 05일

핵심 요약

  • 1 Hanami는 Rails와 달리 컨트롤러를 액션(Actions)과 뷰(Views)로 분리하여 요청 처리와 데이터 표현 로직을 명확하게 구분합니다.
  • 2 데이터베이스 상호작용은 뷰에서 `expose`와 의존성 주입(`include Deps`)을 통해 명시적으로 관리되며, 이는 Rails의 인스턴스 변수 방식과 차별화됩니다.
  • 3 Hanami의 Part는 뷰에서 사용되는 객체를 장식(decorate)하여 헬퍼 메서드를 추가하는 메커니즘으로, 라우팅 경로 생성 등을 간결하고 명시적으로 처리할 수 있도록 돕습니다.

도입

Hanami for Rails Developers" 시리즈의 두 번째 글로, Hanami 애플리케이션에서 데이터베이스와 상호작용한 데이터를 라우팅을 통해 사용자에게 제공하는 방법을 다룹니다. 이 글에서는 Hanami의 라우팅 정의, 액션 및 뷰 생성, 그리고 파라미터 처리 방식에 대해 상세히 설명하며, Rails 개발자들이 Hanami의 아키텍처적 차이점을 이해하고 전환하는 데 필요한 핵심 개념들을 소개합니다. 특히, Hanami가 요청 처리와 데이터 표현을 어떻게 분리하여 관리하는지에 초점을 맞춥니다.

Hanami 애플리케이션의 라우팅은 config/routes.rb 파일에서 정의되며, Rails와 유사하지만 컨트롤러와 액션을 점(.)으로 구분하는 특징이 있습니다. 예를 들어, root to: "books.index"와 같이 사용됩니다.

액션 및 뷰 분리

Hanami는 Rails의 컨트롤러 개념을 액션(Actions)과 뷰(Views) 두 가지 클래스로 분리합니다.

  • 액션(Actions): 요청 파라미터 파싱, 응답 처리, 인증/인가, 입력 유효성 검사 등 요청의 초기 단계를 담당합니다. 액션은 어떤 뷰를 렌더링할지 결정하는 역할도 수행합니다.

  • 뷰(Views): 액션이 결정한 뷰 버전에 따라 데이터를 수집하고 표현하는 역할을 합니다. Rails의 respond_to와 유사한 방식으로 작동하며, 데이터 로딩 로직을 포함할 수 있습니다.

데이터 로딩 및 노출

Hanami 뷰에서는 include Deps를 통해 외부 의존성(예: repos.book_repo)을 명시적으로 주입받고, expose 키워드를 사용하여 템플릿에 데이터를 노출합니다. 이는 Rails에서 인스턴스 변수가 마법처럼 템플릿에 나타나는 방식과 대조됩니다. 데이터베이스 쿼리는 뷰 내부에 위치할 수 있는데, 이는 액션의 인증/인가 규칙 등으로 인해 모든 데이터가 필요하지 않을 수 있기 때문입니다.

파라미터 처리 및 조건부 렌더링

라우트 정의 시 "/books/year/:year"와 같이 파라미터를 포함할 수 있습니다. 액션은 request.params[:year]를 통해 이 파라미터를 접근하고, 파라미터 유무에 따라 다른 뷰를 조건부로 렌더링할 수 있습니다. 예를 들어, 특정 연도에 해당하는 책만 보여주는 Books::ByYear 뷰를 생성하고 사용합니다.

쇼(Show) 액션 및 라우트 명명

단일 리소스(예: 특정 책)를 보여주는 쇼 액션은 hanami g action books.show 명령으로 생성되며, get "/books/:id", to: "books.show" 라우트가 추가됩니다. 라우트에는 as: :book과 같이 이름을 부여하여 routes.path(:book, id: book.id)와 같이 명시적으로 경로를 생성할 수 있습니다. 이는 Rails의 동적 라우팅 헬퍼와 달리 명시적이며, 코드베이스에서 경로 정의를 쉽게 찾을 수 있게 합니다.

파트(Parts) - Hanami의 데코레이터

Hanami는 뷰에서 expose된 데이터를 Part라는 클래스로 감싸서 뷰 객체를 장식(decorate)합니다. 예를 들어 expose :booksViews::Parts::BooksViews::Parts::Book으로 래핑됩니다. 개발자는 app/views/parts/book.rb와 같이 사용자 정의 Part 클래스를 생성하여 show_path와 같은 헬퍼 메서드를 추가할 수 있습니다. 이를 통해 link_to book.title, book.show_path와 같이 템플릿 코드를 간결하게 만들 수 있으며, 메서드 정의 위치를 쉽게 파악할 수 있어 코드 유지보수성이 향상됩니다.

결론

이 글은 Hanami가 Rails와 어떻게 다른 방식으로 웹 애플리케이션의 라우팅, 액션, 뷰, 그리고 데이터 표현을 처리하는지 명확하게 보여줍니다. 특히, 액션과 뷰의 분리, 명시적인 의존성 관리(`Deps`), 데이터 노출(`expose`), 그리고 `Part`를 통한 객체 장식 메커니즘은 Hanami의 핵심적인 설계 철학을 반영합니다. 이러한 접근 방식은 코드의 명확성과 테스트 용이성을 높이며, Rails 개발자들이 새로운 프레임워크의 구조를 이해하고 효과적으로 활용하는 데 중요한 기반 지식을 제공합니다. Hanami는 Rails와 다른 방식으로 웹 개발에 접근하지만, 그 차이점은 더 예측 가능하고 유지보수하기 쉬운 애플리케이션을 구축하는 데 기여합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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