Rails 앱에서 Stimulus를 활용한 Shift+클릭 대량 작업 구현

Shift+Click Selection for Bulk Actions with Stimulus | Rails Designer

작성자
Ruby Weekly
발행일
2025년 08월 28일

핵심 요약

  • 1 Rails 애플리케이션에서 Stimulus를 사용하여 Shift+클릭 기반의 리소스 대량 선택 기능을 효율적으로 구현할 수 있습니다.
  • 2 숨겨진 체크박스와 Stimulus 컨트롤러 로직을 통해 사용자 경험을 해치지 않으면서 대량 작업 선택 기능을 제공합니다.
  • 3 선택된 항목의 수에 따라 대량 작업 버튼의 가시성을 동적으로 제어하여 직관적인 인터페이스를 구축합니다.

도입

Rails 애플리케이션에서 여러 리소스에 대한 '대량 작업' 기능은 관리자 페이지나 CMS와 같은 SaaS(서비스형 소프트웨어) 앱에서 흔히 요구되는 패턴입니다. 사용자가 다수의 항목을 효율적으로 관리할 수 있도록 돕는 이 기능은 사용자 경험을 크게 향상시킬 수 있습니다. 본 문서에서는 Stimulus 프레임워크를 활용하여 Shift+클릭으로 여러 항목을 선택하고, 선택된 항목에 대한 대량 작업을 수행할 수 있는 기능을 간결하게 구현하는 방법을 설명합니다.

Rails 앱에서 Shift+클릭 대량 작업 기능을 구현하기 위한 핵심 단계는 다음과 같습니다.

1. HTML 구조 설정

  • <ul> 태그에 data-controller="select"를 추가하여 Stimulus 컨트롤러와 연결합니다.
  • <li> 항목에는 data-action="click->select#toggle"을 설정하여 클릭 시 Stimulus 컨트롤러의 toggle 메서드를 호출하도록 합니다.
  • <li> 내부에는 check_box_tag를 사용하여 숨겨진 체크박스를 포함시킵니다. 이 체크박스는 실제 선택 상태를 관리하며, hidden: :hidden 옵션으로 UI를 깔끔하게 유지할 수 있습니다.

2. Stimulus 컨트롤러 (select_controller.js) 구현

Stimulus 컨트롤러는 Shift+클릭 로직과 대량 작업 섹션의 가시성 관리를 담당합니다.

  • toggle(event) 메서드: event.shiftKey를 확인하여 Shift 키가 눌렸을 때만 동작합니다. 기본 동작을 방지(event.preventDefault())하고, 현재 클릭된 항목 내의 숨겨진 체크박스의 checked 상태를 토글합니다.
  • static targetsstatic values: static targets = ["actions"]를 선언하여 대량 작업 버튼을 포함하는 div 요소를 참조할 수 있게 합니다. static values = { selectedItems: { type: Number, default: 0 } }를 통해 선택된 항목의 수를 추적하는 selectedItemsValue를 정의합니다.
  • selectedItemsValueChanged() 메서드: selectedItemsValue가 변경될 때마다 호출됩니다. this.actionsTarget.classList.toggle("visible", this.selectedItemsValue !== 0)를 사용하여 선택된 항목이 하나라도 있으면 actions 요소에 visible 클래스를 추가하고, 없으면 제거합니다.
  • #updateSelectedItemsValue() 메서드: 모든 체크박스를 순회하며 filter 메서드를 사용하여 checked 상태인 체크박스의 수를 계산하고, 이 값을 selectedItemsValue에 할당합니다.
  • #checkboxes 게터: 컨트롤러 요소 내의 모든 체크박스를 효율적으로 가져오는 프라이빗 게터입니다.

3. 대량 작업 섹션 추가

  • <ul> 태그 내에 data-select-target="actions"를 가진 div를 추가합니다. 이 div 안에 “Archive all”, “Delete all” 등과 같은 대량 작업 버튼들을 배치합니다.

4. 백엔드 처리

  • 선택된 항목의 ID들은 post_ids[] 배열 형태로 컨트롤러(예: Posts::BulkController#update)로 전달되어 백엔드에서 일괄 처리가 가능합니다.

결론

이러한 접근 방식을 통해 Rails 애플리케이션에 강력하고 사용자 친화적인 대량 작업 기능을 손쉽게 추가할 수 있습니다. Stimulus의 간결한 로직과 HTML과의 긴밀한 통합은 Shift+클릭과 같은 복잡한 사용자 인터랙션을 명확하고 효율적으로 구현할 수 있도록 돕습니다. 이 패턴은 특히 많은 리소스를 관리해야 하는 SaaS 또는 어드민 패널에서 사용자 경험을 크게 향상시키는 데 기여할 것입니다. Rails Designer의 컴포넌트를 참고하면 더욱 포괄적인 대량 작업 컴포넌트를 빠르게 적용할 수 있습니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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