2025-2 빅데이터응용 팀 프로젝트. PHP와 MariaDB(XAMPP) 환경을 기반으로, 사용자의 리뷰 데이터를 수집하고 고급 SQL 쿼리를 통해 '연령'과 '날씨'에 따른 '맞춤형 메뉴 추천' 웹사이트를 구현.
과제 요구조건을 충족하기 위해 다음 핵심 기능들을 구현.
- 회원가입 및 로그인 (요구조건: 세션, 트랜잭션)
- 리뷰 작성 및 관리 (요구조건: INSERT, DELETE, UPDATE, SELECT)
- 리뷰에 댓글 달기 (요구조건: 추가 CRUD)
- 리뷰 작성 폼 (요구조건: 다양한 UI 컨트롤)
(요구조건: PreparedStatements를 사용한 동적 쿼리)
- [집계] 연령/날씨별 "맛" 선호도
GROUP BY를 사용해 "20대", "비 오는 날" 등 특정 조건의 평균 맛 점수(AVG(rating))를 집계.
- [Rollup] 연령대별/카테고리별 리뷰 통계
GROUP BY ... WITH ROLLUP을 사용해 [전체] > [연령대별] > [연령대+카테고리별] 리뷰 총 수를 계층적으로 분석.
- [랭킹] 연령/날씨 기반 "오늘의 메뉴" 랭킹
DENSE_RANK() OVER (...)를 사용해 사용자가 선택한 조건(예: 30대, 맑음)에서 평균 맛 점수가 가장 높은 메뉴 TOP 10을 추천.
- [윈도잉] 내 '맛' 점수 vs 그룹 평균 비교
AVG(rating) OVER (PARTITION BY ...)를 사용해 메뉴 상세 페이지에서 '내가 준 점수'와 '해당 메뉴의 전체 평균 점수'를 나란히 비교.
- Platform: XAMPP
- Server: Apache
- Backend: PHP
- Database: MariaDB (MySQL)
- Frontend: HTML
로컬 PC에서 프로젝트를 실행하고 테스트하기 위한 가이드.
-
XAMPP 제어판에서 Apache와 MySQL을
Start -
(최초 1회)
htdocs폴더에teamXX이름으로 프로젝트를git clonecd C:\xampp\htdocs git clone [깃허브_리포지토리_주소] teamXX
-
(이후)
htdocs/teamXX폴더로 이동해 최신 코드를git pullcd C:\xampp\htdocs\teamXX git pull
-
DB 연결 설정 확인
config/db.php(또는 DB 연결 파일) 열기DB_HOST는 'localhost' (또는 '127.0.0.1')DB_NAME,DB_USER,DB_PASSWORD는team13
-
DB 초기화 (데이터베이스 리셋이 필요할 때)
- XAMPP의 'Shell'을 열거나 MySQL CLI에 접속. (예:
mysql -u root -p) - 아래 5줄을 순서대로 실행하여, DB를 완전히 삭제하고, 새로 만들고, 8개 테이블을 생성하고, 1000개 샘플 데이터를 삽입.
DROP DATABASE IF EXISTS teamXX; CREATE DATABASE teamXX DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE teamXX; source [경로]/dbcreate.sql; source [경로]/dbinsert.sql;
[경로]는dbcreate.sql파일이 있는 실제 위치(예:C:/xampp/htdocs/teamXX/db/dbcreate.sql)를 의미.
- XAMPP의 'Shell'을 열거나 MySQL CLI에 접속. (예:
-
웹 브라우저에서
localhost/teamXX로 접속하여 테스트를 시작.
dbcreate.sql: 모든 테이블과 제약조건(PK, FK, Index)을 생성.dbinsert.sql: 1000개 이상의 초기 샘플 데이터를 삽입.dbdrop.sql: 모든 테이블을 삭제. (FK 관계 순서 준수)dbdump.sql:mysqldump로 생성한 DB 전체 백업 파일.
- Users: 사용자 기본 정보 (ID, PW)
- UserProfile: 사용자 상세 정보 (생년, 성별) -
Users와 1:1 - Categories: 음식 카테고리 (한식, 중식 등)
- Menus: 음식 메뉴 정보 (제육볶음 등) -
Categories와 N:1 - WeatherConditions: 날씨 분류 (맑음, 비 등) - DB 정규화
- WeatherLog: 일자별 날씨/기온 기록 -
WeatherConditions와 N:1 - Reviews: 리뷰 정보 (평점, 가성비, 내용) -
Users,Menus와 연결 - Comments: 리뷰에 달린 댓글 -
Reviews,Users와 연결
원활한 협업과 버전 관리를 위해 다음 규칙을 준수.
main: 최종 제출 가능한 안정 버전. main 브랜치에 직접 커밋 금지.develop: 팀원들의 작업물이 통합되는 개발 브랜치.feature/기능이름: 개별 기능 개발을 위한 브랜치.develop브랜치에서 분기.
- 모든 기능 개발은
develop브랜치에서 시작.git checkout develop git pull origin develop
- 자신의 작업에 대한
feature브랜치를 생성. (이름은 영어 소문자, 기능 중심)# 예: 로그인 기능 구현 시 git checkout -b feature/login # 예: 분석 페이지 UI 구현 시 git checkout -b feature/analysis-ui
커밋 메시지는 **유형(Type)**과 **주제(Subject)**로 구성.
Type: Subject
-
Type: 커밋의 목적을 명시. (주로 사용되는 5가지)
feat: 새로운 기능 추가 (e.g.,feat: Add login function)fix: 버그 수정 (e.g.,fix: Correct SQL query error in analysis page)style: 코드 스타일 수정 (세미콜론, 들여쓰기 등)refactor: 코드 리팩토링 (기능 변경 없는 내부 구조 개선)docs: README.md 등 문서 수정
-
Subject: 작업 내용을 50자 이내로 간결하게 작성.
- 로컬
feature브랜치에서의 작업이 완료되면,develop브랜치로 Pull Request(PR) 생성.- 절대
main브랜치로 PR 금지.
- 절대
- PR 제목은 커밋 메시지와 유사하게
Type: Subject형식 권장. - PR 본문에는 작업 내용 요약, (있다면) 관련 이슈 번호, 테스트 방법을 기재.
- 팀원 최소 1명 이상의 Approve(승인) 받아야 Merge 가능.
- Merge는
Squash and merge(커밋 이력을 하나로 합침) 사용을 권장.
- 팀장 (프론트): [윤소진]
- 팀원 (백엔드): [백소영]
- 팀원 (백엔드): [김재이]
- 팀원 (데이터베이스): [황채원]
- 고정 X. 유동적으로 임무 할당 예정.