Skip to content

ddoed/CineCollector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CineCollector

⚠️ 교육 목적 프로젝트
이 프로젝트는 데이터베이스 과목 텀프로젝트로서 교육 및 학습 목적으로만 제작되었습니다.
상업적 목적이 아니며, 실제 서비스로 운영되지 않습니다.

CineCollector 메인 화면

CineCollector는 영화 팬덤 문화를 기반으로 굿즈(특전) 수집, 이벤트 참여, 관람 기록 관리를 한 곳에서 해결하는 플랫폼입니다.
영화관과 창작자, 수집가들이 모두 참여할 수 있는 생태계를 구축하는 것을 목표로 합니다.


서비스 개요

최근 영화 커뮤니티는 굿즈 수집, N차 관람, 한정판 이벤트 중심으로 활성화되어 있습니다.
CineCollector는 이러한 활동을 구조적으로 기록하고 공유하는 영화 수집 종합 플랫폼입니다.


주요 기능

일반사용자 (COLLECTOR)

1. 다른 사용자의 관람기록 보기

홈 화면에서 다른 사용자들이 공개한 관람 기록을 확인할 수 있습니다. 영화 포스터, 평점, 후기, 수집한 특전 정보를 한눈에 볼 수 있으며, 사용자 간 영화 관람 경험을 공유할 수 있습니다.

image image

2. 이벤트/특전 확인

진행 중인 영화 특전 이벤트를 검색하고 필터링하여 확인할 수 있습니다. 이벤트 상세 페이지에서는 특전 정보, 증정 지점, 재고 현황을 확인하고 특전을 신청할 수 있습니다.

이벤트 목록

  • 영화별, 상태별(진행 중/예정/종료) 필터링
  • 이벤트별 특전 정보 및 증정 지점 수 확인
이벤트 목록 화면

이벤트 상세

  • 이벤트 기간, 특전 상세 정보 확인
  • 증정 지점 목록 및 재고 현황 확인
  • 특전 신청 기능
이벤트 상세 화면

특전 신청

  • 극장별 재고 확인 후 신청
  • 1인당 제한 수량 확인
특전 신청 화면

3. 특전 도감 관리

수집한 특전을 영화별로 관리하고 수집 진행률을 확인할 수 있습니다. 수정 모드에서 특전을 추가하거나 삭제하여 나만의 특전 도감을 완성할 수 있습니다.

특전 수집 진행도 통계

  • 전체 특전 수, 수집 완료 수, 수집률 표시
  • 영화별 수집 현황 요약
특전 수집 진행도 통계

특전 도감

  • 영화별로 그룹화된 특전 목록
  • 수집한 특전과 미수집 특전 구분 표시
  • 주차별 특전 정보 확인
특전 도감 화면

특전 도감 등록/수정

  • 수정 모드에서 특전 클릭으로 수집 상태 변경
  • 영화별 수집 현황 실시간 업데이트
특전 도감 등록/수정 화면

4. 프로필/내 관람기록 관리

개인 프로필을 관리하고 관람 기록을 작성하여 공유할 수 있습니다.

프로필 페이지

  • 사용자 정보 및 가입일 확인
  • 최근 관람 기록 미리보기
  • 프로필 수정 기능
프로필 페이지

내 관람기록 페이지

  • 전체 관람 기록 목록 확인
  • 검색 및 연도별 필터링
  • 관람 통계 (총 관람, 이번 달 관람, 평균 평점)
내 관람기록 페이지

관람기록 작성

  • 영화 선택, 관람일, 극장 선택
  • 별점 및 후기 작성
  • 공개/비공개 설정
관람기록 작성 화면

극장 직원 (THEATER)

해당 극장에서 진행하는 이벤트 확인 및 재고 수정

극장 운영자는 자신의 극장에서 진행하는 이벤트의 재고를 관리하고, 특전 신청자 목록을 확인할 수 있습니다.

재고 목록

  • 극장별 특전 재고 현황 확인
  • 재고 통계 (총 재고, 사용 가능, 소진 완료)
극장 재고 목록

재고 수정

  • 특전별 재고 수량 업데이트
  • 재고 상태 변경 (재고 있음/소진 완료)
재고 수정 화면

신청자 목록 확인

  • 특전별 신청자 정보 확인
  • 신청자 이름, 이메일, 신청 수량 확인
신청자 목록 화면

영화사/제작사 (CREATOR)

1. 이벤트 생성/관리 및 참여극장 선택

크리에이터는 새로운 이벤트를 생성하고, 참여할 극장을 선택할 수 있습니다. 이벤트 통계를 통해 이벤트 성과를 확인할 수 있습니다.

이벤트 목록

  • 생성한 이벤트 목록 확인
  • 이벤트별 통계 (참여 극장 수, 상태)
  • 이벤트 수정 및 삭제
크리에이터 이벤트 목록

이벤트 생성 및 참여 극장 선택

  • 영화 선택, 이벤트 제목, 기간 설정
  • 특전 정보 입력 (이름, 타입, 수량, 제한)
  • 참여 극장 선택 (체크박스로 다중 선택)
  • 이벤트 공개/비공개 설정
이벤트 생성 화면

2. 극장별 재고 배포 수량 지정

생성한 이벤트의 특전을 각 극장에 배포할 수량을 지정할 수 있습니다. 극장별로 다른 수량을 배포하여 효율적인 재고 관리를 할 수 있습니다.

재고 배포

  • 극장 목록 확인
  • 극장별 배포 수량 입력
  • 일괄 배포 완료
극장별 재고 배포 화면

기술 스택

Backend

  • Framework: Spring Boot 3.5.7
  • Language: Java 21
  • Database: PostgreSQL
  • Security: Spring Security + JWT (JJWT 0.11.5)
  • API Documentation: SpringDoc OpenAPI (Swagger)
  • Cloud Storage: AWS S3 (Amazon SDK 2.25.27)
  • Build Tool: Gradle
  • ORM: Spring Data JDBC

Frontend

  • Framework: React 18.3.1
  • Build Tool: Vite 6.3.5
  • Language: TypeScript
  • Styling: Tailwind CSS
  • UI Components: Radix UI
  • Animation: Motion (Framer Motion)
  • Icons: Lucide React
  • State Management: React Context API
  • HTTP Client: Fetch API

프로젝트 구조

CineCollector/
├── backend/                          # Spring Boot 백엔드
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/com/example/cinecollector/
│   │   │   │   ├── collection/      # 컬렉션 관리
│   │   │   │   │   ├── controller/
│   │   │   │   │   ├── dto/
│   │   │   │   │   ├── entity/
│   │   │   │   │   ├── repository/
│   │   │   │   │   └── service/
│   │   │   │   ├── common/          # 공통 모듈
│   │   │   │   │   ├── config/      # 설정 (CORS, Security, S3, Swagger)
│   │   │   │   │   ├── exception/   # 예외 처리
│   │   │   │   │   ├── jwt/         # JWT 인증
│   │   │   │   │   ├── response/    # API 응답 형식
│   │   │   │   │   ├── s3/          # AWS S3 연동
│   │   │   │   │   └── security/    # 보안 설정
│   │   │   │   ├── event/           # 이벤트 관리
│   │   │   │   ├── inventory/       # 재고 관리
│   │   │   │   ├── movie/           # 영화 정보
│   │   │   │   ├── perk/           # 특전 관리
│   │   │   │   ├── perkapplication/ # 특전 신청
│   │   │   │   ├── theater/        # 극장 관리
│   │   │   │   ├── user/           # 사용자 관리
│   │   │   │   └── viewingrecord/  # 관람 기록
│   │   │   └── resources/
│   │   │       ├── application.yaml # 설정 파일
│   │   │       ├── schema.sql      # 데이터베이스 스키마
│   │   │       └── data.sql        # 초기 데이터
│   │   └── test/
│   ├── build.gradle                  # Gradle 의존성 관리
│   └── gradlew                       # Gradle Wrapper
│
├── frontend/                         # React 프론트엔드
│   ├── src/
│   │   ├── components/              # React 컴포넌트
│   │   │   ├── CollectionGallery.tsx    # 특전 도감
│   │   │   ├── CreatorDashboard.tsx     # 크리에이터 대시보드
│   │   │   ├── EventsPerks.tsx          # 이벤트·특전 목록
│   │   │   ├── Feed.tsx                 # 홈 피드
│   │   │   ├── Landing.tsx               # 랜딩 페이지
│   │   │   ├── TheaterManagement.tsx    # 극장 관리
│   │   │   ├── UserProfile.tsx          # 사용자 프로필
│   │   │   ├── WatchHistory.tsx          # 관람 기록
│   │   │   ├── StockDistributionDialog.tsx # 재고 배포 다이얼로그
│   │   │   └── ui/                   # UI 컴포넌트 (Radix UI)
│   │   ├── context/
│   │   │   └── AuthContext.tsx      # 인증 컨텍스트
│   │   ├── hooks/
│   │   │   └── useAuth.ts           # 인증 훅
│   │   ├── lib/
│   │   │   └── api.ts               # API 클라이언트
│   │   ├── App.tsx                   # 메인 앱 컴포넌트
│   │   └── main.tsx                  # 진입점
│   ├── package.json                  # npm 의존성 관리
│   ├── vite.config.ts                # Vite 설정
│   └── index.html                    # HTML 템플릿
│
└── README.md                         # 프로젝트 문서

개발 환경 설정

사전 요구사항

  • Java: 21 이상
  • Node.js: 18 이상
  • PostgreSQL: 12 이상
  • Gradle: 8.0 이상 (또는 Gradle Wrapper 사용)
  • AWS S3: 이미지 저장용 (선택사항, 개발 환경에서는 로컬 파일 시스템 사용 가능)

Backend 설정

  1. 데이터베이스 생성
CREATE DATABASE cinecollector;
  1. 환경 변수 설정 백엔드 루트 디렉토리에 .env 파일 생성 (또는 시스템 환경 변수 설정):
DB_USERNAME=your_db_username
DB_PASSWORD=your_db_password
JWT_SECRET=your_jwt_secret_key
AWS_ACCESS_KEY=your_aws_access_key
AWS_SECRET_KEY=your_aws_secret_key
BUCKET_NAME=your_s3_bucket_name
BUCKET_REGION=your_s3_region
JWT_ACCESS_EXPIRE=3600000
JWT_REFRESH_EXPIRE=1209600000
  1. 백엔드 실행
cd backend
./gradlew bootRun
# 또는 Windows의 경우
gradlew.bat bootRun

백엔드는 http://localhost:8080에서 실행됩니다.

  1. API 문서 확인
  • Swagger UI: http://localhost:8080/swagger-ui.html
  • API 문서: http://localhost:8080/v3/api-docs

Frontend 설정

  1. 의존성 설치
cd frontend
npm install
  1. 환경 변수 설정 (선택사항) 프론트엔드 루트 디렉토리에 .env 파일 생성:
VITE_API_BASE_URL=http://localhost:8080
  1. 프론트엔드 실행
npm run dev

프론트엔드는 http://localhost:3000에서 실행됩니다.

  1. 프로덕션 빌드
npm run build
# 빌드된 파일: frontend/dist/

초기 데이터

프로젝트 실행 시 schema.sqldata.sql이 자동으로 실행되어 데이터베이스 스키마와 초기 데이터가 생성됩니다.

초기 사용자 계정 (data.sql에 정의됨):

문제 해결

백엔드 실행 오류

  • 데이터베이스 연결 실패: application.yaml의 데이터베이스 연결 정보 확인
  • 포트 충돌: 8080 포트가 사용 중인 경우 application.yaml에서 포트 변경
  • 환경 변수 누락: 필수 환경 변수 설정 확인

프론트엔드 실행 오류

  • 의존성 설치 실패: npm install 재실행 또는 node_modules 삭제 후 재설치
  • API 연결 실패: 백엔드가 실행 중인지 확인, VITE_API_BASE_URL 환경 변수 확인
  • CORS 오류: 백엔드의 CORS 설정 확인

데이터베이스 오류

  • 스키마 생성 실패: PostgreSQL 버전 확인 (12 이상 필요)
  • 역할 생성 실패: DatabaseRoleInitializer가 자동으로 역할을 생성하지만, 수동 생성도 가능
  • GRANT 오류: application.yaml에서 spring.sql.init.continue-on-error: true 설정 확인

데이터베이스 스키마

주요 테이블 (11개)

  • users - 사용자 정보
  • movies - 영화 정보
  • events - 이벤트 정보
  • perks - 특전 정보
  • theaters - 극장 정보
  • inventories - 극장별 재고
  • collections - 사용자 수집 현황
  • viewing_records - 관람 기록
  • viewingrecord_image - 관람 기록 이미지
  • viewing_record_perk - 관람 기록별 특전
  • perk_applications - 특전 신청 내역

View (3개)

  • user_collection_statistics - 사용자별 수집 통계
  • event_detail_view - 이벤트 상세 정보
  • theater_inventory_summary - 극장별 재고 요약

Index (22개)

  • 단일 컬럼 인덱스: 20개
  • 복합 인덱스: 1개 (idx_events_dates)
  • 부분 인덱스: 1개 (idx_viewing_records_public)
  • 참고: 복합 Primary Key를 가진 테이블(inventories, collections, viewing_record_perk)은 Primary Key가 자동으로 인덱스 역할을 수행합니다.

제약조건

  • Primary Keys: 11개 (단일 8개, 복합 3개)
  • Foreign Keys: 15개
  • Unique Constraints: 1개 (users.email)

자세한 스키마는 backend/src/main/resources/schema.sql 참조


API 엔드포인트

인증

  • POST /users/login - 로그인
  • POST /users/signup - 회원가입
  • GET /users/me - 현재 사용자 정보
  • PATCH /users/me - 프로필 수정

이벤트

  • GET /events/list - 이벤트 목록 조회
  • GET /events/{eventId}/detail - 이벤트 상세 조회
  • POST /events/with-perk - 이벤트 생성 (특전 포함)
  • DELETE /events/{eventId} - 이벤트 삭제

특전

  • GET /perks/events/{eventId} - 이벤트별 특전 조회

컬렉션

  • GET /collections - 내 컬렉션 조회
  • POST /collections - 컬렉션 추가
  • PATCH /collections/{perkId} - 컬렉션 수정
  • DELETE /collections/{perkId} - 컬렉션 삭제

관람 기록

  • GET /viewing-records/my - 내 관람 기록 조회
  • GET /viewing-records/home - 홈 피드 조회
  • POST /viewing-records - 관람 기록 생성
  • DELETE /viewing-records/{recordId} - 관람 기록 삭제

극장 관리

  • GET /theaters - 극장 목록 조회
  • GET /theaters/my - 내 극장 정보

재고 관리

  • GET /inventory/list - 재고 목록 조회
  • GET /inventory/statistics - 재고 통계
  • PATCH /inventory/{perkId}/{theaterId} - 재고 수정
  • POST /inventory/{perkId}/distribute - 재고 배포

자세한 API 문서는 Swagger UI에서 확인 가능합니다.


개발 버전 관리

Git Workflow

  • main - 프로덕션 브랜치
  • develop - 개발 브랜치
  • feature/* - 기능 개발 브랜치
  • fix/* - 버그 수정 브랜치

커밋 컨벤션

feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 코드 리팩토링
test: 테스트 추가
chore: 빌드 설정 등

프로젝트 목적 및 라이선스

프로젝트 목적

이 프로젝트는 데이터베이스 과목 텀프로젝트로서 교육 및 학습 목적으로만 제작되었습니다.

  • 데이터베이스 설계 및 구현 학습
  • 백엔드/프론트엔드 통합 개발 경험
  • RESTful API 설계 및 구현
  • 사용자 인증 및 권한 관리 학습
  • 실제 프로젝트 개발 프로세스 경험

본 프로젝트는 상업적 목적이 아니며, 실제 서비스로 운영되지 않습니다.

데이터베이스 기능 구현

본 프로젝트는 다음 데이터베이스 기능을 구현했습니다:

  • DML: INSERT, UPDATE, DELETE (24개 위치)
  • SFW: SELECT FROM WHERE (69개 위치)
  • ORDER BY: 정렬 기능 (23개 위치)
  • GROUP BY: 집계 함수와 함께 사용 (1개 위치 + View)
  • HAVING: 수집 완료/미수집 필터링 (2개 위치)
  • Subquery: EXISTS 서브쿼리 (1개 위치)
  • Keys: Primary Key, Foreign Key (45개 제약조건)
  • View: 복잡한 조회 쿼리 단순화 (3개 View)
  • Authorization: Spring Security + GRANT/REVOKE (30개 GRANT)
  • Transaction: @Transactional 어노테이션 (42개 위치)
  • Index: 쿼리 성능 최적화 (22개 Index)

라이선스

이 프로젝트는 교육 목적의 학술 프로젝트입니다.


개발자

  • 임나빈 (202455374)
  • 정보컴퓨터공학부 컴퓨터공학전공

참고사항

  • 백엔드와 프론트엔드는 별도로 실행해야 합니다.
  • CORS 설정은 개발 환경(http://localhost:3000, http://localhost:5173)에 맞춰져 있습니다.
  • 프로덕션 배포 시 환경 변수 및 보안 설정을 재확인하세요.

About

영화 특전 관리/수집 플랫폼 CineCollector

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published