팀 스킬 매트릭스 대시보드 - 개발자 역량 시각화 & 학습 로드맵 - 바이브코딩 레시피
중급 PHP + JavaScript Laravel + React + Inertia.js AI: Claude

팀 스킬 매트릭스 대시보드 - 개발자 역량 시각화 & 학습 로드맵

리포지토리명 team-skill-matrix-dashboard
조회수 128 1건 제출

문제 설명

프로젝트 개요

개발팀의 기술 스택과 팀원들의 역량 수준을 시각적으로 관리하는 스킬 매트릭스 대시보드입니다. Laravel 13.x + Inertia.js + React 19를 사용하여 모노리스 풀스택 애플리케이션으로 구현합니다.

핵심 기능

필수 기능

  • 스킬 카테고리 관리: 프론트엔드, 백엔드, 데브옵스, 소프트 스킬 등 카테고리별 기술 관리
  • 팀원 프로필: 이름, 직무, 입사일 등 기본 정보 등록
  • 스킬 레벨 매트릭스: 팀원별로 각 기술에 대한 숙련도 (1-5단계) 기록
    • 1: 입문 (Beginner)
    • 2: 초급 (Elementary)
    • 3: 중급 (Intermediate)
    • 4: 고급 (Advanced)
    • 5: 전문가 (Expert)
  • 시각화 대시보드: 히트맵 형식으로 팀 전체 스킬 분포 표시
  • 스킬 갭 분석: 부족한 기술 영역 하이라이트
  • 필터링: 카테고리별, 레벨별 필터링 기능

보너스 기능

  • 학습 로드맵: 팀원이 다음 레벨로 올라가기 위한 학습 자료 링크 추가
  • 목표 설정: 분기별 스킬 향상 목표 설정 및 진행률 추적
  • 엑셀 내보내기: 스킬 매트릭스를 CSV/Excel로 다운로드
  • 스킬 트렌드: 월별 팀 평균 스킬 레벨 변화 그래프
  • 멘토링 매칭: 특정 스킬의 전문가와 학습자 자동 매칭 제안

기술적 특징

  • Laravel 13.x: 백엔드 로직, DB 관리, Eloquent ORM
  • Inertia.js: Laravel과 React를 SPA처럼 연결 (별도 API 불필요)
  • React 19: 인터랙티브 UI 컴포넌트
  • Tailwind CSS: 모던한 스타일링
  • SQLite: 개발 편의성을 위한 경량 DB
  • Chart.js 또는 Recharts: 데이터 시각화

학습 목표

  • Laravel Breeze + Inertia.js + React 스타터 킷 활용법
  • Inertia.js의 서버-클라이언트 데이터 전달 방식 이해
  • 다대다(Many-to-Many) 관계 모델링 (팀원 ↔ 스킬)
  • Pivot 테이블에 추가 컬럼(레벨) 저장하기
  • React에서 복잡한 테이블 UI 구현
  • 조건부 스타일링 (레벨에 따른 색상 변화)

제약 조건

  • • Laravel 13.x + Inertia.js + React 19 모노리스 구조 (별도 API 서버 없음)
  • • Laravel Breeze (React + Inertia) starter kit 사용
  • • SQLite 데이터베이스 사용 (개발 편의성)
  • • Tailwind CSS로 스타일링
  • • 팀원(Member)과 스킬(Skill) 간 다대다 관계 (중간 테이블에 level 컬럼 추가)
  • • 스킬 레벨은 1~5 정수값
  • • 히트맵 시각화는 색상 그라데이션으로 표현 (낮음: 회색/파랑, 높음: 초록/노랑)
  • • CRUD 작업은 모두 Inertia.js를 통해 처리
  • • React 컴포넌트는 resources/js/Pages 폴더에 위치
  • • 인증 기능은 Breeze 기본 제공 활용 (로그인/회원가입)

프롬프트 레시피

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

1
Step 1
mkdir team-skill-matrix-dashboard && cd team-skill-matrix-dashboard

이 폴더에서 Laravel 13.x + Inertia.js + React 19 프로젝트를 시작합니다.

다음 작업을 수행해주세요:

1. Laravel 13.x 프로젝트를 생성합니다:
   ```bash
   composer create-project laravel/laravel . "13.*"
   ```

2. Laravel Breeze (React + Inertia.js 스택)를 설치합니다:
   ```bash
   composer require laravel/breeze --dev
   php artisan breeze:install react
   ```

3. 데이터베이스를 SQLite로 설정합니다:
   - .env 파일에서 DB_CONNECTION=sqlite로 변경
   - database/database.sqlite 파일 생성

4. 필요한 마이그레이션과 모델을 생성합니다:
   - members 테이블: 팀원 정보 (name, position, joined_at)
   - skills 테이블: 스킬 정보 (name, category)
   - member_skill 피벗 테이블: 팀원-스킬 관계 (member_id, skill_id, level)

5. 각 모델 파일을 생성하고 관계를 정의합니다:
   - Member 모델: skills() belongsToMany 관계
   - Skill 모델: members() belongsToMany 관계

6. 마이그레이션 파일 작성:
   - members: id, name(string), position(string), joined_at(date), timestamps
   - skills: id, name(string), category(string), timestamps
   - member_skill: id, member_id(foreign), skill_id(foreign), level(integer 1-5), timestamps

7. 시더(Seeder)를 생성하여 샘플 데이터를 추가합니다:
   - 5명의 팀원 (예: 김개발, 이프론트, 박백엔드, 최데브옵스, 정풀스택)
   - 카테고리별 스킬 15개 정도
     * Frontend: React, Vue, TypeScript, HTML/CSS, Next.js
     * Backend: Laravel, Node.js, Python, Database, API Design
     * DevOps: Docker, AWS, CI/CD, Kubernetes, Linux
   - 각 팀원마다 랜덤하게 5-10개 스킬에 1-5 레벨 할당

8. 마이그레이션과 시딩을 실행합니다:
   ```bash
   php artisan migrate:fresh --seed
   ```

9. 개발 서버를 실행합니다:
   ```bash
   php artisan serve
   npm install
   npm run dev
   ```

모든 설정이 완료되면 http://localhost:8000에 접속하여 Breeze 기본 화면이 나오는지 확인하세요.

기대 결과: Laravel 13.x + Breeze + React + Inertia.js 프로젝트가 초기화되고, Member/Skill 모델과 마이그레이션이 생성되며, 샘플 데이터가 시딩됩니다. 개발 서버가 실행되어 기본 로그인 화면이 표시됩니다.

2
Step 2
스킬 매트릭스 대시보드의 메인 페이지를 구현합니다.

다음 작업을 수행해주세요:

1. 라우트를 추가합니다 (routes/web.php):
   ```php
   Route::middleware('auth')->group(function () {
       Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
   });
   ```

2. DashboardController를 생성하고 index 메서드를 구현합니다:
   - 모든 팀원 정보를 가져옵니다 (skills 관계 eager loading)
   - 모든 스킬 정보를 카테고리별로 그룹화합니다
   - Inertia::render()로 'Dashboard/Index' 컴포넌트에 데이터 전달
   ```php
   public function index()
   {
       $members = Member::with('skills')->get();
       $skills = Skill::all()->groupBy('category');
       
       return Inertia::render('Dashboard/Index', [
           'members' => $members,
           'skills' => $skills,
       ]);
   }
   ```

3. React 컴포넌트를 생성합니다 (resources/js/Pages/Dashboard/Index.jsx):
   - Tailwind CSS를 사용하여 레이아웃 구성
   - 상단에 페이지 제목과 설명
   - 스킬 매트릭스를 테이블 형식으로 표시:
     * 첫 번째 열: 팀원 이름
     * 나머지 열: 각 스킬 (카테고리별로 구분)
     * 셀 내용: 해당 팀원의 해당 스킬 레벨 (1-5)
   - 레벨에 따라 배경색 변경:
     * 레벨 없음: 회색 (gray-100)
     * 레벨 1: 파랑 연함 (blue-100)
     * 레벨 2: 파랑 (blue-300)
     * 레벨 3: 초록 (green-300)
     * 레벨 4: 노랑 (yellow-300)
     * 레벨 5: 주황 (orange-400)

4. 헤더에 카테고리별 구분선 추가:
   - 카테고리가 바뀔 때마다 배경색이나 구분선으로 시각적 구분

5. 반응형 디자인 적용:
   - 모바일에서는 가로 스크롤 가능하도록 overflow-x-auto 적용

6. 네비게이션 메뉴 수정:
   - Breeze 기본 레이아웃에서 'Dashboard' 링크가 /dashboard로 연결되도록 수정

완성 후 /dashboard 경로로 접속하여 팀원별 스킬 레벨이 색상으로 표시되는 매트릭스가 보이는지 확인하세요.

기대 결과: 대시보드 페이지가 생성되고, 팀원 x 스킬 매트릭스가 테이블로 표시됩니다. 각 셀은 레벨에 따라 다른 색상으로 표시되어 시각적으로 스킬 분포를 파악할 수 있습니다.

3
Step 3
팀원 관리 기능을 구현합니다 (CRUD).

다음 작업을 수행해주세요:

1. 라우트를 추가합니다 (routes/web.php):
   ```php
   Route::middleware('auth')->group(function () {
       Route::resource('members', MemberController::class);
   });
   ```

2. MemberController를 생성하고 다음 메서드를 구현합니다:
   - index: 팀원 목록
   - create: 팀원 추가 폼
   - store: 팀원 저장
   - edit: 팀원 수정 폼
   - update: 팀원 업데이트
   - destroy: 팀원 삭제

3. React 컴포넌트를 생성합니다:
   - resources/js/Pages/Members/Index.jsx: 팀원 목록 (테이블 형식)
     * 이름, 직무, 입사일 표시
     * 각 행에 '수정', '삭제' 버튼
     * 상단에 '+ 새 팀원 추가' 버튼
   - resources/js/Pages/Members/Create.jsx: 팀원 추가 폼
     * 이름 (text input)
     * 직무 (text input)
     * 입사일 (date input)
     * '저장' 버튼 (Inertia.post로 전송)
   - resources/js/Pages/Members/Edit.jsx: 팀원 수정 폼
     * Create와 유사하지만 기존 데이터 표시
     * Inertia.put으로 업데이트

4. 폼 검증 (Validation) 추가:
   - MemberController의 store/update 메서드에서 Request validation 적용
   - name: required, max:255
   - position: required, max:255
   - joined_at: required, date

5. 삭제 확인 모달:
   - 삭제 버튼 클릭 시 confirm() 또는 모달로 확인 후 Inertia.delete 호출

6. 네비게이션에 '팀원 관리' 링크 추가:
   - Breeze 레이아웃에서 /members로 연결되는 링크 추가

7. 성공/에러 메시지 표시:
   - Laravel의 session flash 메시지를 Inertia에서 받아서 알림으로 표시
   - Tailwind CSS 알림 컴포넌트 사용 (초록색: 성공, 빨강색: 에러)

완성 후 /members에서 팀원을 추가/수정/삭제할 수 있는지 확인하세요.

기대 결과: 팀원 관리 페이지가 생성되고, 팀원을 추가/수정/삭제할 수 있는 CRUD 기능이 완성됩니다. 폼 검증과 성공 메시지가 표시됩니다.

4
Step 4
스킬 관리 기능을 구현합니다 (CRUD).

다음 작업을 수행해주세요:

1. 라우트를 추가합니다 (routes/web.php):
   ```php
   Route::middleware('auth')->group(function () {
       Route::resource('skills', SkillController::class);
   });
   ```

2. SkillController를 생성하고 다음 메서드를 구현합니다:
   - index: 스킬 목록 (카테고리별로 그룹화)
   - create: 스킬 추가 폼
   - store: 스킬 저장
   - edit: 스킬 수정 폼
   - update: 스킬 업데이트
   - destroy: 스킬 삭제

3. React 컴포넌트를 생성합니다:
   - resources/js/Pages/Skills/Index.jsx: 스킬 목록
     * 카테고리별로 아코디언 또는 탭으로 구분
     * 각 스킬에 '수정', '삭제' 버튼
     * 상단에 '+ 새 스킬 추가' 버튼
   - resources/js/Pages/Skills/Create.jsx: 스킬 추가 폼
     * 스킬 이름 (text input)
     * 카테고리 (select dropdown: Frontend, Backend, DevOps, Soft Skills, Other)
     * '저장' 버튼
   - resources/js/Pages/Skills/Edit.jsx: 스킬 수정 폼

4. 폼 검증:
   - name: required, max:255
   - category: required, in:Frontend,Backend,DevOps,Soft Skills,Other

5. 카테고리별 색상 뱃지:
   - Frontend: 파랑
   - Backend: 초록
   - DevOps: 보라
   - Soft Skills: 주황
   - Other: 회색

6. 네비게이션에 '스킬 관리' 링크 추가:
   - /skills로 연결

7. 스킬 삭제 시 주의사항:
   - 스킬이 팀원과 연결되어 있으면 경고 메시지 표시
   - 강제 삭제 또는 취소 선택 가능

완성 후 /skills에서 스킬을 추가/수정/삭제할 수 있는지 확인하세요.

기대 결과: 스킬 관리 페이지가 생성되고, 스킬을 카테고리별로 관리할 수 있는 CRUD 기능이 완성됩니다. 카테고리별 색상 뱃지가 표시됩니다.

5
Step 5
팀원별 스킬 레벨 편집 기능을 구현합니다.

다음 작업을 수행해주세요:

1. 라우트를 추가합니다 (routes/web.php):
   ```php
   Route::middleware('auth')->group(function () {
       Route::get('/members/{member}/skills', [MemberSkillController::class, 'edit'])->name('members.skills.edit');
       Route::put('/members/{member}/skills', [MemberSkillController::class, 'update'])->name('members.skills.update');
   });
   ```

2. MemberSkillController를 생성하고 다음 메서드를 구현합니다:
   - edit: 특정 팀원의 스킬 레벨 편집 폼
     * 해당 팀원 정보와 모든 스킬 목록을 가져옴
     * 팀원이 이미 가진 스킬의 레벨도 함께 전달
   - update: 스킬 레벨 업데이트
     * Request에서 skills 배열을 받음 (skill_id => level)
     * sync() 메서드로 중간 테이블 업데이트
     * 레벨이 0이거나 null인 경우 해당 스킬 제거

3. React 컴포넌트를 생성합니다 (resources/js/Pages/Members/EditSkills.jsx):
   - 상단에 팀원 정보 표시 (이름, 직무)
   - 카테고리별로 스킬 목록 표시
   - 각 스킬마다 레벨 선택 드롭다운 (0-5):
     * 0: 없음 (해당 스킬 미보유)
     * 1-5: 레벨 1-5
   - 선택된 레벨에 따라 실시간으로 색상 프리뷰 표시
   - '저장' 버튼으로 Inertia.put 전송

4. 대시보드와 팀원 목록에 '스킬 편집' 링크 추가:
   - 각 팀원 행에 '스킬 편집' 버튼 추가
   - /members/{id}/skills로 연결

5. 저장 후 피드백:
   - 성공 시 '스킬이 업데이트되었습니다' 메시지
   - 대시보드로 리다이렉트

6. 선택적 개선:
   - 스킬 레벨 선택 시 각 레벨의 의미를 툴팁으로 표시
     * 1: 입문 - 기본 개념 이해
     * 2: 초급 - 간단한 작업 수행 가능
     * 3: 중급 - 독립적으로 작업 가능
     * 4: 고급 - 복잡한 문제 해결 가능
     * 5: 전문가 - 다른 사람을 가르칠 수 있음

완성 후 팀원의 스킬 레벨을 수정하고 대시보드에서 변경사항이 반영되는지 확인하세요.

기대 결과: 팀원별 스킬 레벨 편집 페이지가 생성되고, 드롭다운으로 각 스킬의 레벨을 설정할 수 있습니다. 변경사항이 저장되면 대시보드의 매트릭스에 즉시 반영됩니다.

6
Step 6
대시보드에 필터링과 통계 기능을 추가합니다.

다음 작업을 수행해주세요:

1. DashboardController를 업데이트합니다:
   - 카테고리별 평균 스킬 레벨 계산
   - 팀 전체 평균 스킬 레벨 계산
   - 레벨별 스킬 개수 통계 (레벨 1: X개, 레벨 2: Y개, ...)
   - 가장 많이 보유한 스킬 Top 5
   - 가장 부족한 스킬 (보유자가 적거나 레벨이 낮은 스킬)

2. Dashboard/Index.jsx 컴포넌트를 업데이트합니다:
   - 상단에 통계 카드 섹션 추가:
     * 총 팀원 수
     * 총 스킬 수
     * 팀 평균 스킬 레벨
     * 가장 강한 카테고리
   - 필터링 UI 추가:
     * 카테고리 필터 (드롭다운 또는 버튼 그룹)
     * 최소 레벨 필터 (슬라이더 또는 드롭다운)
   - 필터 적용 시 매트릭스 테이블 동적 업데이트

3. 스킬 갭 분석 섹션 추가:
   - 레벨 3 미만인 스킬을 하이라이트
   - '개선이 필요한 영역' 리스트 표시
   - 해당 스킬을 가진 팀원 목록 표시

4. React state를 사용하여 필터링 구현:
   - useState로 selectedCategory, minLevel 상태 관리
   - 필터 변경 시 테이블 데이터를 클라이언트 사이드에서 필터링
   - 필터링된 데이터만 테이블에 표시

5. 차트 라이브러리 추가 (선택사항):
   - npm install recharts 또는 chart.js
   - 카테고리별 평균 스킬 레벨을 막대 그래프로 표시
   - 레벨별 분포를 도넛 차트로 표시

6. 반응형 레이아웃:
   - 통계 카드는 그리드로 배치 (모바일: 1열, 태블릿: 2열, 데스크톱: 4열)
   - 차트는 모바일에서 세로 스크롤 가능하도록 조정

7. 데이터 새로고침 버튼:
   - 우측 상단에 '새로고침' 아이콘 버튼
   - 클릭 시 Inertia.reload() 호출

완성 후 대시보드에서 필터를 적용하고 통계가 정확하게 표시되는지 확인하세요.

기대 결과: 대시보드에 통계 카드, 필터링 UI, 스킬 갭 분석 섹션이 추가됩니다. 카테고리나 레벨 필터를 변경하면 매트릭스 테이블이 동적으로 업데이트되고, 차트가 표시됩니다.

제출된 작품 (1)

로그인 후 제출

개발팀의 기술 역량을 시각화하고 학습 로드맵을 제공하는 인터랙티브 대시보드

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

댓글 (1)

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

꽤 괜찮은 레시피라 데모 사이트를 연결해 봤습니다. https://team-skill-matrix-dashboard.gnuboard.net/ 로그인 정보는 test@example.com , password 입니다