동네 헬스장 운동 기록부
gym-workout-logger
문제 설명
동네 헬스장 운동 기록부
매일 헬스장에서 어떤 운동을 했는지, 세트와 무게는 얼마였는지 기록하고 조회할 수 있는 간단한 운동 일지 시스템입니다. Laravel 13.x + Blade 템플릿 + SQLite로 구축하며, Tailwind CSS로 깔끔한 UI를 제공합니다.
필수 기능
- 운동 기록 추가: 날짜, 운동 종목(벤치프레스, 스쿼트 등), 세트 수, 무게(kg), 메모를 입력하여 저장
- 운동 기록 목록 조회: 최신순으로 모든 운동 기록을 테이블 형태로 표시
- 운동 기록 수정: 기존 기록의 세트 수, 무게, 메모를 수정 가능
- 운동 기록 삭제: 잘못 입력한 기록을 삭제할 수 있음
- 반응형 UI: 모바일에서도 편하게 사용할 수 있도록 Tailwind CSS 반응형 디자인 적용
- SQLite 데이터베이스: 별도 DB 설치 없이 SQLite로 간편하게 데이터 관리
보너스 기능 (선택)
- 운동 종목별로 필터링하여 조회
- 최근 7일간 운동한 총 세트 수 통계 표시
- 운동 종목 자동완성 기능 (자주 입력하는 종목 추천)
- 날짜별로 그룹화하여 표시
학습 목표
- Laravel 13.x의 라우팅, 컨트롤러, 모델, 마이그레이션 기본 이해
- Blade 템플릿 문법과 컴포넌트 활용법 익히기
- SQLite 데이터베이스 CRUD 작업 실습
- Tailwind CSS를 활용한 빠른 UI 구성 경험
제약 조건
- • Laravel 13.x 최신 버전 사용 필수
- • Blade 템플릿 엔진 사용 (React/Vue 등 SPA 프레임워크 금지)
- • SQLite 데이터베이스 사용 (MySQL/PostgreSQL 불필요)
- • Tailwind CSS로 스타일링 (Bootstrap 사용 금지)
- • CSRF 보호 활성화 (Laravel 기본 설정 유지)
- • RESTful 라우팅 규칙 준수 (GET, POST, PUT/PATCH, DELETE)
- • Blade 컴포넌트를 활용하여 레이아웃 재사용
- • 유효성 검사 규칙 적용 (날짜, 세트 수, 무게 필수 입력)
- • 모든 페이지는 반응형 디자인 적용
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
mkdir gym-workout-logger && cd gym-workout-logger 이 폴더에서 Laravel 13.x 프로젝트를 시작합니다. Laravel 13.x 최신 버전으로 새 프로젝트를 생성하고, SQLite 데이터베이스를 사용하도록 설정해주세요. 요구사항: 1. `composer create-project laravel/laravel .` 명령으로 현재 폴더에 Laravel 프로젝트 생성 2. `.env` 파일에서 DB_CONNECTION을 sqlite로 변경 3. `database/database.sqlite` 파일 생성 4. Tailwind CSS 설치 및 설정 (`npm install -D tailwindcss postcss autoprefixer && npx tailwindcss init -p`) 5. `tailwind.config.js`에서 content 경로 설정: `content: ['./resources/**/*.blade.php', './resources/**/*.js']` 6. `resources/css/app.css`에 Tailwind 디렉티브 추가 (`@tailwind base; @tailwind components; @tailwind utilities;`) 7. `npm install && npm run dev` 실행하여 에셋 빌드 8. Laravel 서버 실행 (`php artisan serve`) 완료 후 브라우저에서 http://localhost:8000 접속 시 Laravel 기본 화면이 보여야 합니다.
기대 결과: Laravel 13.x 프로젝트가 생성되고, SQLite 데이터베이스 설정이 완료되며, Tailwind CSS가 통합된 상태입니다. 개발 서버가 실행되어 기본 Laravel 화면을 확인할 수 있습니다.
운동 기록을 저장할 데이터베이스 테이블과 모델을 생성해주세요. 요구사항: 1. `php artisan make:model Workout -m` 명령으로 Workout 모델과 마이그레이션 파일 생성 2. 마이그레이션 파일 (`database/migrations/xxxx_create_workouts_table.php`)에 다음 컬럼 추가: - `date` (date, 운동 날짜) - `exercise` (string, 운동 종목명, 예: 벤치프레스, 스쿼트) - `sets` (integer, 세트 수) - `weight` (decimal(5,2), 무게 kg) - `memo` (text, nullable, 메모) - `timestamps` (created_at, updated_at 자동 추가) 3. Workout 모델 (`app/Models/Workout.php`)에 `$fillable` 속성 추가: `['date', 'exercise', 'sets', 'weight', 'memo']` 4. 모델에 날짜 캐스팅 추가: `protected $casts = ['date' => 'date'];` 5. `php artisan migrate` 실행하여 테이블 생성 완료 후 `database/database.sqlite` 파일에 workouts 테이블이 생성되어야 합니다.
기대 결과: workouts 테이블이 SQLite 데이터베이스에 생성되고, Workout 모델이 준비되어 CRUD 작업을 수행할 수 있는 상태입니다.
운동 기록 목록을 보여주는 메인 페이지와 새 기록을 추가하는 폼을 만들어주세요.
요구사항:
1. `php artisan make:controller WorkoutController --resource` 명령으로 RESTful 컨트롤러 생성
2. `routes/web.php`에 리소스 라우트 추가: `Route::resource('workouts', WorkoutController::class);`
3. WorkoutController의 `index` 메서드: 모든 운동 기록을 최신순으로 조회하여 `workouts.index` 뷰로 전달
4. `resources/views/workouts/index.blade.php` 생성:
- Tailwind CSS로 스타일링된 페이지 레이아웃
- 상단에 "운동 기록 추가" 버튼 (workouts.create 라우트로 이동)
- 운동 기록 목록을 테이블로 표시 (날짜, 운동 종목, 세트, 무게, 메모, 수정/삭제 버튼)
- 기록이 없을 때 "아직 운동 기록이 없습니다" 메시지 표시
5. WorkoutController의 `create` 메서드: `workouts.create` 뷰 반환
6. `resources/views/workouts/create.blade.php` 생성:
- 운동 기록 추가 폼 (날짜, 운동 종목, 세트, 무게, 메모 입력 필드)
- Tailwind CSS로 깔끔한 폼 디자인
- CSRF 토큰 포함 (`@csrf`)
- 제출 버튼과 취소 버튼 (목록으로 돌아가기)
7. 레이아웃 컴포넌트 생성 (`resources/views/layouts/app.blade.php`):
- HTML 기본 구조, Tailwind CSS 링크, 네비게이션 바
- `@yield('content')` 섹션 포함
- 모든 뷰에서 이 레이아웃 확장 (`@extends('layouts.app')`)
완료 후 브라우저에서 http://localhost:8000/workouts 접속 시 빈 목록 페이지가 보이고, "운동 기록 추가" 버튼 클릭 시 폼 페이지로 이동해야 합니다.
기대 결과: 운동 기록 목록 페이지와 추가 폼 페이지가 생성되고, Tailwind CSS로 스타일링된 UI가 표시됩니다. 아직 데이터 저장 기능은 구현되지 않았지만 페이지 간 이동이 가능합니다.
운동 기록을 데이터베이스에 저장하고, 수정 및 삭제 기능을 구현해주세요.
요구사항:
1. WorkoutController의 `store` 메서드:
- 요청 데이터 유효성 검사 (`$request->validate`)
- date: 필수, 날짜 형식
- exercise: 필수, 문자열, 최대 100자
- sets: 필수, 정수, 최소 1
- weight: 필수, 숫자, 최소 0
- memo: 선택, 문자열
- Workout 모델로 데이터 저장
- 저장 후 목록 페이지로 리다이렉트 및 성공 메시지 세션 플래시
2. WorkoutController의 `edit` 메서드:
- 특정 운동 기록 조회하여 `workouts.edit` 뷰로 전달
3. `resources/views/workouts/edit.blade.php` 생성:
- 수정 폼 (create와 유사하지만 기존 데이터로 채워짐)
- `@method('PUT')` 디렉티브 추가 (Laravel의 PUT 메서드 스푸핑)
- CSRF 토큰 포함
4. WorkoutController의 `update` 메서드:
- 유효성 검사 (store와 동일)
- 기존 기록 업데이트
- 목록 페이지로 리다이렉트 및 성공 메시지
5. WorkoutController의 `destroy` 메서드:
- 특정 운동 기록 삭제
- 목록 페이지로 리다이렉트 및 성공 메시지
6. `workouts.index` 뷰에서 수정/삭제 버튼 기능 연결:
- 수정 버튼: `workouts.edit` 라우트로 링크
- 삭제 버튼: DELETE 메서드로 폼 제출 (`@method('DELETE')`, 삭제 확인 알림 포함)
7. 세션 플래시 메시지 표시:
- 레이아웃 또는 index 뷰에서 `@if(session('success'))` 블록 추가
- Tailwind CSS로 스타일링된 성공 메시지 배너
완료 후 운동 기록을 추가, 수정, 삭제할 수 있고, 각 작업 후 성공 메시지가 표시되어야 합니다.
기대 결과: 운동 기록의 전체 CRUD 기능이 완성됩니다. 사용자는 운동 기록을 추가하고, 수정하고, 삭제할 수 있으며, 모든 작업 후 적절한 피드백 메시지를 받습니다. 데이터는 SQLite 데이터베이스에 영구 저장됩니다.