Hanami 2.3과 Pagy 4 연동 재시도: 더욱 개선된 경험

Integrating Pagy with Hanami (2025 edition)

발행일
2025년 11월 06일

핵심 요약

  • 1 Hanami 2.3과 Pagy 4의 개선으로 페이지네이션 라이브러리 연동이 매우 원활해졌습니다.
  • 2 이전 버전에서 복잡했던 Hanami와 Pagy 통합이 이제 최소한의 코드 변경으로 가능합니다.
  • 3 Pagy 4는 내부 구조와 API를 완전히 재설계하여 사용자 경험을 크게 향상시켰습니다.

도입

2018년 Hanami 1.x와 Pagy 젬 연동 시 많은 글루 코드와 요청 객체 직접 전달의 어려움을 겪었던 저자가, Hanami 2.3과 Pagy 4의 최신 버전에서 재시도한 경험을 공유합니다. Pagy 4는 내부 아키텍처와 API가 완전히 재설계된 버전으로, 이전의 복잡했던 통합 과정이 얼마나 개선되었는지 탐구하는 것이 이 글의 주된 목적입니다.

Hanami와 Pagy 연동 과정

  • 환경 설정: Hanami 2.3 기반의 새 애플리케이션을 생성하고, PostgreSQL 데이터베이스에 people 테이블을 위한 마이그레이션을 정의했습니다.

  • ROM 관계 정의: Pagynation::Relations::People 클래스를 통해 people 테이블에 대한 ROM 관계를 설정하여 데이터베이스 스키마를 추론하도록 했습니다.

  • 액션 구현: Pagynation::Actions::People::List 액션에 Pagy::Method를 포함하여 페이지네이션 로직을 구현했습니다.
    • pagy(people.order(:name), request:, client_max_limit: 40) 호출 시 request 객체를 명시적으로 전달해야 했습니다. 이는 Hanami가 요청 객체를 인스턴스 변수가 아닌 인자로 전달하는 함수형 방식을 따르기 때문입니다.
    • 페이지네이션된 레코드와 Pagy 객체를 뷰로 전달했습니다.
  • 뷰 구현: Pagynation::Views::People::List 뷰에서 액션으로부터 전달받은 peoplepaginator (Pagy 객체)를 expose했습니다.
    • decorate: false 옵션을 사용하여 데이터를 단순 해시 형태로 유지했습니다.
  • 템플릿 작성: ERB 템플릿에서 people 데이터를 테이블 형태로 렌더링하고, paginator.info_tagpaginator.series_nav 헬퍼를 사용하여 페이지네이션 정보와 링크를 표시했습니다.

개선된 사용자 경험

  • 전반적인 연동 과정이 Pagy 웹사이트의 튜토리얼과 유사하게 직관적으로 진행되었습니다.

  • request 객체 전달 외에는 특별한 글루 코드 없이도 대부분의 기능이 즉시 작동했습니다.

  • URL 파라미터를 통한 페이지 제한 설정 및 페이지 이동 링크가 모두 정상적으로 동작했습니다.

  • 이는 Pagy의 내부 재설계와 Hanami의 성숙한 퍼시스턴스 레이어 덕분으로 평가됩니다.

결론

Hanami 2.3과 Pagy 4의 통합은 저자의 2018년 경험과 비교할 때 놀랍도록 개선되었습니다. 거의 모든 기능이 추가적인 복잡한 코드 없이 "즉시 작동"하여, Hanami 환경에서 페이지네이션 라이브러리가 제공할 수 있는 가장 원활한 경험을 제공했습니다. Pagy 개발팀의 노력 덕분에 Hanami 개발자들은 이제 훨씬 더 효율적으로 페이지네이션 기능을 구현할 수 있게 되었습니다. 이는 두 프로젝트의 성숙도를 보여주는 좋은 예시입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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