실시간 협업 칸반 보드 with WebSocket - 바이브코딩 레시피
고급 PHP Laravel

실시간 협업 칸반 보드 with WebSocket

리포지토리명 realtime-kanban-board-laravel
조회수 63 2건 제출 1주 전

문제 설명

프로젝트 개요

Laravel 12.x와 WebSocket(Laravel Reverb)을 활용하여 여러 사용자가 실시간으로 협업할 수 있는 칸반 보드 시스템을 구축합니다. 드래그 앤 드롭으로 카드를 이동하면 모든 접속자에게 즉시 반영되며, 누가 어떤 작업을 하고 있는지 실시간으로 확인할 수 있습니다.

필수 기능

  • 사용자 인증: Laravel Breeze 또는 Jetstream을 사용한 회원가입/로그인
  • 보드 관리: 여러 개의 보드 생성, 수정, 삭제 (CRUD)
  • 컬럼 관리: 보드 내 컬럼(Todo, In Progress, Done 등) 생성, 수정, 삭제, 순서 변경
  • 카드 관리: 컬럼 내 카드 생성, 수정, 삭제, 담당자 지정, 우선순위 설정
  • 실시간 동기화: Laravel Reverb(WebSocket)를 사용하여 카드 이동, 생성, 수정 시 모든 사용자에게 즉시 반영
  • 드래그 앤 드롭: 카드를 컬럼 간 이동 및 순서 변경
  • 활동 로그: 누가 언제 무엇을 변경했는지 기록
  • 실시간 사용자 현황: 현재 보드를 보고 있는 사용자 표시

보너스 기능

  • 카드 상세 모달에서 댓글 기능 (실시간 업데이트)
  • 카드에 라벨/태그 추가 및 필터링
  • 카드 검색 및 정렬 기능
  • 보드 멤버 초대 및 권한 관리 (Owner, Editor, Viewer)
  • 카드 마감일 설정 및 알림
  • 다크 모드 지원
  • 카드 첨부파일 업로드 (AWS S3 연동)

기술 스택

  • Backend: Laravel 12.x, Laravel Reverb (WebSocket), MySQL 8.0+
  • Frontend: Blade + Alpine.js + Livewire 3.x (또는 Inertia.js + Vue 3/React 19)
  • 드래그 앤 드롭: Sortable.js
  • 실시간 통신: Laravel Echo + Pusher Protocol
  • 인증: Laravel Breeze/Jetstream

제약 조건

  • Laravel 12.x 최신 버전 사용 필수
  • Laravel Reverb를 사용한 WebSocket 구현 (Pusher 대신)
  • MySQL 8.0 이상 사용
  • RESTful API 설계 원칙 준수
  • Repository Pattern 또는 Service Layer 적용
  • Laravel Pint로 코드 스타일 통일
  • PHPUnit 테스트 코드 작성 (최소 주요 기능)
  • Eloquent Relationship 적절히 활용
  • Database Transaction 처리
  • N+1 쿼리 문제 해결 (Eager Loading)
  • Frontend는 Livewire 3.x 또는 Inertia.js 중 선택
  • 반응형 디자인 (Tailwind CSS 사용 권장)
  • Git commit 메시지 컨벤션 준수

프롬프트 레시피

아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
Laravel 12.x 프로젝트를 생성하고 기본 설정을 완료해주세요.

요구사항:
1. 프로젝트명: realtime-kanban-board
2. Laravel Breeze 설치 (Blade + Alpine.js 스택)
3. Tailwind CSS 설정 완료
4. MySQL 데이터베이스 연결 (.env 파일 설정 가이드 포함)
5. 기본 인증 시스템 구축 (회원가입, 로그인, 로그아웃)
6. 다음 모델과 마이그레이션 파일 생성:
   - Board (보드): id, user_id, title, description, timestamps
   - Column (컬럼): id, board_id, title, position, timestamps
   - Card (카드): id, column_id, title, description, assigned_user_id, priority, position, due_date, timestamps
   - Activity (활동 로그): id, board_id, user_id, action, target_type, target_id, metadata(json), timestamps
7. 모델 간 관계 설정:
   - Board hasMany Columns, hasMany Cards, belongsTo User
   - Column hasMany Cards, belongsTo Board
   - Card belongsTo Column, belongsTo User (assigned)
8. Database Seeder 작성 (테스트용 더미 데이터)
9. README.md에 설치 및 실행 방법 작성

실행 후 `php artisan migrate:fresh --seed`로 확인 가능해야 합니다.

기대 결과: Laravel 프로젝트 기본 구조 완성, 인증 시스템 작동, 데이터베이스 마이그레이션 완료, 테스트 데이터 삽입 완료. 브라우저에서 회원가입/로그인이 정상 작동해야 함.

2
Step 2
보드 관리 기능을 구현해주세요.

요구사항:
1. BoardController 생성 (Resource Controller)
2. 라우트 설정:
   - GET /boards - 내 보드 목록
   - GET /boards/create - 보드 생성 폼
   - POST /boards - 보드 저장
   - GET /boards/{board} - 보드 상세 (칸반 보드 화면)
   - GET /boards/{board}/edit - 보드 수정 폼
   - PUT /boards/{board} - 보드 업데이트
   - DELETE /boards/{board} - 보드 삭제
3. Blade 뷰 파일:
   - boards/index.blade.php: 보드 목록 (카드 형태로 표시)
   - boards/create.blade.php: 보드 생성 폼
   - boards/show.blade.php: 칸반 보드 메인 화면 (아직 빈 화면)
   - boards/edit.blade.php: 보드 수정 폼
4. Policy 생성: BoardPolicy (본인이 만든 보드만 수정/삭제 가능)
5. Form Request Validation: StoreBoardRequest, UpdateBoardRequest
6. 보드 목록에서 각 보드의 카드 개수 표시
7. Tailwind CSS로 깔끔한 UI 구현

모든 기능은 인증된 사용자만 접근 가능해야 합니다.

기대 결과: 보드 CRUD 기능 완성. 사용자가 보드를 생성/수정/삭제할 수 있고, 보드 목록에서 자신의 보드만 볼 수 있음. 권한 검증 작동 확인.

3
Step 3
컬럼과 카드 관리 기능을 구현해주세요.

요구사항:
1. ColumnController와 CardController 생성 (API Controller)
2. API 라우트 설정 (/api/boards/{board}/...):
   - POST /columns - 컬럼 생성
   - PUT /columns/{column} - 컬럼 수정
   - DELETE /columns/{column} - 컬럼 삭제
   - POST /columns/{column}/reorder - 컬럼 순서 변경
   - POST /columns/{column}/cards - 카드 생성
   - PUT /cards/{card} - 카드 수정
   - DELETE /cards/{card} - 카드 삭제
   - POST /cards/{card}/move - 카드 이동 (컬럼 간 이동 및 순서 변경)
3. boards/show.blade.php 완성:
   - 보드 제목과 설명 표시
   - 컬럼들을 가로로 나열 (스크롤 가능)
   - 각 컬럼 내 카드들을 세로로 나열
   - "+ 컬럼 추가" 버튼
   - 각 컬럼에 "+ 카드 추가" 버튼
4. Alpine.js로 인터랙션 구현:
   - 컬럼 추가 모달
   - 카드 추가/수정 모달 (제목, 설명, 담당자, 우선순위, 마감일)
   - 카드 클릭 시 상세 정보 모달
5. Sortable.js 통합:
   - 카드 드래그 앤 드롭으로 컬럼 간 이동
   - 카드 순서 변경
   - 컬럼 순서 변경
6. Form Request Validation 추가
7. N+1 쿼리 방지 (Eager Loading 적용)

JSON 응답 형식 통일 (success, message, data 포함)

기대 결과: 칸반 보드 기본 기능 완성. 컬럼과 카드를 생성/수정/삭제할 수 있고, 드래그 앤 드롭으로 카드를 이동할 수 있음. 모달 UI 작동 확인.

4
Step 4
Laravel Reverb를 설치하고 실시간 동기화 기능을 구현해주세요.

요구사항:
1. Laravel Reverb 설치 및 설정:
   ```bash
   php artisan install:broadcasting
   ```
2. .env 파일에 Reverb 설정 추가
3. Laravel Echo 프론트엔드 설정 (resources/js/echo.js)
4. Broadcasting Event 생성:
   - CardMoved: 카드 이동 시
   - CardCreated: 카드 생성 시
   - CardUpdated: 카드 수정 시
   - CardDeleted: 카드 삭제 시
   - ColumnCreated: 컬럼 생성 시
   - ColumnUpdated: 컬럼 수정 시
   - ColumnDeleted: 컬럼 삭제 시
5. 각 이벤트는 PrivateChannel 사용 (board.{boardId})
6. Controller에서 작업 완료 후 이벤트 브로드캐스트
7. 프론트엔드에서 Echo로 이벤트 수신:
   - 카드 이동 시 DOM 업데이트 (애니메이션 포함)
   - 카드/컬럼 생성 시 추가
   - 카드/컬럼 삭제 시 제거
   - 카드 수정 시 내용 업데이트
8. 채널 인증 설정 (routes/channels.php)
9. 실시간 동기화 테스트 가이드 작성

Reverb 서버 실행: `php artisan reverb:start`

기대 결과: 실시간 동기화 작동. 여러 브라우저 창을 열어 테스트 시, 한 창에서 카드를 이동하면 다른 창에도 즉시 반영됨. WebSocket 연결 상태 확인 가능.

5
Step 5
활동 로그와 실시간 사용자 현황 기능을 구현해주세요.

요구사항:
1. ActivityService 생성:
   - 모든 보드 작업(생성, 수정, 삭제, 이동)을 Activity 테이블에 기록
   - logActivity($board, $action, $targetType, $targetId, $metadata) 메서드
2. Controller에서 ActivityService 호출
3. boards/show.blade.php에 활동 로그 사이드바 추가:
   - 최근 활동 20개 표시
   - 사용자 이름, 액션, 시간 표시
   - 실시간 업데이트 (ActivityLogged 이벤트)
4. 실시간 사용자 현황:
   - Laravel Presence Channel 사용 (presence-board.{boardId})
   - 현재 보드를 보고 있는 사용자 목록 표시 (우측 상단)
   - 사용자 아바타 또는 이니셜 표시
   - 사용자가 페이지를 떠나면 목록에서 제거
5. Presence Channel 설정:
   - routes/channels.php에 인증 로직
   - 프론트엔드에서 Echo.join() 사용
   - here(), joining(), leaving() 이벤트 처리
6. 활동 로그 필터링 기능 (전체/카드/컬럼)

활동 로그 예시: "홍길동님이 '백엔드 개발' 카드를 'In Progress'로 이동했습니다. (2분 전)"

기대 결과: 활동 로그가 실시간으로 업데이트되고, 현재 보드를 보고 있는 사용자 목록이 실시간으로 표시됨. 여러 사용자가 동시에 접속 시 서로의 존재를 확인 가능.

6
Step 6
고급 기능과 성능 최적화를 구현해주세요.

요구사항:
1. 카드 검색 기능:
   - 보드 내 전체 카드 검색 (제목, 설명)
   - Laravel Scout + Database Driver 사용
   - 검색 결과 하이라이팅
2. 카드 필터링:
   - 담당자별 필터
   - 우선순위별 필터 (High, Medium, Low)
   - 마감일별 필터 (오늘, 이번 주, 지난 마감일)
3. 보드 멤버 관리:
   - BoardMember 모델 및 마이그레이션 (board_id, user_id, role)
   - 역할: owner, editor, viewer
   - 멤버 초대 기능 (이메일로 검색)
   - 권한에 따른 기능 제한 (viewer는 읽기만 가능)
4. 성능 최적화:
   - 카드 목록 조회 시 Eager Loading 적용
   - 보드 목록에 캐싱 적용 (Redis)
   - Database Indexing (board_id, column_id, position 등)
   - 페이지네이션 또는 무한 스크롤 (카드가 많을 경우)
5. 카드 댓글 기능:
   - Comment 모델 (card_id, user_id, content, timestamps)
   - 카드 상세 모달에서 댓글 작성/삭제
   - 댓글 실시간 업데이트 (CommentCreated 이벤트)
6. 알림 기능:
   - 카드에 할당되었을 때 알림
   - 마감일 임박 알림 (Laravel Queue + Scheduler)
   - 댓글이 달렸을 때 알림
7. 다크 모드 토글 (Tailwind CSS dark: 클래스 활용)

Redis 설정 필요: CACHE_DRIVER=redis, QUEUE_CONNECTION=redis

기대 결과: 모든 고급 기능 작동. 검색/필터링이 빠르고 정확하게 작동하며, 멤버 권한 관리가 제대로 적용됨. 성능 최적화로 대량의 카드도 부드럽게 처리.

7
Step 7
테스트 코드 작성과 배포 준비를 완료해주세요.

요구사항:
1. PHPUnit 테스트 작성:
   - Feature 테스트:
     * BoardControllerTest: 보드 CRUD 테스트
     * CardControllerTest: 카드 이동, 생성, 수정, 삭제 테스트
     * AuthorizationTest: 권한 검증 테스트
     * RealtimeTest: WebSocket 이벤트 브로드캐스팅 테스트
   - Unit 테스트:
     * ActivityServiceTest: 활동 로그 기록 테스트
     * CardMovementTest: 카드 이동 로직 테스트
2. Laravel Pint 실행하여 코드 스타일 통일:
   ```bash
   ./vendor/bin/pint
   ```
3. 환경 변수 예시 파일 (.env.example) 업데이트
4. Docker 설정 (선택):
   - docker-compose.yml (PHP, MySQL, Redis, Reverb)
   - Dockerfile
5. 배포 가이드 작성 (README.md):
   - 로컬 개발 환경 설정
   - Reverb 서버 실행 방법
   - Queue Worker 실행 방법
   - 프로덕션 배포 체크리스트
6. API 문서화:
   - Postman Collection 또는 OpenAPI (Swagger) 문서
7. 성능 테스트:
   - Laravel Telescope 설치하여 쿼리 분석
   - N+1 쿼리 문제 최종 확인
8. 보안 점검:
   - CSRF 토큰 검증
   - XSS 방지
   - SQL Injection 방지 (Eloquent 사용)
   - Rate Limiting 설정

테스트 실행: `php artisan test --parallel`

기대 결과: 모든 테스트 통과. 코드 품질이 높고 배포 준비 완료. README.md에 명확한 설치 및 실행 가이드 제공. Docker로 쉽게 실행 가능.

8
Step 8
UI/UX 개선 및 최종 마무리를 해주세요.

요구사항:
1. 애니메이션 추가:
   - 카드 이동 시 부드러운 전환 효과
   - 모달 열기/닫기 애니메이션
   - 로딩 스피너 (API 호출 중)
   - 토스트 알림 (성공/실패 메시지)
2. 반응형 디자인 완성:
   - 모바일 화면에서 컬럼을 세로로 스택
   - 터치 제스처 지원 (모바일 드래그 앤 드롭)
   - 햄버거 메뉴 (모바일)
3. 접근성 개선:
   - ARIA 라벨 추가
   - 키보드 네비게이션 지원
   - 포커스 상태 표시
4. 에러 처리:
   - 네트워크 에러 시 사용자 친화적 메시지
   - WebSocket 연결 끊김 시 재연결 로직
   - 폼 유효성 검사 에러 표시
5. 온보딩 경험:
   - 첫 방문 사용자를 위한 튜토리얼 (선택)
   - 빈 상태 UI (보드가 없을 때, 카드가 없을 때)
6. 설정 페이지:
   - 프로필 수정
   - 알림 설정
   - 테마 설정 (다크/라이트)
7. 내보내기 기능:
   - 보드를 JSON으로 내보내기
   - 보드를 Markdown으로 내보내기
8. 최종 점검:
   - 모든 기능 크로스 브라우저 테스트
   - 성능 프로파일링 (Lighthouse)
   - SEO 메타 태그 추가
   - 파비콘 및 앱 아이콘 추가

Lighthouse 점수 목표: Performance 90+, Accessibility 95+

기대 결과: 완성도 높은 프로덕션 레벨의 칸반 보드 애플리케이션. 모든 기능이 부드럽게 작동하고, 사용자 경험이 우수함. 모바일에서도 완벽하게 작동.

제출된 작품 (2)

로그인 후 제출

Laravel 기반의 실시간 협업 칸반 보드. 팀과 개인을 위한 간편한 작업 관리 도구

조회수 60 댓글수 0 추천수 1

실시간 협업 칸반 보드

리자
리자
6일 전 · Claude Code

WebSocket을 활용한 실시간 동기화 기능을 갖춘 팀 협업용 칸반 보드 애플리케이션

조회수 56 댓글수 0 추천수 1

댓글 (1)

로그인 후 댓글을 남길 수 있습니다.
리자

바이브코딩 시간만 2~3시간 정도 해야 완성도 있는 결과물을 볼 수 있습니다. 제출된 작품에 올린 소스는 마지막단계(8step) 까지 바이브코딩 했는데 완벽하지 않습니다. 참고하시라고 올려 둡니다.