Hanami에서 슬라이스별 독립적인 Rack 쿠키 세션 관리 방법

Per-slice sessions in Hanami - Tim Riley

작성자
Ruby Weekly
발행일
2025년 09월 26일

핵심 요약

  • 1 Hanami 애플리케이션에서 각 슬라이스(slice)에 독립적인 Rack 쿠키 세션을 설정하는 방법을 설명합니다.
  • 2 Hanami::Routes 내에서 Rack::Session::Cookie 미들웨어를 사용하여 슬라이스별로 세션을 개별적으로 구성할 수 있습니다.
  • 3 현재 슬라이스별 세션 사용 시에도 Hanami::App에 전역 세션 설정을 활성화해야 하는 제약이 있으나, 이는 향후 개선될 예정입니다.

도입

Hanami 프레임워크는 사용자들의 실제 질문과 피드백을 통해 발전하고 있습니다. 이번 글에서는 Hanami 애플리케이션 내에서 각 슬라이스(slice)별로 독립적인 Rack 쿠키 세션을 관리하는 방법에 대한 질문을 다룹니다. 이 문제는 Hanami가 실제 환경에서 어떻게 작동하는지 이해하고, 프레임워크의 유연성과 현재의 제약 사항을 파악하는 데 중요한 시사점을 제공합니다. 사용자들의 질문은 Hanami의 발전에 핵심적인 역할을 하며, 이 글은 그 한 예시를 통해 구체적인 해결책을 제시합니다.

Hanami 애플리케이션에서 슬라이스별로 독립적인 Rack 쿠키 세션을 구현하는 방법은 각 슬라이스의 라우트(routes) 내에서 Rack::Session::Cookie 미들웨어를 사용하는 것입니다.

슬라이스별 세션 설정각 슬라이스의 Hanami::Routes 정의 내에서 use Rack::Session::Cookie를 통해 고유한 keysecret, 그리고 expire_after 옵션을 지정하여 독립적인 세션을 구성합니다.rubymodule MyApp class Routes < Hanami::Routes slice :main, at: "/main" do use Rack::Session::Cookie, key: "my_app.session.main", secret: "YOUR_SECRET_HERE", expire_after: 60 * 60 * 24 * 365 root to: "home.show" end slice :admin, at: "/admin" do use Rack::Session::Cookie, key: "my_app.session.admin", secret: "YOUR_SECRET_HERE", expire_after: 60 * 60 * 24 * 365 root to: "home.show" end endend### 세션 독립성 확인을 위한 액션 예시각 슬라이스에서 세션의 독립성을 확인하기 위해 다음과 같은 Admin::Actions::Home::Show 액션을 사용할 수 있습니다. 이 액션은 URL 파라미터를 통해 세션에 값을 설정하고, 현재 세션에 저장된 사용자 정보를 표시합니다.rubymodule Admin module Actions module Home class Show < Admin::Action def handle(request, response) if request.params[:set] request.session[:current_user] = request.params[:set] response.redirect "/admin" end response.body = "Current user: #{request.session[:current_user]}" end end end endendadmin?set=admin-usermain?set=main-user로 접속한 후 각각 /admin/main을 방문하면, 각 슬라이스에서 완전히 독립적인 세션 값을 확인할 수 있습니다.

결론

Hanami 프레임워크는 슬라이스의 독립성을 극대화하기 위해 설계되었으며, 각 슬라이스에 독립적인 Rack 쿠키 세션을 설정하는 기능은 이러한 철학을 잘 보여줍니다. 비록 현재는 슬라이스별 세션 사용 시에도 전역 세션 설정을 필수로 해야 하는 작은 제약이 존재하지만, 이는 프레임워크의 로드맵에 포함되어 개선될 예정입니다. 이 사례는 Hanami가 강력한 기반을 제공하면서도, 사용자 경험을 더욱 매끄럽게 만들기 위한 끊임없는 개선 노력을 기울이고 있음을 시사합니다. Ruby 개발자들에게는 이러한 개선 과정에 기여할 수 있는 좋은 기회가 될 것입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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