이 프로젝트는 자바(Java)의 기본 문법을 실습하고 이해하기 위해 제작되었습니다. 주요 학습 대상은 객체지향 프로그래밍(OOP) 개념과 자바의 핵심 기능들입니다.
- 자바의 핵심 문법을 코드를 작성하며 자연스럽게 익히기
- 객체지향 설계 원칙을 이해하고 적용해보기
- 코드 작성 → 수정 → 리팩토링 과정을 통해 개발 감각 키우기
- 간단한 프로그램 구조를 스스로 설계하고 구현하는 연습
-
사용자 인증
- 회원가입 및 로그인/로그아웃 기능
- 사용자 계정 정보(닉네임, 비밀번호) 수정 및 회원 탈퇴
-
영화 정보
- 전체 영화 목록 조회 및 상세 정보 확인
- 제목 기반 영화 검색
- 영화별 평균 평점 및 리뷰 목록 제공
-
리뷰 관리
- 영화에 대한 리뷰 작성, 수정, 삭제
- 다른 사용자의 리뷰에 '좋아요' 추가 및 취소 (토글)
- 내가 작성한 리뷰 모아보기
-
찜 목록 (Wishlist)
- 원하는 영화를 찜 목록에 추가 및 삭제
- 나의 찜 목록 조회
-
관리자 기능
- 신규 영화 등록 및 기존 영화 삭제
- 전체 회원 목록 조회
| 구분 | 기술 |
|---|---|
| Language | Java |
| Database | Oracle DB |
| Connectivity | JDBC |
| Environment | Console / Terminal |
- Java Development Kit (JDK) 8 이상
- Oracle Database 11g XE 이상
- Oracle JDBC 드라이버 (ojdbc.jar)
아래 명세에 따라 Oracle DB에 테이블과 시퀀스를 생성해야 합니다. (SQL 스크립트를 프로젝트에 포함하여 사용자가 쉽게 실행할 수 있도록 하는 것을 권장합니다.)
테이블 및 시퀀스 생성 SQL 보기
-- 회원 테이블
CREATE TABLE members (
member_id VARCHAR2(50) PRIMARY KEY, -- 아이디 (PK)
password VARCHAR2(100) NOT NULL, -- 비밀번호
nickname VARCHAR2(100) NOT NULL, -- 닉네임
is_admin CHAR(1) DEFAULT 'N', -- 관리자 여부 ('Y', 'N')
created_at DATE DEFAULT SYSDATE -- 가입일
);
-- 영화 테이블
CREATE TABLE movies (
movie_id NUMBER PRIMARY KEY, -- 영화 ID
title VARCHAR2(200) NOT NULL, -- 제목
genre VARCHAR2(100), -- 장르
director VARCHAR2(100), -- 감독
running_time NUMBER, -- 상영시간
release_date DATE, -- 개봉일
synopsis VARCHAR2(2000), -- 줄거리
created_at DATE DEFAULT SYSDATE -- 등록일
);
-- 리뷰 테이블
CREATE TABLE reviews (
review_id NUMBER PRIMARY KEY, -- 리뷰 고유번호
member_id VARCHAR2(50), -- 작성자 (FK)
movie_id NUMBER, -- 영화 ID (FK)
rating NUMBER(3,1) NOT NULL, -- 평점 (0.0 ~ 10.0)
content VARCHAR2(1000), -- 리뷰 내용
like_count NUMBER DEFAULT 0, -- 좋아요 수
created_at DATE DEFAULT SYSDATE, -- 작성일
CONSTRAINT fk_review_member FOREIGN KEY (member_id)
REFERENCES members(member_id) ON DELETE CASCADE,
CONSTRAINT fk_review_movie FOREIGN KEY (movie_id)
REFERENCES movies(movie_id) ON DELETE CASCADE,
CONSTRAINT chk_rating CHECK (rating BETWEEN 0 AND 10) -- 평점 유효성 검사
);
-- 찜 테이블
CREATE TABLE wishlists (
wishlist_id NUMBER PRIMARY KEY, -- 찜 고유번호
member_id VARCHAR2(50), -- 회원 ID (FK)
movie_id NUMBER, -- 영화 ID (FK)
created_at DATE DEFAULT SYSDATE, -- 찜 등록일
CONSTRAINT fk_wishlist_member FOREIGN KEY (member_id)
REFERENCES members(member_id) ON DELETE CASCADE,
CONSTRAINT fk_wishlist_movie FOREIGN KEY (movie_id)
REFERENCES movies(movie_id) ON DELETE CASCADE,
CONSTRAINT uq_wishlist UNIQUE (member_id, movie_id) -- 중복 방지
);
-- 좋아요 테이블
CREATE TABLE review_likes (
review_id NUMBER,
member_id VARCHAR2(50),
created_at DATE DEFAULT SYSDATE,
PRIMARY KEY (review_id, member_id),
FOREIGN KEY (review_id) REFERENCES reviews(review_id) ON DELETE CASCADE,
FOREIGN KEY (member_id) REFERENCES members(member_id) ON DELETE CASCADE
);
-- 시퀀스 생성
CREATE SEQUENCE seq_wishlist_id
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
CREATE SEQUENCE seq_review_id
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
이 프로젝트는 데이터 접근, 비즈니스 로직, 사용자 인터페이스를 분리하는 3-Tier 계층형 아키텍처를 따릅니다.
- main: 프로그램 시작점
- ui: 사용자 입력/출력 처리 (콘솔 UI)
- service: UI와 DAO를 연결하며, 비즈니스 로직을 처리합니다.
- dao: DB 접근 및 SQL 실행
- vo: 테이블과 매핑되는 객체 (Value Object)
- util: 공통 유틸리티 클래스 (DB 연결, 자원 해제 등)