이름 | 전공 | 학번 | |
---|---|---|---|
김태윤 | 컴퓨터공학전공 | 19학번 | [email protected] |
이민수 | 컴퓨터공학전공 | 17학번 | [email protected] |
이름 | 전공 | 학번 | |
---|---|---|---|
손기민 | 컴퓨터공학전공 | 19학번 | [email protected] |
이형준 | 컴퓨터공학전공 | 19학번 | [email protected] |
동국대학교 중앙 도서관 지도 - DOGE

도서관에서 원하는 서적을 찾기 위해 서가 사이에서 한참을 뒤적거린 경험이 한 번쯤 있을 것이다. 도서관의 자료는 모두 ‘청구기호’라는 고유번호가 붙어있기 때문에, 사람들은 청구기호를 통해서만 책을 찾을 수 있다. 도서관에서 제공하는 도서검색 서비스를 이용해도 얻을 수 있는 정보는, 책의 존재 여부와 청구기호 뿐이다. 길고 복잡한 청구기호만으로 책을 찾는 것은 불편하고 어려운 일이다. 따라서 조용한 도서관의 분위기를 방해하지 않고, 신속하고 편하게 원하는 도서를 찾을 수 있도록 동국대학교 중앙도서관의 책 지도 프로그램을 만들고자 한다.

1️⃣ 메인화면

2️⃣ 회원가입

3️⃣ 도서검색

4️⃣ 도서상세정보 확인 및 지도 확인

5️⃣ 도서 즐겨찾기 및 삭제

크롤링은 자바 스프링 환경에서 셀레니움을 사용하여 진행하였다.
중앙도서관 홈페이지에서 통합검색 > 소장자료의 URL을 임의로 설정하여 동국대학교 중앙도서관에서 소장하고 있는 모든 단행본을 검색하였다.
첫 페이지에서 다음 페이지로 넘기면서 도서 정보(청구기호, 서명, 저자, 출판사, 사진 링크)를 크롤링한다.
청구기호를 크롤링하기 위해 좌측에 보이는 '중앙도서관 대출가능' 버튼을 셀레니움으로 클릭한 뒤 진행한다.
크롤링한 데이터는 책에 대한 정보만 있을 뿐, 위치에 대한 정보는 크롤링 할 수 없기 때문에 별도의 연산 처리 로직이 필요하다.
아래 사진에서 층 정보, 책장 정보 등에는 모두 null로 채워져 있는 것을 확인할 수 있다.
책의 위치를 계산하기 위해 우선 중앙도서관에 방문하여 중앙도서관에 있는 모든 서가의 청구기호 범위와 이름을 조사하였다.
이후 책이 청구기호의 범위에 속하는지 판단하는 알고리즘을 구현하여 책과 서가를 맵핑하였다. 보존도서나 특수한 책은 서가에 존재하지 않기 때문에 맵핑하지 않았다.
이후 SQL을 활용하여 책을 청구기호 순으로 정렬한 뒤, 각 서가에 몇 권의 도서가 존재하는지 SQL의 count를 사용하여 계산한다.
이렇게 계산한 서가마다의 총 도서 수를 서가에 존재하는 책장의 수만큼 균등분할하여 SHELF_COUNT를 계산한다.
이 작업을 BOOK_ROW에 대해서도 실행하여 BOOK_ROW도 계산할 수 있다.
BOOK_CELL을 연산하기 위해 균등분할을 한다면 다중 반복으로 인한 시간 복잡도가 너무 높아지기 때문에 BOOK_ROW의 값을
순서대로 가져와 이번에 가져온 값이 앞에 가져온 값과 달라지면 다시 1부터 증가하는 방법을 사용하였다.
- feat : 새로운 기능 추가
- fix : 버그 수정
- docs : 문서 수정
- style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
- refactor: 코드 리펙토링
- test: 테스트 코드, 리펙토링 테스트 코드 추가
- chore : 빌드 업무 수정, 패키지 매니저 수정
아이콘 | 코드 | 설명 |
---|---|---|
🎨 | :art | 코드의 구조/형태 개선 |
⚡️ | :zap | 성능 개선 |
🔥 | :fire | 코드/파일 삭제 |
🐛 | :bug | 버그 수정 |
🚑 | :ambulance | 긴급 수정 |
✨ | :sparkles | 새 기능 |
💄 | :lipstick | UI/스타일 파일 추가/수정 |
⏪ | :rewind | 변경 내용 되돌리기 |
🔀 | :twisted_rightwards_arrows | 브랜치 합병 |
💡 | :bulb | 주석 추가/수정 |
🗃 | :card_file_box | 데이버베이스 관련 수정 |