풀스택 스터디룸 예약 시스템
study-room-booking-system
문제 설명
📚 스터디룸 예약 시스템
도서관이나 카페의 스터디룸을 예약할 수 있는 간단한 풀스택 시스템을 만들어봅니다. Laravel 13.x로 RESTful API 백엔드를 구축하고, React 19로 사용자 친화적인 프론트엔드를 개발합니다.
필수 기능
- 📋 스터디룸 목록 조회 (방 이름, 수용 인원, 시간당 가격)
- 🔍 날짜별 예약 가능한 시간대 확인
- ✅ 예약 등록 (이름, 연락처, 날짜, 시간, 방 선택)
- 📊 내 예약 내역 조회
- ❌ 예약 취소 기능
- 🎨 깔끔한 UI/UX (시간대 선택 버튼, 예약 상태 시각화)
선택 추가 기능 (보너스)
- 🔔 예약 시간 1시간 전 알림 표시
- 📅 달력 뷰로 예약 현황 한눈에 보기
- 🏷️ 스터디룸 태그 필터 (조용한 방, 화이트보드 있는 방 등)
- 📈 인기 시간대 통계 대시보드
- 🔄 예약 시간 변경 기능
기술 스택
- 백엔드: Laravel 13.x (RESTful API, SQLite)
- 프론트엔드: React 19 (Vite, Axios)
- 스타일링: Tailwind CSS
이 프로젝트를 통해 Laravel API 설계, React 컴포넌트 구성, 프론트-백엔드 데이터 연동의 기초를 학습할 수 있습니다.
제약 조건
- • Laravel 13.x와 React 19 최신 버전 사용
- • 백엔드(Laravel API)와 프론트엔드(React Vite) 별도 프로젝트로 구성
- • SQLite 데이터베이스 사용 (설치 간편)
- • Axios로 API 통신
- • useState만 사용 (복잡한 상태관리 라이브러리 금지)
- • Tailwind CSS로 스타일링
- • 반응형 디자인 (모바일 친화적)
- • CORS 설정 필수
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
mkdir study-room-booking-system && cd study-room-booking-system
이 폴더에서 프로젝트를 시작합니다.
먼저 Laravel 13.x API 백엔드를 구축합니다:
1. `backend` 폴더에 Laravel 13.x 프로젝트를 생성하세요.
2. SQLite 데이터베이스를 사용하도록 `.env` 파일을 설정하세요.
3. 다음 마이그레이션을 생성하세요:
- `rooms` 테이블: id, name (방 이름), capacity (수용 인원), price_per_hour (시간당 가격), description (설명), created_at, updated_at
- `bookings` 테이블: id, room_id (외래키), customer_name (예약자 이름), customer_phone (연락처), booking_date (예약 날짜), start_time (시작 시간, 9-21시 중 선택), end_time (종료 시간), status (예약 상태: confirmed/cancelled), created_at, updated_at
4. 마이그레이션을 실행하세요.
5. 시더를 만들어 샘플 스터디룸 3개를 추가하세요 (예: 조용한 방, 화이트보드 방, 대형 회의실).
6. API 라우트를 설정하세요:
- GET `/api/rooms` - 모든 스터디룸 목록
- GET `/api/rooms/{id}/available-slots` - 특정 방의 날짜별 예약 가능 시간대
- POST `/api/bookings` - 새 예약 생성
- GET `/api/bookings` - 모든 예약 내역 (쿼리 파라미터로 customer_phone 필터링 가능)
- DELETE `/api/bookings/{id}` - 예약 취소
7. CORS 설정을 추가하여 React 앱(http://localhost:5173)에서 접근 가능하도록 하세요.
8. 컨트롤러 로직을 구현하세요 (예약 시간 중복 검증 포함).
완료 후 `php artisan serve`로 서버를 실행하고 API 엔드포인트를 테스트하세요.
기대 결과: Laravel 백엔드 API가 구축되고, 스터디룸과 예약 데이터를 관리할 수 있는 RESTful API가 동작합니다. http://localhost:8000/api/rooms에서 방 목록을 JSON으로 확인할 수 있습니다.
이제 React 19 프론트엔드를 구축합니다: 1. `study-room-booking-system` 폴더에서 `frontend` 폴더를 만들고, Vite로 React 19 프로젝트를 생성하세요. 2. Tailwind CSS를 설치하고 설정하세요. 3. Axios를 설치하세요 (`npm install axios`). 4. `src/api/client.js` 파일을 만들어 Axios 인스턴스를 설정하세요 (baseURL: http://localhost:8000/api). 5. 다음 컴포넌트를 생성하세요: - `RoomList.jsx`: 스터디룸 목록을 카드 형태로 표시 (방 이름, 수용 인원, 시간당 가격, "예약하기" 버튼) - `BookingForm.jsx`: 예약 폼 (이름, 연락처, 날짜 선택, 시간대 선택 - 9:00-21:00 중 1시간 단위) - `MyBookings.jsx`: 내 예약 내역 조회 (연락처 입력 후 조회, 예약 취소 버튼) 6. `App.jsx`에서 간단한 탭 UI를 만들어 "스터디룸 예약", "내 예약 내역" 탭을 전환하세요. 7. useState를 사용하여 상태를 관리하세요 (rooms, bookings, selectedRoom 등). 8. API 호출 함수를 만들어 백엔드와 연동하세요. 완료 후 `npm run dev`로 개발 서버를 실행하고 http://localhost:5173에서 확인하세요.
기대 결과: React 프론트엔드가 구축되고, 스터디룸 목록을 볼 수 있으며 예약 폼과 내 예약 내역 탭이 표시됩니다. 백엔드 API와 연동되어 실제 데이터를 불러옵니다.
예약 기능을 완성하고 UI를 개선합니다:
1. `BookingForm.jsx`에서 날짜와 시간대를 선택하면, 해당 방의 예약 가능 시간대를 백엔드 API(`/api/rooms/{id}/available-slots?date=YYYY-MM-DD`)에서 가져와 시각적으로 표시하세요.
- 예약 가능한 시간은 초록색 버튼, 이미 예약된 시간은 회색 비활성화 버튼으로 표시
2. 예약 폼 제출 시 POST `/api/bookings`로 데이터를 전송하고, 성공 시 알림 메시지를 표시하세요.
3. `MyBookings.jsx`에서 연락처를 입력하면 해당 번호의 예약 내역을 GET `/api/bookings?customer_phone=XXX`로 조회하세요.
4. 각 예약 항목에 "예약 취소" 버튼을 추가하고, 클릭 시 DELETE `/api/bookings/{id}`를 호출하여 취소하세요 (확인 다이얼로그 포함).
5. 전체 UI를 Tailwind CSS로 깔끔하게 스타일링하세요:
- 카드 레이아웃, 그림자 효과, 호버 애니메이션
- 반응형 그리드 (모바일에서는 1열, 태블릿 2열, 데스크톱 3열)
- 버튼 색상 구분 (예약 가능: green, 예약됨: gray, 취소: red)
6. 로딩 상태와 에러 처리를 추가하세요 (API 호출 중 스피너 표시, 에러 시 메시지).
완료 후 전체 예약 플로우를 테스트하세요: 방 선택 → 날짜/시간 선택 → 예약 → 내 예약 확인 → 취소.
기대 결과: 완전히 동작하는 스터디룸 예약 시스템이 완성됩니다. 사용자는 예약 가능 시간대를 확인하고, 예약을 생성하며, 자신의 예약을 조회하고 취소할 수 있습니다. UI가 직관적이고 시각적으로 매력적입니다.
제출된 작품 (0)
로그인 후 제출아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!