Actions
기능 #281
완료됨
김정
김정
칸반보드 플러그인 개발 (redmine_kanban v1.0 MVP)
기능 #281:
칸반보드 플러그인 개발 (redmine_kanban v1.0 MVP)
시작일:
2026-04-18
완료일:
진척도:
100%
추정시간:
설명
개요¶
Redmine 이슈를 칸반 보드로 시각화하고 드래그앤드롭으로 상태를 변경할 수 있는 플러그인 개발.
- 플러그인 리포지토리: 로컬
/Users/joungsik/Workspace/joungsik/redmine_kanban(완료 후 GitHub public 공개 예정) - 통합 방식: 로컬 심볼릭 링크로 현 redmine 프로젝트
plugins/redmine_kanban에 연결 - 설계서: 플러그인 리포
docs/plans/2026-04-18-redmine-kanban-design.md - 계획서: 플러그인 리포
docs/plans/2026-04-18-implementation-plan.md(승인 완료)
MVP 범위 (v1.0)¶
- 프로젝트당 보드 1개
IssueStatus직접 매핑 (별도 칸반 상태 테이블 없음)IssueQuery기반 이슈 소스 (글로벌 쿼리 사용 시 보드 프로젝트로 스코프 강제)- 드래그로 즉시 상태 변경 (워크플로/권한 기존 체계 활용)
- 카드 세로 순서 수동 저장
- 종료 상태 통합 '완료' 컬럼 + 최근 N일 노출 (프로젝트별 설정)
- My Page 블록 '내 이슈 칸반': 담당 열린 이슈를 모든 활성 상태 컬럼에 표시 + 드래그로 상태 변경
주요 결정 사항 요약¶
| 영역 | 결정 |
|---|---|
| 컬럼 구성 | IssueStatus 직접 매핑 |
| 이슈 소스 | IssueQuery 재사용 (보드 프로젝트로 스코프) |
| 카드 이동 | 즉시 저장, 실패 시 원위치 복구 |
| 카드 표시 | 번호+제목, 담당자, 우선순위, 트래커, 시작일, 마감일 |
| 접근 | 프로젝트 메뉴 탭 + My Page 블록 |
| 권한 | view_kanban, manage_kanban + 기존 edit_issues |
| 보드 갯수 | 프로젝트당 1개 |
| 카드 정렬 | 수동 드래그 위치 저장 |
| 종료 상태 | 통합 '완료' 컬럼 + 최근 N일 |
| 실시간 동기화 | 없음 (lock_version 충돌만 감지) |
구현 Task 진행 현황¶
- Task 1: 플러그인 스켈레톤 (init.rb, 라우트, 권한, 메뉴, placeholder)
- Task 2: 데이터 모델 + 마이그레이션 (
KanbanBoard,KanbanCardPosition) + 단위 테스트 - Task 3: 심볼릭 링크 설정 + 로컬 통합 확인
- Task 4: 보드 조회 화면 (
show) + 카드 렌더링 + 기능 테스트 - Task 5: 보드 설정 화면 (
edit/update/destroy) + i18n - Task 6: 카드 이동 API (
KanbanCardsController#move) + 워크플로/낙관적 잠금 - Task 7: 프론트엔드 (Stimulus + SortableJS via importmap CDN)
- Task 8: 스타일 (CSS + Open Color 변수로 라이트/다크 테마 대응)
- Task 9: 시스템 테스트 (Capybara + Selenium, 드래그는 Stimulus 컨트롤러 직접 호출 방식)
- Task 10: 릴리즈 준비 (README, CHANGELOG)
- Task 12: 설정 페이지 버튼 컨벤션 정리 (submit_tag + sprite_icon cancel + delete_link)
- Task 13: My Page '내 이슈 칸반' 블록 (모든 활성 상태 컬럼 + 드래그 상태 변경)
- Task 11: GitHub public 리포 푸시
구현 후 수정된 버그¶
- 칸반 설정 페이지의 라벨 중복 렌더링
- 칸반 설정 페이지의 '취소/삭제'가 버튼이 아니라 UI가 어색하던 문제
- My Page '내 이슈 칸반' 블록 레이블이 영문으로 표시되던 문제
- My Page 미니 칸반에서 이슈가 있는 상태 컬럼만 렌더링되어 드래그가 불가능하던 문제
- 이동 API가 보드 존재를 강제해 My Page 드래그가 404로 실패하던 문제
- 글로벌 쿼리(
project_id=nil)를 소스로 사용할 때 프로젝트 칸반 보드에 타 프로젝트 이슈가 섞여 표시되던 문제
테스트 체크리스트¶
- 단위 테스트: 모델 + 프레젠터 케이스 전부 PASS
- 기능 테스트: 컨트롤러 PASS
- 시스템 테스트: 드래그 시나리오 PASS (프로젝트 보드 + My Page 블록)
- RuboCop: 경고 0
- Stylelint: 경고 0
- 수동: 라이트/다크 테마 각각 보드 렌더 확인
- 수동:
view_kanban만 있는 사용자 → 보드 조회 가능, 설정 접근 403 - 수동: 권한 없는 사용자 카드 이동 → 403 복구
- 수동: 워크플로 불허 상태 이동 → 422 복구
- 수동: 비공개 프로젝트에서 비멤버 접근 → 차단
해소된 열린 질문¶
- Stimulus 컨트롤러 importmap 로드 방식: Redmine 코어
application.js에서window.Stimulus를 노출하므로 그대로 사용 가능 - HTML5 DnD Selenium 시뮬레이션: SortableJS 드래그가 합성 이벤트로 불안정하여, 테스트에서는 Stimulus 컨트롤러의
onEnd를execute_async_script로 직접 호출하는 방식 채택 -
serialize+ JSON 코덱 Rails 8.0 호환성: 단위 테스트 통과로 확인
관련 링크¶
- 로컬 플러그인 리포:
/Users/joungsik/Workspace/joungsik/redmine_kanban - 현 redmine 프로젝트:
/Users/joungsik/Workspace/joungsik/redmine - 플러그인 리포 최근 커밋:
ed005f1(fix: 프로젝트별 칸반 보드가 타 프로젝트 이슈를 포함하는 문제 수정)
Actions