프로젝트, 연구/도서관 관리 사이트

[도서관 관리 사이트] 1. 기능 확인, DB구조 설계, 프레임워크 선택

CSE 2025. 10. 10. 23:52

 

학교 데이터베이스 수업의 과제로 '도서관 관리 사이트 만들기'를 하게 되었다.

 

 

1. 기능

과제에서 요구한 필수 기능은 아래와 같다.

<필수 기능>

로그인기능 
• ID와 비밀번호를 이용해 로그인이 가능해야 한다. 
• 계정은 사용자계정과 관리자계정으로 구분할 수 있다. 
• 관리자계정으로 로그인할 경우 더 많은기능을 사용할 수 있다. 
• 사용자가 직접 회원가입을 할 수 있어야한다. 
• 관리자계정으로 가입시 아무나 가입할 수 없도록 추가코드를 요구해야한다. 
• 추가코드는 자신의 10자리 학번으로 한다. 

서적검색 및 열람서비스 
• 모든 서적목록을 확인할 수 있는 페이지가 있다. 
• 서적목록 페이지에서는 
     • 책제목,저자,카테고리,수량,대출가능 여부 등의 정보를 확인할 수 있다. 
     • 책제목, 저자, 카테고리등으로 정렬할 수 있다. 
     • 책제목, 저자, 카테고리등으로 서적을 검색할 수 있다.

서적 큐레이팅 서비스 
• 최근 3달동안의 대출기록을 바탕으로 인기서적차트를 확인할 수 있는 페이지가 있다. 
• 인기서적차트는 모든 서적에 대한 차트와 카테고리별 차트가 있다. 
• 도서관에는 동일한 책이 여러 개 있을 수 있는데, 차트에 집계할 때에는 종합해서 집계한다.

대출 및 반납 
• 사용자는 현재 대출중이 아닌 모든 책을 대출할 수있다.
• 사용자는 동시에 최대 3권까지의 책을 대출할 수 있다. 
• 사용자는 동일한 책을 동시에 2권 이상 대출할 수 없다. 
• 연체상태(어떤 서적을 반납하지 않고 7일 이상 대출한 상태)인사용자는대출을 할 수 없다. 
• 사용자는 대출중인 책을 반납할 수 있다. 
• 사용자별 대출기록을 확인할 수 있는 페이지가 있다. 
• 대출기록에서는 정확히 어떤 책을 대출했는지(동일한 책중에서도) 확인할 수 있어야한다. 

서적관리(관리자용) 
• 관리자는 서적을 추가 및 제거할 수 있다. 
• 관리자는 카테고리를 추가 및 제거할 수 있다. 
• 책은 동시에 여러 카테고리에 속할 수 있다.

회원관리(관리자용) 
• 관리자는 회원 목록을 열람할 수 있다.

 

 

이 기능들을 제외하고 추가 기능을 3가지 이상 더 구현해야한다.

이 중 2개 이상은 통계 관련 기능이어야 한다.

 

따라서 아래의 3가지 기능을 추가했다.

 

유령회원 탐지 (통계)
다독상 순위 선정 (통계)
도서 예약 기능

2. 대략적인 DB설계

보통 entity 구상 -> ER diagram -> relation schema -> table 설계 방식으로 진행한다.

하지만 나는 바로 테이블 형태를 생각하는게 편해 먼저 대략적으로 아래처럼 table을 구상했다.

 

물론 후에는 ER diagram도 그렸다.

이 ER diagram은 그려도 제대로 그렸는지 검증이 어렵게 느껴진다.

아직은 DB설계가 익숙하지 않아 좀 더 직관적으로 와닿는 테이블을 먼저 설계하게 되는 것 같다.

 

각 attribute가 의미하는 것은 왼쪽 사진의 설명에서 간단히 확인할 수 있고, 오른쪽 그림은 테이블과 그 관계를 시각화 한 것이다.

 

 

몇가지 설명을 하자면, 

 

1) book_code와 book_id가 따로 존재하는 것을 볼 수 있다. 같은 책이 여러 권 있을 수 있고 개별 책을 구분하는 것도 가능해야 하기에 같은 종류의 책은 같은 book_code를 가지고, 개별 책들은 다른 book_id를 가지도록 했다.

 

2) 위의 오른쪽 그림에서 화살표와 밑줄들은 키(key)들과 관련된 정보를 표시한 것이다. 복합키는 표시되지 않았다.

 


3. 기술 및 프레임워크

이 과제가 제시되며 스켈레톤 코드가 같이 제공되었다.

아무래도 DB수업이다 보니 html, css관련된 부분은 제공해준 것이라는 생각이 든다.

제공된 코드는 node.js 기반이었고, 이미 프로젝트 폴더의 구조가 어느정도 정해져 있었다.

 

DB를 다룰 때 mySQL만 사용한다면 스켈레톤 코드를 사용하지 않고 과제를 해도 된다고 고지되었다.

개인적으로 이런 프로젝트는 내가 처음부터 끝까지 전부 해보고 싶어 제공된 코드를 사용하지 않고 아예 처음부터 해보기로 했다.

 

제공된 코드를 사용하지 않으면 사용되는 기술도 꼭 node.js가 아닌 원하는대로 사용할 수 있어 이 부분에서 고민은 조금 하였다.

 

1. node.js는 많은 웹 프로젝트에서 사용되고 인기가 많기 때문에 이걸로 할까 했지만,

그러면 결국 제공된 코드를 따라가게 될 것 같아 선택지에서 제외했다.

 

2. 다음으로 Django를 고려했는데, 이미 너무 기능들을 편하게 구현할 수 있게 되어있어서 사용하지 않기로 했다.

이 수업은 DB수업이다 보니 SQL 쿼리를 짜는 능력도 평가를 하는데 Django를 사용하면 ORM(Object-Relational Mapping)기술 때문에 쿼리를 직접 작성하지 않아도 되기 때문이다. 물론 직접 쿼리를 작성할 수는 있다.

 

최종 선택지는 python flask를 이용하기로 했다.

강력한 ORM이 있는 풀스택 프레임워크인 Django와 비교해

마이크로 프레임워크로 분류가 되는 flask는 자체적인 ORM이 없기 때문이다.