Laravel 미니 포토 갤러리 - 이미지 업로드 & 좋아요 - 바이브코딩 레시피
입문 PHP Laravel AI: Claude

Laravel 미니 포토 갤러리 - 이미지 업로드 & 좋아요

리포지토리명 laravel-photo-gallery-likes
조회수 94 0건 제출

문제 설명

📸 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에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
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 기본 페이지를 확인할 수 있습니다.

2
Step 2
사진 정보를 저장할 데이터베이스 테이블과 모델을 생성합니다.

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

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 폴더가 연결되어 업로드된 이미지를 웹에서 접근할 수 있게 됩니다.

3
Step 3
사진 업로드 및 갤러리 표시 기능을 구현합니다.

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

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 및 라우트 설정 완료" 메시지를 출력해주세요.

기대 결과: 사진 업로드, 조회, 좋아요 기능을 처리하는 컨트롤러와 라우트가 설정됩니다. 아직 뷰 파일은 없지만 백엔드 로직이 준비됩니다.

4
Step 4
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)

로그인 후 제출

아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!

댓글 (0)

로그인 후 댓글을 남길 수 있습니다.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!