Hanami는 Hanami, Hanami CLI, Hanami Router, Hanami Controller, Hanami View, Hanami DB 등 핵심 컴포넌트 라이브러리로 구성되며, dry-rb 및 rom-rb 생태계 위에 구축되어 dry-validation, dry-system 등 강력한 도구들을 활용합니다. 최근 Hanami, Dry-rb, ROM-rb가 ‘Hanekai’로 통합되어 개발 경험의 시너지를 기대합니다.
Hanami는 Rails의 MVC와 차별화된 아키텍처를 제공합니다.
-
모듈성 및 구성 요소: 프레임워크는 교체 가능한 컴포넌트 라이브러리로 분리되며, 애플리케이션은 ‘슬라이스(Slice)’라는 독립 모듈로 구성됩니다. 각 슬라이스는 자체 컨테이너를 통해 의존성을 관리하며 독립 배포가 가능합니다.
-
액션(Action) 중심 아키텍처: 각 액션은 독립 클래스로 구현되어 책임이 명확하며, 불변성을 통해 단일 인스턴스 재사용이 가능합니다.
handle메서드로 Rack 호환 요청을 처리하고,dry-validation으로 파라미터를 검증합니다. -
데이터베이스 계층: Active Record 대신
Repository패턴을 사용하여 비즈니스 로직과 데이터 지속성 로직을 분리합니다.ROM SQL기반Relation은 테이블을 나타내고,Struct는 불변 데이터 객체를 제공합니다. 쿼리는 명시적 호출(to_a,one) 시 실행되며,dry-types로Struct스키마를 정의하여 데이터 유효성을 강화합니다. -
뷰(View) 계층: 뷰는 클래스로 구현되며,
expose를 통해 액션 데이터를 받습니다.View Part는Struct를 래핑하여 프레젠테이션 로직을 캡슐화하고,View Context는 템플릿 내 라우트 헬퍼 등 공통 기능 접근 범위를 제한합니다. -
오퍼레이션(Operation):
dry-operation은 복잡한 비즈니스 로직을 인터랙터/서비스 객체 계층으로 제공합니다.step메서드를 통해Success또는Failure모나드로 흐름을 제어합니다.