Laravel 간단 이벤트 캘린더 - 월별 일정 관리 - 바이브코딩 레시피
입문 PHP Laravel AI: Claude

Laravel 간단 이벤트 캘린더 - 월별 일정 관리

리포지토리명 simple-event-calendar-laravel
조회수 66 0건 제출

문제 설명

📅 Laravel 간단 이벤트 캘린더

매월 일정을 한눈에 볼 수 있는 심플한 캘린더 애플리케이션을 만들어봅니다. Laravel 13.x + Blade 템플릿 + Tailwind CSS로 구성하며, SQLite 데이터베이스를 사용하여 일정 CRUD 기능을 구현합니다.

필수 기능

  • 월별 캘린더 뷰: 현재 월의 달력을 그리드 형태로 표시
  • 일정 추가: 날짜, 제목, 시간, 메모를 입력하여 이벤트 생성
  • 일정 목록: 특정 날짜를 클릭하면 해당 날짜의 일정 목록 표시
  • 일정 수정/삭제: 등록된 일정을 수정하거나 삭제 가능
  • 이전/다음 달 이동: 화살표 버튼으로 월 단위 네비게이션
  • 오늘 날짜 하이라이트: 오늘 날짜를 시각적으로 강조

보너스 기능 (선택)

  • 일정 색상 카테고리 (업무/개인/기념일 등)
  • 일정이 있는 날짜에 점 또는 배지 표시
  • 월간 일정 개수 통계
  • 검색 기능 (일정 제목으로 검색)

학습 포인트

  • Laravel 라우팅과 컨트롤러 기초
  • Blade 템플릿 문법 (반복문, 조건문, 컴포넌트)
  • Eloquent ORM을 이용한 데이터베이스 CRUD
  • 날짜 처리 (Carbon 라이브러리)
  • Tailwind CSS 그리드 레이아웃

제약 조건

  • • Laravel 13.x 사용 (구버전 금지)
  • • Blade 템플릿 엔진 사용 (React, Vue 등 SPA 프레임워크 사용 금지)
  • • Tailwind CSS로 스타일링
  • • SQLite 데이터베이스 사용
  • • Carbon 라이브러리로 날짜 처리
  • • 반응형 디자인 적용 (모바일에서도 사용 가능)
  • • CSRF 보호 적용

프롬프트 레시피

아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
mkdir simple-event-calendar-laravel && cd simple-event-calendar-laravel

이 폴더에서 Laravel 13.x 프로젝트를 시작합니다.

Laravel 13.x 프로젝트를 생성하고 기본 설정을 해주세요:

1. Laravel 13.x 프로젝트 생성 (composer create-project 또는 laravel new)
2. .env 파일에서 데이터베이스를 SQLite로 설정
   - DB_CONNECTION=sqlite
   - DB_DATABASE 경로를 database/database.sqlite로 설정
3. database/database.sqlite 파일 생성 (touch 또는 빈 파일 생성)
4. Tailwind CSS 설치 및 설정 (npm install, Vite 설정)
5. 기본 레이아웃 Blade 파일 생성 (resources/views/layouts/app.blade.php)
   - Tailwind CSS 포함
   - 심플하고 깔끔한 헤더 (제목: "📅 나의 이벤트 캘린더")
   - @yield('content') 영역

모든 설정이 완료되면 php artisan serve로 서버를 실행하여 기본 페이지가 정상적으로 로드되는지 확인해주세요.

기대 결과: Laravel 13.x 프로젝트가 생성되고, SQLite 데이터베이스가 설정되며, Tailwind CSS가 적용된 기본 레이아웃이 준비됩니다. 브라우저에서 localhost:8000 접속 시 Tailwind가 적용된 기본 페이지를 확인할 수 있습니다.

2
Step 2
이벤트(일정) 데이터를 저장할 데이터베이스 구조를 만들어주세요:

1. Event 모델과 마이그레이션 생성 (php artisan make:model Event -m)
2. 마이그레이션 파일에 다음 컬럼 추가:
   - title (string, 255): 일정 제목
   - event_date (date): 일정 날짜
   - event_time (time, nullable): 일정 시간 (선택사항)
   - description (text, nullable): 일정 메모
   - color (string, nullable, default: 'blue'): 일정 색상 카테고리 (보너스 기능용)
   - timestamps (created_at, updated_at)
3. php artisan migrate 실행하여 테이블 생성
4. Event 모델에 $fillable 속성 설정 (mass assignment 허용)

마이그레이션이 성공적으로 실행되었는지 확인해주세요.

기대 결과: events 테이블이 SQLite 데이터베이스에 생성되고, Event 모델이 준비됩니다. php artisan migrate 명령 실행 시 오류 없이 완료됩니다.

3
Step 3
캘린더 메인 페이지와 컨트롤러를 만들어주세요:

1. CalendarController 생성 (php artisan make:controller CalendarController)
2. CalendarController에 index 메서드 구현:
   - 현재 월(year, month)을 쿼리 파라미터로 받거나 기본값은 오늘 날짜
   - Carbon을 사용하여 해당 월의 시작일, 종료일, 총 일수 계산
   - 달력 그리드를 그리기 위한 빈 칸 계산 (월의 첫 날이 무슨 요일인지)
   - 해당 월의 모든 이벤트를 데이터베이스에서 조회 (Event::whereYear(), whereMonth())
   - Blade 뷰로 데이터 전달 (year, month, daysInMonth, startDayOfWeek, events 등)
3. routes/web.php에 라우트 등록:
   - GET / -> CalendarController@index (이름: calendar.index)
4. resources/views/calendar/index.blade.php 생성:
   - layouts/app.blade.php 확장
   - 월 네비게이션 (이전 달, 다음 달 버튼, 현재 년월 표시)
   - 요일 헤더 (일~토)
   - 7x5 또는 7x6 그리드로 날짜 표시
   - 각 날짜 칸에 날짜 숫자 표시, 오늘 날짜는 배경색으로 강조
   - Tailwind CSS로 깔끔한 그리드 레이아웃 (grid grid-cols-7)

캘린더가 정상적으로 표시되는지 확인해주세요. 아직 일정 데이터는 없지만 빈 달력이 보여야 합니다.

기대 결과: 메인 페이지(/)에서 현재 월의 달력이 그리드 형태로 표시됩니다. 요일 헤더와 날짜가 정렬되어 있고, 오늘 날짜가 시각적으로 강조됩니다. 이전/다음 달 버튼이 보이며 클릭 시 해당 월로 이동합니다.

4
Step 4
일정 추가 기능을 구현해주세요:

1. CalendarController에 create, store 메서드 추가:
   - create: 일정 추가 폼을 보여주는 페이지 (날짜를 쿼리 파라미터로 받아 기본값 설정 가능)
   - store: 폼에서 전송된 데이터를 검증하고 Event 모델로 저장
     * 검증 규칙: title(required, max:255), event_date(required, date), event_time(nullable), description(nullable)
     * 저장 후 calendar.index로 리다이렉트하며 성공 메시지 표시
2. routes/web.php에 라우트 추가:
   - GET /events/create -> CalendarController@create (이름: events.create)
   - POST /events -> CalendarController@store (이름: events.store)
3. resources/views/events/create.blade.php 생성:
   - layouts/app.blade.php 확장
   - 일정 추가 폼 (제목, 날짜, 시간, 메모 입력 필드)
   - CSRF 토큰 포함
   - Tailwind CSS로 깔끔한 폼 디자인
   - 제출 버튼과 취소(뒤로가기) 버튼
4. calendar/index.blade.php에 "+ 일정 추가" 버튼 추가 (페이지 상단 또는 각 날짜 칸에)

일정을 추가하고 캘린더 페이지로 돌아왔을 때 성공 메시지가 표시되는지 확인해주세요.

기대 결과: 일정 추가 버튼을 클릭하면 폼 페이지로 이동하고, 일정 정보를 입력 후 제출하면 데이터베이스에 저장됩니다. 캘린더 페이지로 리다이렉트되며 성공 메시지가 표시됩니다.

5
Step 5
캘린더에 일정을 표시하고, 날짜 클릭 시 해당 날짜의 일정 목록을 보여주는 기능을 추가해주세요:

1. calendar/index.blade.php 수정:
   - 각 날짜 칸에 해당 날짜의 이벤트가 있는지 확인
   - 이벤트가 있는 날짜는 작은 점(dot) 또는 배지로 표시 (예: 이벤트 개수 숫자)
   - 각 날짜 칸을 클릭 가능하게 만들고, 클릭 시 해당 날짜의 일정 목록 모달 또는 사이드바 표시
2. 일정 목록 표시 방법 (간단한 방법):
   - 각 날짜 칸 아래에 해당 날짜의 일정 제목을 작게 표시 (최대 2~3개)
   - 또는 Alpine.js나 간단한 JavaScript로 모달 구현
3. 일정 클릭 시 상세 정보 표시 (제목, 시간, 메모)
4. Tailwind CSS로 일정 표시 스타일링 (색상, 폰트 크기 등)

캘린더에서 일정이 시각적으로 확인되고, 클릭 시 상세 정보를 볼 수 있는지 테스트해주세요.

기대 결과: 캘린더의 각 날짜 칸에 일정이 있는 경우 점 또는 제목이 표시됩니다. 날짜를 클릭하면 해당 날짜의 일정 목록과 상세 정보를 확인할 수 있습니다.

6
Step 6
일정 수정 및 삭제 기능을 구현해주세요:

1. CalendarController에 edit, update, destroy 메서드 추가:
   - edit: 특정 일정의 수정 폼 표시
   - update: 수정된 데이터 검증 및 업데이트
   - destroy: 일정 삭제 처리
2. routes/web.php에 라우트 추가:
   - GET /events/{event}/edit -> CalendarController@edit (이름: events.edit)
   - PUT/PATCH /events/{event} -> CalendarController@update (이름: events.update)
   - DELETE /events/{event} -> CalendarController@destroy (이름: events.destroy)
3. resources/views/events/edit.blade.php 생성:
   - create.blade.php와 유사하지만 기존 데이터를 폼에 채워넣기
   - @method('PUT') 디렉티브 사용
4. 일정 상세 정보 표시 영역에 "수정" 및 "삭제" 버튼 추가:
   - 수정 버튼: events.edit 라우트로 이동
   - 삭제 버튼: 폼으로 DELETE 요청 전송 (확인 알림 포함)
5. 삭제 시 JavaScript confirm() 또는 Alpine.js로 확인 대화상자 표시

일정을 수정하고 삭제하는 기능이 정상적으로 작동하는지 확인해주세요. 삭제 후 캘린더에서 해당 일정이 사라지는지 테스트하세요.

기대 결과: 일정 상세 정보에서 수정 버튼을 클릭하면 수정 폼으로 이동하고, 변경 사항을 저장할 수 있습니다. 삭제 버튼 클릭 시 확인 후 일정이 데이터베이스에서 삭제되고 캘린더에서 제거됩니다.

제출된 작품 (0)

로그인 후 제출

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

댓글 (0)

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