Rails 개발자를 위한 Hanami - 1부: 모델 레이어

Hanami for Rails Developers – Part 1

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

핵심 요약

  • 1 Hanami는 Rails의 MVC 패턴을 채택하지만, 모델 레이어를 Repository, Relation, Struct로 세분화하여 관심사 분리 및 유지보수성을 향상합니다.
  • 2 데이터베이스 마이그레이션, 데이터 삽입 및 조회, 쿼리 스코핑 등 Hanami의 데이터베이스 상호작용 방식과 코드 예시를 제공합니다.
  • 3 Repository는 애플리케이션과 데이터베이스 간의 상호작용을 정의하고, Relation은 복잡한 쿼리를 관리하며, Struct는 순수 Ruby 객체로 데이터베이스 행을 표현합니다.

도입

이 블로그 게시물은 "Rails 개발자를 위한 Hanami" 시리즈의 첫 번째 글로, Hanami 애플리케이션이 데이터베이스와 상호작용하는 방식을 Rails 개발자에게 친숙한 MVC 구조에 초점을 맞춰 설명합니다. Rails의 Model-View-Controller 패턴에 익숙한 독자를 대상으로, Hanami가 이 패턴을 어떻게 채택하고 발전시켰는지 소개하며, 특히 모델 레이어의 세분화를 통해 더 나은 관심사 분리와 유지보수성을 제공하는 점을 강조합니다. Hanami의 계층 분리는 수십 년간의 Rails 애플리케이션 구축 경험에서 비롯된 유지보수 용이성 증진의 결과물입니다.

Hanami는 Rails와 달리 모델 레이어를 Repository, Relation, Struct 세 가지 고유한 클래스로 분리하여 데이터베이스 상호작용을 관리합니다. 이 방식은 명확한 관심사 분리를 통해 애플리케이션의 유지보수성을 높이는 데 중점을 둡니다.

Hanami 모델 레이어의 핵심 구성 요소 및 역할

  • Repository: 애플리케이션이 데이터베이스와 상호작용하는 방식을 정의하고 캡슐화합니다. 특정 데이터 타입에 대한 조회 및 조작 메서드를 제공하여 비즈니스 로직과 데이터 접근을 연결합니다.

  • Relation: 데이터베이스 테이블에 대한 복잡한 쿼리를 구성하고 관리합니다. SQL 쿼리를 추상화하며, 쿼리 체이닝을 위한 기반을 제공하여 유연한 데이터 필터링을 가능하게 합니다.

  • Struct: 데이터베이스의 단일 행을 나타내는 순수 Ruby 객체입니다. 최소한의 메서드만 가진 불변 객체로 데이터를 표현하여 데이터 무결성을 유지하고, 불필요한 로직이 데이터 객체에 포함되는 것을 방지합니다.

데이터베이스 상호작용 과정 요약

  1. 마이그레이션: hanami g migration으로 스키마를 정의하고 hanami db migrate로 실행합니다.

  2. 데이터 조작: app["relations.books"]를 통해 Relation에 접근하여 insert, update, first 등으로 데이터를 해시 형태로 조작합니다.

  3. 객체화: app["repos.book_repo"]를 통해 Repository에 접근하면, Relation이 반환하는 데이터가 자동으로 Struct 객체로 변환됩니다. Repository는 find, all 등 편의 메서드를 제공하여 Struct 객체 조회를 돕습니다.

  4. 쿼리 스코핑 및 체이닝: by_year, by_author와 같은 복합 쿼리 로직은 Relation 클래스에 정의되어 쿼리 체이닝을 지원합니다. Repository는 이 Relation 메서드를 호출하여 book_repo.by_year(2025).by_author("Ryan Bigg").first와 같은 유연한 쿼리를 구성합니다.

결론

이 가이드의 "모델 레이어" 섹션에서 살펴보았듯이, Hanami는 Repository, Relation, Struct라는 세 가지 명확한 계층 분리를 통해 데이터베이스 상호작용을 관리합니다. Repository는 애플리케이션과 데이터베이스의 상호작용을 정의하고, Relation은 복잡한 쿼리를 담당하며, Struct는 순수 Ruby 객체로 데이터베이스 행을 표현합니다. 이는 모든 것을 단일 모델 클래스에 담는 Rails의 방식과 대조적으로, 초기에는 다소 혼란스러울 수 있지만, 장기적으로는 코드의 가독성을 높이고 애플리케이션 유지보수를 훨씬 용이하게 만듭니다. Hanami의 이러한 접근 방식은 명확한 관심사 분리를 통해 더 견고하고 관리하기 쉬운 애플리케이션 개발을 지향합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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