동네 반려식물 돌봄 일지
plant-care-diary-laravel
문제 설명
🌱 프로젝트 개요
집에서 키우는 반려식물들의 물주기, 분갈이, 성장 기록을 관리하는 Laravel + Blade 기반 웹 애플리케이션입니다. 식물 사진과 함께 돌봄 이력을 기록하고, 다음 물주기 날짜를 자동으로 계산해주는 실용적인 도구입니다.
✅ 필수 기능
- 반려식물 등록 (이름, 종류, 물주기 주기, 사진 URL)
- 식물 목록 조회 (카드 형태로 표시)
- 돌봄 기록 추가 (물주기, 비료주기, 분갈이 등)
- 다음 물주기 날짜 자동 계산 및 표시
- 식물별 돌봄 히스토리 조회
- SQLite 데이터베이스 사용
- Tailwind CSS로 반응형 디자인
🎁 선택 추가 기능 (보너스)
- 물주기 임박 알림 배지 (D-day 표시)
- 식물 성장 사진 갤러리 (여러 사진 등록)
- 식물 건강 상태 메모 기능
- 돌봄 통계 대시보드 (이번 달 물준 횟수 등)
- 식물별 색상 태그 분류
🎯 학습 목표
- Laravel 13.x의 기본 MVC 패턴 이해
- Blade 템플릿 컴포넌트 활용
- Eloquent ORM으로 간단한 관계 설정 (1:N)
- 마이그레이션과 시더 작성
- Carbon을 활용한 날짜 계산
- 폼 유효성 검증 (Validation)
- Tailwind CSS 기본 레이아웃
제약 조건
- • Laravel 13.x 사용 (최신 버전)
- • Blade 템플릿 엔진 사용 (React/Vue 금지)
- • SQLite 데이터베이스 사용
- • Tailwind CSS로 스타일링
- • 파일 업로드는 URL 입력 방식으로 간소화 (실제 파일 업로드 구현 선택)
- • 외부 API 연동 금지 (순수 Laravel 기능만)
- • 인증 시스템 불필요 (단일 사용자 가정)
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
mkdir plant-care-diary-laravel && cd plant-care-diary-laravel 이 폴더에서 Laravel 13.x 프로젝트를 시작합니다. # 반려식물 돌봄 일지 프로젝트 초기 설정 Laravel 13.x 프로젝트를 생성하고 기본 설정을 완료해주세요. ## 요구사항 1. Laravel 13.x 프로젝트 생성 (Composer 사용) 2. `.env` 파일 설정: - DB_CONNECTION=sqlite - 나머지 DB 설정 주석 처리 3. `database/database.sqlite` 파일 생성 4. Tailwind CSS 설치 및 설정: - `npm install -D tailwindcss postcss autoprefixer` - `npx tailwindcss init -p` - `tailwind.config.js`에 content 경로 설정: `['./resources/**/*.blade.php', './resources/**/*.js']` - `resources/css/app.css`에 Tailwind directives 추가 5. `vite.config.js` 확인 및 Laravel 플러그인 설정 6. 기본 레이아웃 Blade 파일 생성: - `resources/views/layouts/app.blade.php` 생성 - Tailwind CSS 로드, 헤더(타이틀), 메인 콘텐츠 영역 포함 - 네비게이션 바: "식물 목록", "식물 등록" 링크 ## 체크리스트 - [ ] Laravel 13.x 설치 완료 - [ ] SQLite 데이터베이스 설정 완료 - [ ] Tailwind CSS 설치 및 빌드 설정 완료 - [ ] 기본 레이아웃 파일 생성 - [ ] `npm run dev` 실행 가능 확인 완료 후 `php artisan serve`와 `npm run dev`를 실행하여 기본 화면이 나오는지 확인해주세요.
기대 결과: Laravel 13.x 프로젝트가 생성되고, SQLite 데이터베이스와 Tailwind CSS가 설정됩니다. 기본 레이아웃 파일이 생성되어 헤더와 네비게이션이 포함된 기본 구조가 완성됩니다. http://localhost:8000 접속 시 Tailwind CSS가 적용된 화면이 표시됩니다.
# 식물(Plant) 모델 및 데이터베이스 마이그레이션 생성 식물 정보를 저장할 모델과 마이그레이션을 생성해주세요. ## 요구사항 1. Plant 모델 생성: - `php artisan make:model Plant -m` 실행 2. 마이그레이션 파일 (`create_plants_table`) 작성: ```php - id (bigIncrements) - name (string) - 식물 이름 - species (string, nullable) - 식물 종류 - watering_frequency (integer) - 물주기 주기 (일 단위) - image_url (string, nullable) - 식물 사진 URL - last_watered_at (timestamp, nullable) - 마지막 물준 날짜 - notes (text, nullable) - 메모 - timestamps (created_at, updated_at) ``` 3. Plant 모델에 fillable 속성 추가: - `['name', 'species', 'watering_frequency', 'image_url', 'last_watered_at', 'notes']` 4. Plant 모델에 Accessor 추가: - `next_watering_date`: last_watered_at + watering_frequency로 다음 물주기 날짜 계산 - `days_until_watering`: 다음 물주기까지 남은 일수 계산 (Carbon 사용) 5. 마이그레이션 실행: - `php artisan migrate` ## 체크리스트 - [ ] Plant 모델 생성 - [ ] 마이그레이션 파일 작성 (필드 정의) - [ ] fillable 속성 설정 - [ ] Accessor 메서드 구현 - [ ] 마이그레이션 실행 성공 완료 후 `php artisan tinker`로 Plant 모델을 테스트해보세요.
기대 결과: Plant 모델과 plants 테이블이 생성됩니다. 식물의 기본 정보(이름, 종류, 물주기 주기 등)를 저장할 수 있는 데이터베이스 구조가 완성되고, 다음 물주기 날짜를 자동으로 계산하는 Accessor가 구현됩니다.
# 돌봄 기록(CareLog) 모델 및 관계 설정
식물별 돌봄 이력(물주기, 비료주기 등)을 기록할 모델을 생성해주세요.
## 요구사항
1. CareLog 모델 생성:
- `php artisan make:model CareLog -m`
2. 마이그레이션 파일 (`create_care_logs_table`) 작성:
```php
- id (bigIncrements)
- plant_id (foreignId) - plants 테이블 참조, onDelete('cascade')
- care_type (string) - 돌봄 유형 (물주기, 비료주기, 분갈이 등)
- performed_at (timestamp) - 돌봄 수행 날짜
- notes (text, nullable) - 메모
- timestamps
```
3. CareLog 모델에 fillable 속성 추가:
- `['plant_id', 'care_type', 'performed_at', 'notes']`
4. 관계 설정:
- Plant 모델: `careLogs()` hasMany 관계
- CareLog 모델: `plant()` belongsTo 관계
5. Plant 모델에 메서드 추가:
- `updateLastWatered()`: 물주기 기록 시 last_watered_at 자동 업데이트
6. 마이그레이션 실행:
- `php artisan migrate`
## 체크리스트
- [ ] CareLog 모델 생성
- [ ] 마이그레이션 파일 작성 (외래 키 포함)
- [ ] fillable 속성 설정
- [ ] Plant-CareLog 관계 설정
- [ ] 마이그레이션 실행 성공
완료 후 `php artisan tinker`로 관계가 정상 작동하는지 확인해보세요.
기대 결과: CareLog 모델과 care_logs 테이블이 생성됩니다. Plant와 CareLog 간 1:N 관계가 설정되어 식물별 돌봄 이력을 관리할 수 있습니다. 물주기 기록 시 마지막 물준 날짜가 자동으로 업데이트되는 로직이 포함됩니다.
# 식물 목록 및 등록 기능 구현
식물 목록을 보여주고 새 식물을 등록하는 화면과 컨트롤러를 구현해주세요.
## 요구사항
1. PlantController 생성:
- `php artisan make:controller PlantController --resource`
2. 라우트 등록 (`routes/web.php`):
- `Route::resource('plants', PlantController::class);`
- 홈(`/`) 라우트를 `plants.index`로 리다이렉트
3. `index()` 메서드 구현:
- 모든 식물 조회 (최신순)
- `resources/views/plants/index.blade.php`로 데이터 전달
4. `index.blade.php` 뷰 작성:
- 레이아웃 상속 (`@extends('layouts.app')`)
- 식물이 없을 때 안내 메시지
- 식물 카드 그리드 레이아웃 (Tailwind CSS 사용):
- 식물 사진 (image_url)
- 식물 이름 및 종류
- 마지막 물준 날짜
- 다음 물주기까지 D-day 표시 (색상: 0일 이하 빨강, 1-2일 노랑, 3일 이상 초록)
- "돌봄 기록" 버튼, "수정" 버튼
- "새 식물 등록" 버튼 (상단)
5. `create()` 메서드 구현:
- `resources/views/plants/create.blade.php`로 이동
6. `create.blade.php` 뷰 작성:
- 식물 등록 폼:
- 이름 (필수)
- 종류 (선택)
- 물주기 주기 (일 단위, 필수)
- 사진 URL (선택)
- 메모 (선택)
- Tailwind CSS로 폼 스타일링
- "등록" 버튼, "취소" 버튼
7. `store()` 메서드 구현:
- 폼 유효성 검증:
- name: required, max:255
- watering_frequency: required, integer, min:1
- image_url: nullable, url
- Plant 생성
- index로 리다이렉트 + 성공 메시지
## 체크리스트
- [ ] PlantController 생성 및 라우트 등록
- [ ] index 메서드 및 뷰 구현
- [ ] 식물 카드 그리드 레이아웃 완성
- [ ] D-day 색상 표시 구현
- [ ] create 메서드 및 뷰 구현
- [ ] store 메서드 및 유효성 검증 구현
완료 후 식물을 등록하고 목록에 표시되는지 확인해보세요.
기대 결과: 식물 목록 화면이 카드 형태로 표시되며, 각 식물의 사진, 이름, 다음 물주기까지 남은 일수가 색상으로 구분되어 나타납니다. 식물 등록 폼이 작동하여 새 식물을 추가할 수 있고, 유효성 검증이 적용됩니다.
# 돌봄 기록 추가 및 히스토리 조회 기능
식물별 돌봄 기록을 추가하고 이력을 조회하는 기능을 구현해주세요.
## 요구사항
1. CareLogController 생성:
- `php artisan make:controller CareLogController`
2. 라우트 추가 (`routes/web.php`):
```php
Route::get('/plants/{plant}/care-logs', [CareLogController::class, 'index'])->name('care-logs.index');
Route::post('/plants/{plant}/care-logs', [CareLogController::class, 'store'])->name('care-logs.store');
```
3. `index()` 메서드 구현:
- 특정 식물의 돌봄 기록 조회 (최신순)
- `resources/views/care-logs/index.blade.php`로 데이터 전달
4. `index.blade.php` 뷰 작성:
- 레이아웃 상속
- 식물 정보 표시 (상단)
- 돌봄 기록 추가 폼:
- 돌봄 유형 선택 (물주기, 비료주기, 분갈이, 가지치기, 기타)
- 수행 날짜 (기본값: 오늘)
- 메모 (선택)
- "기록 추가" 버튼
- 돌봄 히스토리 타임라인:
- 날짜별로 그룹화
- 돌봄 유형 아이콘 또는 배지
- 메모 표시
- "목록으로 돌아가기" 버튼
5. `store()` 메서드 구현:
- 폼 유효성 검증:
- care_type: required, in:물주기,비료주기,분갈이,가지치기,기타
- performed_at: required, date
- CareLog 생성
- 돌봄 유형이 "물주기"인 경우:
- Plant의 `last_watered_at` 업데이트
- 같은 페이지로 리다이렉트 + 성공 메시지
6. `index.blade.php`에서 plants 목록의 "돌봄 기록" 버튼 링크 연결
## 체크리스트
- [ ] CareLogController 생성 및 라우트 등록
- [ ] index 메서드 및 뷰 구현
- [ ] 돌봄 기록 추가 폼 구현
- [ ] store 메서드 및 유효성 검증 구현
- [ ] 물주기 시 last_watered_at 자동 업데이트
- [ ] 돌봄 히스토리 타임라인 표시
완료 후 식물에 돌봄 기록을 추가하고 히스토리가 표시되는지, 물주기 시 다음 물주기 날짜가 업데이트되는지 확인해보세요.
기대 결과: 식물별 돌봄 기록 추가 폼이 작동하며, 물주기/비료주기 등의 이력이 타임라인 형태로 표시됩니다. 물주기 기록 시 자동으로 마지막 물준 날짜가 업데이트되어 식물 목록의 D-day가 재계산됩니다. 돌봄 히스토리를 통해 식물 관리 이력을 한눈에 확인할 수 있습니다.
# 식물 수정/삭제 및 최종 UI 개선 식물 정보를 수정하고 삭제하는 기능을 추가하고, 전체 UI를 개선해주세요. ## 요구사항 1. PlantController의 `edit()`, `update()`, `destroy()` 메서드 구현: - `edit()`: 수정 폼 표시 - `update()`: 유효성 검증 후 식물 정보 업데이트 - `destroy()`: 식물 삭제 (cascade로 돌봄 기록도 자동 삭제) 2. `resources/views/plants/edit.blade.php` 뷰 작성: - create.blade.php와 유사한 폼 구조 - 기존 데이터로 폼 채우기 - "수정" 버튼, "취소" 버튼 - "삭제" 버튼 (하단, 빨간색, 확인 알림) 3. `index.blade.php` 개선: - 식물 카드에 "수정" 버튼 링크 연결 - 빈 상태 일러스트 또는 아이콘 추가 - 반응형 그리드 개선 (모바일: 1열, 태블릿: 2열, 데스크톱: 3-4열) 4. Flash 메시지 표시: - `layouts/app.blade.php`에 세션 메시지 표시 영역 추가 - Tailwind CSS로 성공/에러 메시지 스타일링 5. 전체 UI 개선: - 네비게이션 바 스타일 개선 (고정, 그림자 효과) - 버튼 호버 효과 추가 - 식물 카드 호버 시 살짝 확대 애니메이션 - 폼 입력 필드 포커스 스타일 - 로딩 상태 표시 (선택) 6. 시더 작성 (선택): - `database/seeders/PlantSeeder.php` 생성 - 샘플 식물 3-5개 생성 - 각 식물에 돌봄 기록 2-3개 추가 ## 체크리스트 - [ ] 식물 수정 기능 구현 - [ ] 식물 삭제 기능 구현 (확인 알림 포함) - [ ] edit.blade.php 뷰 작성 - [ ] Flash 메시지 표시 기능 - [ ] 전체 UI 반응형 및 애니메이션 개선 - [ ] (선택) 시더 작성 및 실행 완료 후 모든 CRUD 기능이 정상 작동하는지, UI가 모바일/데스크톱에서 잘 보이는지 확인해보세요. `npm run build`로 프로덕션 빌드도 테스트해보세요.
기대 결과: 식물 정보 수정 및 삭제 기능이 완성됩니다. 삭제 시 확인 알림이 표시되고, 관련 돌봄 기록도 함께 삭제됩니다. Flash 메시지로 사용자 피드백이 제공되며, 전체 UI가 반응형으로 개선되고 호버 효과, 애니메이션이 추가되어 완성도 높은 웹 애플리케이션이 완성됩니다. 시더를 실행하면 샘플 데이터로 바로 테스트할 수 있습니다.
제출된 작품 (0)
로그인 후 제출아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!