동네 맛집 지도 - 내가 다녀온 식당 기록
local-restaurant-diary
문제 설명
프로젝트 개요
내가 다녀온 동네 맛집을 지도에 표시하고 기록하는 Laravel 기반 웹 애플리케이션입니다. 식당 이름, 위치, 방문 날짜, 별점, 메모를 저장하고 목록으로 확인할 수 있습니다.
필수 기능
- 식당 정보 등록 (이름, 주소, 카테고리, 별점, 방문 날짜, 메모)
- 등록된 식당 목록 조회 (카드형 레이아웃)
- 식당 상세 정보 보기
- 식당 정보 수정 및 삭제
- 카테고리별 필터링 (한식, 중식, 일식, 양식, 카페 등)
- 별점 순/최신 순 정렬
- SQLite 데이터베이스 사용
- Tailwind CSS로 모바일 친화적 UI 구성
보너스 기능
- 식당 사진 업로드 (1장)
- 검색 기능 (식당 이름/주소)
- 재방문 여부 체크박스
- 평균 별점 통계 표시
- 방문 횟수가 많은 카테고리 표시
기술 스택
- Laravel 12.x
- Blade 템플릿 엔진
- Tailwind CSS
- SQLite
- Alpine.js (간단한 인터랙션용)
제약 조건
- • Laravel 12.x 사용 (구버전 금지)
- • Blade 템플릿만 사용 (React, Vue 등 SPA 프레임워크 사용 금지)
- • SQLite 데이터베이스 사용
- • Tailwind CSS로 스타일링
- • 별점은 1~5점 (0.5점 단위 허용)
- • 카테고리는 미리 정의된 목록 사용 (한식, 중식, 일식, 양식, 카페, 기타)
- • 반응형 디자인 (모바일 우선)
- • CSRF 보호 활성화
- • 폼 유효성 검사 구현
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
Laravel 12.x 프로젝트를 생성하고 기본 설정을 해주세요.
요구사항:
1. 프로젝트명: local-restaurant-diary
2. SQLite 데이터베이스 설정 (.env 파일에서 DB_CONNECTION=sqlite)
3. database/database.sqlite 파일 생성
4. Tailwind CSS 설치 및 설정 (Laravel 공식 가이드 참고)
5. Alpine.js CDN 추가 (resources/views/layouts/app.blade.php)
6. 기본 레이아웃 파일 생성 (app.blade.php):
- 네비게이션 바 (로고, 메뉴)
- 메인 콘텐츠 영역
- 푸터
- Tailwind CSS 클래스 사용
- 모바일 반응형
레이아웃에는 다음 요소를 포함해주세요:
- 상단 네비게이션: '동네 맛집 지도' 로고, '맛집 추가' 버튼, '전체 목록' 링크
- yield('content') 영역
- 간단한 푸터 (제작 정보)
프로젝트 구조와 초기 설정이 완료되면 다음 단계로 넘어갈 수 있도록 준비해주세요.
기대 결과: Laravel 12.x 프로젝트가 생성되고, SQLite 데이터베이스 설정 완료, Tailwind CSS와 Alpine.js가 설치되어 있으며, 기본 레이아웃 파일(app.blade.php)이 생성되어 네비게이션과 푸터가 포함된 상태
식당(Restaurant) 모델과 마이그레이션, 컨트롤러를 생성해주세요.
요구사항:
1. Restaurant 모델 생성 (php artisan make:model Restaurant -mcr)
- 마이그레이션, 컨트롤러(RestaurantController)도 함께 생성
2. 마이그레이션 파일 (create_restaurants_table.php):
- id (primary key)
- name (string, 식당 이름)
- address (string, 주소)
- category (string, 카테고리: 한식/중식/일식/양식/카페/기타)
- rating (decimal, 별점 1.0~5.0, 소수점 1자리)
- visited_at (date, 방문 날짜)
- memo (text, nullable, 메모)
- is_revisit (boolean, default false, 재방문 여부)
- timestamps
3. Restaurant 모델:
- fillable 속성 정의
- visited_at을 Carbon 인스턴스로 캐스팅
- rating 유효성 검사 (1.0~5.0 범위)
4. RestaurantController:
- index() 메서드: 전체 목록 조회 (최신순)
- create() 메서드: 등록 폼 표시
- store() 메서드: 새 식당 저장
- show() 메서드: 상세 정보
- edit() 메서드: 수정 폼
- update() 메서드: 정보 수정
- destroy() 메서드: 삭제
5. routes/web.php에 RESTful 라우트 등록:
- Route::resource('restaurants', RestaurantController::class);
- 홈페이지(/)는 restaurants.index로 리다이렉트
6. 마이그레이션 실행 (php artisan migrate)
컨트롤러 메서드에는 아직 상세 로직을 구현하지 않아도 됩니다. 다음 단계에서 Blade 뷰와 함께 구현하겠습니다.
기대 결과: Restaurant 모델, 마이그레이션, RestaurantController가 생성되고, 데이터베이스 테이블이 생성되며, RESTful 라우트가 등록된 상태. 컨트롤러의 기본 메서드 구조가 준비됨
식당 목록 페이지와 등록 폼을 구현해주세요. 요구사항: 1. resources/views/restaurants/index.blade.php 생성: - 상단에 '맛집 추가' 버튼 (restaurants.create로 이동) - 카테고리 필터 버튼 (전체/한식/중식/일식/양식/카페/기타) - 정렬 옵션 (최신순/별점 높은 순/별점 낮은 순) - 식당 카드 그리드 레이아웃 (모바일: 1열, 태블릿: 2열, 데스크톱: 3열) - 각 카드에 표시: 식당 이름, 카테고리 뱃지, 별점(⭐), 주소, 방문 날짜, 재방문 뱃지 - 카드 클릭 시 상세 페이지로 이동 - 등록된 식당이 없을 때 안내 메시지 2. resources/views/restaurants/create.blade.php 생성: - 식당 등록 폼 - 필드: 이름(required), 주소(required), 카테고리(select, required), 별점(1~5, 0.5 단위 선택, required), 방문 날짜(date, required), 메모(textarea, optional), 재방문 여부(checkbox) - Tailwind CSS로 폼 스타일링 - 유효성 검사 에러 메시지 표시 영역 - '저장' 버튼과 '취소' 버튼 3. RestaurantController 로직 구현: - index(): 카테고리 필터와 정렬 쿼리 파라미터 처리, 뷰에 데이터 전달 - create(): 빈 폼 표시 - store(): 폼 데이터 유효성 검사 및 저장, 성공 시 목록으로 리다이렉트 + 성공 메시지 4. Alpine.js로 별점 입력 UI 구현 (별 아이콘 클릭/호버 효과) 5. 세션 플래시 메시지 표시 (성공/에러) Tailwind CSS를 사용하여 깔끔하고 현대적인 디자인으로 만들어주세요.
기대 결과: 식당 목록 페이지가 카드 그리드로 표시되고, 카테고리 필터와 정렬 기능이 작동하며, 식당 등록 폼이 모든 필드와 유효성 검사를 포함하여 완성된 상태. 폼 제출 시 데이터가 저장되고 목록으로 돌아감
식당 상세 페이지, 수정 및 삭제 기능을 구현해주세요. 요구사항: 1. resources/views/restaurants/show.blade.php 생성: - 식당 이름 (큰 제목) - 카테고리 뱃지 - 별점 표시 (⭐ 아이콘으로 시각화) - 주소 - 방문 날짜 - 재방문 여부 표시 - 메모 (있을 경우) - 하단에 '수정' 버튼, '삭제' 버튼, '목록으로' 버튼 - 카드형 레이아웃으로 깔끔하게 정리 2. resources/views/restaurants/edit.blade.php 생성: - create.blade.php와 유사한 폼 - 기존 데이터가 입력된 상태로 표시 - '수정 완료' 버튼과 '취소' 버튼 3. RestaurantController 로직 구현: - show($id): 특정 식당 조회 및 뷰 전달 - edit($id): 수정 폼에 기존 데이터 전달 - update(Request $request, $id): 유효성 검사 후 데이터 수정, 성공 메시지와 함께 상세 페이지로 리다이렉트 - destroy($id): 식당 삭제, 성공 메시지와 함께 목록으로 리다이렉트 4. 삭제 확인 모달: - Alpine.js로 간단한 확인 대화상자 구현 - "정말 삭제하시겠습니까?" 메시지 - '삭제' / '취소' 버튼 5. 폼 재사용을 위한 Blade 컴포넌트 (선택사항): - resources/views/components/restaurant-form.blade.php - create와 edit에서 공통 사용 6. 에러 핸들링: - 존재하지 않는 식당 ID 접근 시 404 에러 - 유효성 검사 실패 시 에러 메시지 표시 모든 페이지가 모바일 반응형이고 Tailwind CSS로 일관된 디자인을 유지하도록 해주세요.
기대 결과: 식당 상세 페이지가 모든 정보를 보기 좋게 표시하고, 수정 폼이 기존 데이터로 채워져 작동하며, 삭제 확인 모달이 구현되고, 모든 CRUD 기능이 완전히 작동하는 상태. 에러 핸들링과 성공 메시지가 적절히 표시됨