Rails 및 Hotwire를 활용한 드래그 앤 드롭 칸반 보드 구현

Create a Kanban board with Rails and Hotwire | Rails Designer

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

핵심 요약

  • 1 Rails와 Hotwire를 활용하여 SortableJS, Rails Request.js, Positioning Gem으로 드래그 앤 드롭 칸반 보드를 구현하는 방법을 제시합니다.
  • 2 30줄 미만의 Stimulus 컨트롤러로 컬럼 내/간 카드 정렬 및 위치 업데이트 기능을 효율적으로 처리합니다.
  • 3 폴리모픽 연관 관계를 통해 카드에 다양한 리소스를 연결하여 기능의 재사용성과 유연성을 극대화합니다.

도입

오랫동안 미뤄왔던 드래그 앤 드롭 기능에 대한 글을, 최근 칸반(Kanban)과 유사한 UI 작업 의뢰를 받으면서 다시 작성하게 되었습니다. 기존 자료들을 검토한 결과, 저자의 접근 방식이 매우 깔끔하고 효율적이라고 판단하여 새로운 글을 통해 공유하고자 합니다. 이 솔루션은 SortableJS를 통해 드래그 앤 드롭 편의성을 제공하고, Rails Request.js로 Stimulus 컨트롤러 내 요청을 간소화하며, Positioning Gem으로 리소스의 위치 관리를 자동화하여 개발 과정을 크게 단순화합니다. 이 모든 기능은 30줄 미만의 Stimulus 컨트롤러에 응축되어 구현됩니다.

이 글은 칸반 보드 기능 구현 과정을 데이터 모델 설계부터 자세히 설명합니다.

데이터 모델 구성

Board, Board::Column, Board::Card 모델이 기본 구조를 이룹니다. Board::ColumnBoard::Cardpositioned 젬을 활용하여 position 속성을 관리하며, to_partial_path 메서드를 오버라이드하여 뷰 파일 구조를 간결하게 만듭니다. 특히 Board::Card는 폴리모픽 연관 관계 (belongs_to :resource, polymorphic: true)를 사용하여 Message와 같은 다양한 리소스를 카드에 연결, 유연성을 제공합니다.

기본 UI 및 뷰 설정

Tailwind CSS를 사용하여 UI를 구성하며, _board.html.erb, _column.html.erb, _card.html.erb 뷰 파일에서 Rails의 부분 렌더링 기능과 to_partial_path 덕분에 간결한 템플릿 경로를 활용합니다.

컬럼 및 카드 재정렬

핵심 기능인 드래그 앤 드롭은 Stimulus 컨트롤러 (sortable_controller.js)를 통해 구현됩니다.

  • SortableJS 통합: Sortable.create를 사용하여 [draggable] 요소에 드래그 기능을 부여하고, 애니메이션 및 고스트 클래스 설정을 통해 부드러운 사용자 경험을 제공합니다.

  • 위치 업데이트: onEnd 콜백에서 Rails Request.jspatch 요청을 통해 백엔드로 new_position 값을 전송합니다. ColumnsControllerCardsController는 이 값을 받아 해당 Board::Column 또는 Board::Cardposition을 업데이트합니다.

컬럼 간 카드 이동

카드를 컬럼 간에 이동시키는 기능은 Stimulus 컨트롤러에 group 옵션을 추가하여 구현합니다.

  • 그룹 설정: group: this.groupNameValue를 통해 SortableJS 그룹을 지정하여 여러 리스트 간 드래그를 허용합니다.

  • 목록 변경 감지 및 백엔드 업데이트: onEnd 이벤트에서 새로운 컬럼의 ID를 event.to.dataset.sortableListIdValue로 감지하고, new_list_id 파라미터와 함께 CardsController에 전달합니다. CardsControllerboard_column_idposition을 동시에 업데이트하여 카드의 소속 컬럼과 순서를 변경합니다.

결론

결론적으로, 이 글은 30줄 미만의 간결한 Stimulus 컨트롤러를 활용하여 SortableJS, Rails Request.js, 그리고 Positioning Gem과 함께 완벽하게 작동하는 드래그 앤 드롭 칸반 보드를 구현하는 방법을 성공적으로 보여주었습니다. 특히 카드의 폴리모픽 연관 관계는 다양한 유형의 리소스를 카드에 유연하게 연결할 수 있게 하는 우아한 해결책으로, 칸반과 유사한 기능이 필요한 어떤 Rails 애플리케이션에도 이 코드를 쉽게 복사하여 붙여넣어 재사용할 수 있음을 시사합니다. 이 접근 방식은 현대 Rails 애플리케이션에서 복잡한 UI 상호작용을 구현하는 데 있어 깔끔하고 효율적이며 매우 적응력 높은 방법을 제공합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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