Laravel 미니 포토 갤러리 - 이미지 업로드 & 좋아요
laravel-photo-gallery-likes
문제 설명
📸 Laravel 미니 포토 갤러리
사진을 업로드하고 공유하는 간단한 갤러리 웹사이트를 Laravel 13.x + Blade 템플릿으로 만들어봅니다. 프로그래밍을 처음 접하는 분도 AI 도구와 함께라면 충분히 만들 수 있는 입문용 프로젝트입니다.
필수 기능
- ✅ 사진 업로드 폼 (제목, 설명, 이미지 파일)
- ✅ 업로드된 사진 그리드 레이아웃으로 표시
- ✅ 각 사진에 좋아요 버튼 (중복 방지 없음, 간단한 카운터)
- ✅ 사진 상세 보기 페이지
- ✅ SQLite 데이터베이스로 사진 정보 저장
- ✅ Laravel Storage를 사용한 이미지 파일 관리
- ✅ Tailwind CSS로 깔끔한 UI 구성
보너스 기능 (선택)
- 🎨 사진 업로드 시 썸네일 자동 생성
- 🔍 사진 제목으로 검색 기능
- 🏷️ 사진 삭제 기능
- 📱 반응형 디자인 개선
학습 목표
- Laravel 기본 구조 이해 (라우트, 컨트롤러, 뷰)
- Blade 템플릿 문법 익히기
- 파일 업로드 처리 방법
- 데이터베이스 마이그레이션 & Eloquent 모델
- 간단한 CRUD 구현
제약 조건
- • Laravel 13.x 사용 (최신 버전)
- • Blade 템플릿 엔진 사용 (React/Vue 등 SPA 프레임워크 금지)
- • SQLite 데이터베이스 사용
- • Tailwind CSS로 스타일링
- • 이미지 파일은 public/storage에 저장
- • 좋아요는 단순 카운터 (로그인/중복 체크 불필요)
- • 페이지네이션은 선택 사항
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
mkdir laravel-photo-gallery-likes && cd laravel-photo-gallery-likes 이 폴더에서 Laravel 13.x 프로젝트를 시작합니다. 다음 작업을 수행해주세요: 1. Laravel 13.x 프로젝트 생성 (composer create-project laravel/laravel . 명령 사용) 2. .env 파일을 SQLite 사용하도록 설정: - DB_CONNECTION=sqlite - DB_DATABASE 경로를 database/database.sqlite로 지정 - database/database.sqlite 파일 생성 3. Tailwind CSS 설치 및 설정 (npm install -D tailwindcss postcss autoprefixer, npx tailwindcss init -p) 4. tailwind.config.js에서 content 경로 설정 (resources/**/*.blade.php, resources/**/*.js) 5. resources/css/app.css에 Tailwind 디렉티브 추가 (@tailwind base; @tailwind components; @tailwind utilities;) 6. npm run build 실행하여 CSS 컴파일 7. 프로젝트가 정상 작동하는지 php artisan serve로 확인 모든 설정이 완료되면 "Laravel 13.x 프로젝트 초기 설정 완료" 메시지를 출력해주세요.
기대 결과: Laravel 13.x 프로젝트가 생성되고, SQLite 데이터베이스와 Tailwind CSS가 설정됩니다. php artisan serve 명령으로 로컬 서버가 실행되어 http://127.0.0.1:8000에서 Laravel 기본 페이지를 확인할 수 있습니다.
사진 정보를 저장할 데이터베이스 테이블과 모델을 생성합니다. 다음 작업을 수행해주세요: 1. Photo 모델과 마이그레이션 파일 생성 (php artisan make:model Photo -m) 2. 마이그레이션 파일에 다음 컬럼 추가: - title (string, 사진 제목) - description (text, nullable, 사진 설명) - image_path (string, 이미지 파일 경로) - likes_count (integer, default 0, 좋아요 수) - timestamps (created_at, updated_at) 3. php artisan migrate 실행하여 테이블 생성 4. Photo 모델에 $fillable 속성 추가 (title, description, image_path, likes_count) 5. storage/app/public 폴더와 public/storage 심볼릭 링크 생성 (php artisan storage:link) 완료되면 "Photo 모델 및 데이터베이스 테이블 생성 완료" 메시지를 출력해주세요.
기대 결과: photos 테이블이 SQLite 데이터베이스에 생성되고, Photo Eloquent 모델이 준비됩니다. storage 폴더와 public 폴더가 연결되어 업로드된 이미지를 웹에서 접근할 수 있게 됩니다.
사진 업로드 및 갤러리 표시 기능을 구현합니다.
다음 작업을 수행해주세요:
1. PhotoController 생성 (php artisan make:controller PhotoController)
2. 라우트 설정 (routes/web.php):
- GET / : 갤러리 메인 페이지 (PhotoController@index)
- GET /upload : 사진 업로드 폼 페이지 (PhotoController@create)
- POST /upload : 사진 업로드 처리 (PhotoController@store)
- GET /photos/{id} : 사진 상세 보기 (PhotoController@show)
- POST /photos/{id}/like : 좋아요 증가 (PhotoController@like)
3. PhotoController의 index 메서드:
- 모든 사진을 최신순으로 가져오기 (Photo::latest()->get())
- resources/views/gallery/index.blade.php 뷰로 전달
4. PhotoController의 create 메서드:
- resources/views/gallery/upload.blade.php 뷰 반환
5. PhotoController의 store 메서드:
- 업로드된 이미지 파일을 storage/app/public/photos 폴더에 저장
- 파일명은 유니크하게 생성 (예: time() . '_' . 원본파일명)
- Photo 모델에 데이터 저장 (title, description, image_path)
- 갤러리 메인 페이지로 리다이렉트
6. PhotoController의 show 메서드:
- id로 사진 찾기 (Photo::findOrFail($id))
- resources/views/gallery/show.blade.php 뷰로 전달
7. PhotoController의 like 메서드:
- id로 사진 찾기
- likes_count 1 증가 (increment('likes_count'))
- 이전 페이지로 리다이렉트
완료되면 "PhotoController 및 라우트 설정 완료" 메시지를 출력해주세요.
기대 결과: 사진 업로드, 조회, 좋아요 기능을 처리하는 컨트롤러와 라우트가 설정됩니다. 아직 뷰 파일은 없지만 백엔드 로직이 준비됩니다.
Blade 템플릿으로 갤러리 UI를 구현합니다.
다음 작업을 수행해주세요:
1. resources/views/layouts/app.blade.php 레이아웃 파일 생성:
- HTML 기본 구조 (<!DOCTYPE html>, <html>, <head>, <body>)
- <head>에 Tailwind CSS 포함 (@vite(['resources/css/app.css']))
- <body>에 네비게이션 바 (홈, 업로드 링크)
- @yield('content')로 본문 영역 지정
2. resources/views/gallery/index.blade.php 생성:
- @extends('layouts.app')로 레이아웃 상속
- 사진 그리드 레이아웃 (Tailwind grid, 3열 또는 4열)
- 각 사진 카드:
* 이미지 (Storage::url($photo->image_path)로 경로 생성)
* 제목, 설명 일부, 좋아요 수
* 상세 보기 링크
* 좋아요 버튼 (하트 아이콘 또는 이모지)
- 사진이 없을 경우 "아직 업로드된 사진이 없습니다" 메시지
3. resources/views/gallery/upload.blade.php 생성:
- 사진 업로드 폼 (POST /upload, enctype="multipart/form-data")
- @csrf 토큰 포함
- 입력 필드: 제목 (required), 설명 (textarea), 이미지 파일 (required, accept="image/*")
- 제출 버튼
- Tailwind CSS로 깔끔한 폼 스타일링
4. resources/views/gallery/show.blade.php 생성:
- 사진 상세 정보 (큰 이미지, 제목, 설명, 좋아요 수)
- 좋아요 버튼 (POST /photos/{id}/like 폼)
- 갤러리로 돌아가기 링크
5. 모든 뷰에서 Tailwind CSS 유틸리티 클래스를 사용하여 반응형 디자인 구현
완료되면 "갤러리 UI 구현 완료" 메시지를 출력하고, 브라우저에서 테스트할 수 있도록 안내해주세요.
기대 결과: 사용자가 사진을 업로드하고, 그리드 레이아웃으로 갤러리를 확인하고, 개별 사진을 상세 보기하고, 좋아요를 누를 수 있는 완전한 UI가 완성됩니다. Tailwind CSS로 깔끔하고 현대적인 디자인이 적용됩니다.
제출된 작품 (0)
로그인 후 제출아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!