PHP+OracleDB로 구현한 간단한 온라인 도서대출 서비스

Minsu Han·2021년 11월 8일
0

Side Projects

목록 보기
8/10
post-thumbnail

🚀 Introduction

학부 데이터베이스 교과목에서 PHP와 OracleDB를 연동하여 간단한 온라인 도서관 서비스를 구현하는 개인과제를 수행한 적이 있다.

웹서비스 형태로 구현해야 했기에 짧은 기간 안에 HTML, CSS 기초, PHP를 생활코딩 사이트에서 터득하고 많은 구글링을 거쳐 완성한 사실상 첫 웹 프로젝트였다.

지금 보니 리팩토링이 많이 필요해 보인다. 시간이 워낙 촉박했어서 구현에 급급했던 듯..

🔗 Repository

https://github.com/minsuhan1/DB2021_TP_Online_Library

✏️ DB Schema



📄 System Structure



📄 Process Definition



📄 구축한 DB Tables

(1) EBOOK : 온라인 도서관 시스템 DB에 저장되어 있는 도서 정보 테이블

(2) CUSTOMER : 온라인 도서관 회원 정보 테이블

(3) AUTHORS : 각 도서의 저자 정보 테이블

(4) RESERVE : 예약된 도서에 대한 ISBN, 회원번호, 예약일을 저장하는 테이블

(5) PREVIOUSRENTAL : 대출 기록을 저장하는 테이블

(6) AUTO_RETURN_LOG : 자정마다 반납기일이 지난 도서를 자동 반납 처리한 후 그 내역을 기록하는 테이블


⚙️ 구현 환경

(1) Language

  • 온라인 도서관 페이지 UI를 구성하기 위해 HTML, CSS를 사용하였다.
  • DB 연동, 쿼리 실행, 세션 로그인, 메일 서비스 등을 구현하기 위해 PHP8를 사용함.
  • 그 외 페이지 내 알림(Alert)과 페이지 이동 등을 구현하는 과정에서 JavaScript를 일부 사용하였다.

(2) Web Server

  • Apache 2.4
  • localhost(127.0.0.1) 환경에서 구현

(3) DBMS

  • OracleDB

(4) IDE

  • Atom

(5) Mail Server & Mailing Library:

  • Naver Mail SMTP Server
  • PHPMailer 6.5

(6) 자동 반납을 위한 Auto Scheduling 유틸리티

  • Cron for Windows

📄 모듈별 요구사항 및 알고리즘

(1) 로그인

  • 온라인 도서관 서비스를 사용하기 위해 로그인을 해야 한다. DB에 저장되어 있는 회원번호(cno)와 패스워드를 입력하여 로그인할 수 있으며, 회원번호가 0번인 관리자를 제외한 나머지 회원번호로 접속한 유저는 모두 일반회원이다. 로그인 시 관리자는 관리자 메인페이지로, 일반회원은 유저 메인페이지로 이동하게 된다.

(2.1) 일반회원

  • 일반회원에게는 다음의 기능들이 제공된다.

  • 도서검색: 도서검색 메뉴를 클릭하면 온라인 도서관이 소장하고 있는 도서의 목록을 볼 수 있다. 제목, 저자, 출판사, 출판년도에 따라 검색할 수 있으며, 목록의 각 도서에 대해 대출가능여부에 따라 대출 또는 예약 버튼이 존재한다. 회원은 버튼을 클릭하여 도서목록 화면 내에서 대출 또는 예약을 할 수 있다.

  • 도서대출: 한 도서 당 한 명의 회원만 대출 가능하며, 한 회원은 최대 3권까지 대출할 수 있다. 처음 대출하면 대출일 다음 날부터 10일까지가 대출기간이며, 대출한 도서에 대해 최대 2회 각 10일씩 연장할 수 있으나 해당 도서에 대해 예약자가 존재하는 경우에는 연장이 불가능하다. 도서가 대출되면 관리자가 볼 수 있는 대출/반납기록(PREVIOUSRENTAL 테이블)에 도서정보와 대출일자가 기록된다.
  • 도서반납: 대출목록조회 메뉴에서 회원은 자신이 대출한 도서 목록을 확인할 수 있으며, 각 도서에 대해 반납 버튼이 존재한다. 해당 버튼을 누르면 도서가 반납 처리되며, 관리자가 볼 수 있는 대출/반납기록(PREVIOUSRENTAL 테이블)에 반납일자가 기록된다.
  • 도서예약/취소: 한 회원당 최대 3권의 도서를 예약할 수 있으며, 3권 범위 안에서 기존 예약을 취소하고 다른 도서를 예약할 수 있다. 예약을 하면 관리자가 볼 수 있는 예약목록(RESERVE)에 도서정보와 예약일시가 추가되며, 취소한 경우 예약목록에서 삭제된다. 한 도서에 대해 여러 회원이 예약 가능하고, 예약한 도서가 반납되면 1순위 대기자에게 대출 버튼이 활성화되며 메일로 대기순위를 안내한다.
  • 대출 및 예약도서목록 조회: 회원은 자신이 대출/예약한 도서 목록을 확인할 수 있다. 대출목록의 경우 도서정보와 연장횟수, 대출일, 반납기한을 확인할 수 있으며, 예약목록의 경우 도서정보와 예약일, 대기순번을 확인할 수 있다.

(2.2) 관리자

  • 관리자에게는 다음의 기능들이 제공된다.

  • 대출 및 예약 관리: 관리자는 관리자 메인페이지의 회원대출관리 메뉴에서 현재 도서관 회원들이 대출중인 도서의 정보와 대출자 정보, 반납기한, 연장횟수를 확인할 수 있으며 회원번호, 회원명, ISBN, 제목, 저자, 출판사, 출판년도를 기준으로 검색할 수 있다. 또한, 대출중인 도서에 대해 회원 대신 도서 반납이나 연장을 수행할 수도 있다. 회원예약관리 메뉴에서는 회원들이 예약중인 도서의 정보와 예약자 정보, 대기순번 등을 확인할 수 있으며 대출관리 메뉴에서와 동일한 검색기능이 제공된다. 예약중인 도서에 대해 회원 대신 예약 취소를 수행할 수도 있다.

  • 대출/반납기록 조회: 관리자는 대출/반납기록조회 메뉴에서 DB의 PREVIOUSRENTAL 테이블을 기반으로 표시되는 대출/반납기록을 조회할 수 있으며, 위에서 설명한 검색기능 역시 제공된다.

  • 대출통계 조회: 관리자는 대출통계조회 메뉴에서 회원별 대출건수를 다독자순으로, 도서별 대출건수를 인기도서순으로 확인할 수 있으며, 회원별 총 대출건수, 도서별 총 대출건수, 도서-회원별 총 대출건수 등을 종합적으로 확인할 수 있다.

(3) Batch Service

  • 반납 기일이 도래한 도서는 다음 날 자정이 되면 자동적으로 반납 처리되고 1순위 대기자가 존재하는 경우 1순위 대기자에게 대출가능 안내 메일을 발송한 다음 반납 처리한 기록을 DB의 AUTO_RETURN_LOG에 저장한다. 이 기능은 자동 스크립트 스케줄링 유틸리티 cron을 사용하여 매일 자정마다 위 기능을 구현한 cron_auto_return_and_mailing.php 파일을 자동으로 실행하게 함으로써 구현하였다.

📷 결과물 Screenshots

profile
기록하기

0개의 댓글