StayHub: Real-time Accommodation Search and Sharing Platform
https://github.com/ssunbear/database/
1. 프로젝트 개요
프로젝트 주제 및 설명
"StayHub: Real-time Accommodation Search and Sharing Platform"
국내 숙박업소를 검색해서 실시간으로 숙박업소에 대한 가격 및 여러 정보를 얻고, 숙박업소에 대한 정보를 사용자들이 직접 등록하여 공유할 수 있는 서비스
프로젝트 동기
최근 숙박업소의 예약 웹사이트가 증가하는 추세에도 불구하고, 각 사이트에서 제공되는 할인율에 따라 소비자는 같은 숙박업소임에도 더 비싼 가격으로 예약을 하는 상황들이 많아지고 있습니다. 특히 예약사이트의 종류도 다양하고, 객실마다 제시되는 가격도 다양하기 때문에 이에 대한 통합적인 정보를 제공하고자 해당 주제로 프로젝트를 진행하고자 합니다.
프로젝트 언어 및 환경
프로젝트 언어는 Python이고 DB는 postgresql에서 제공하는 엔진을 사용했습니다.
2. 프로젝트 목적, 기능
프로젝트 목적
각 웹사이트에서 제공하는 할인된 가격을 종합하여 보다 합리적인 가격으로 소비자가 이용할 수 있게 만드는 것 입니다. 숙박업소 DB를 구축하고, 검색 기능, 리뷰 및 선호도(별점) 등록하는 기능, 리뷰에 대한 댓글을 남길 수 있는 기능 등을 통해 사용자가 보다 다양한 선택지의 숙박업소를 비교하여 예약 할 수 있는 것을 목적으로 삼았습니다.
프로젝트 기능
‘StayHub’는 7가지의 핵심 기능을 담고 있습니다.
- 숙박업소의 데이터 셋을 이용한 검색기능
- 숙박업소의 정보를 등록 및 삭제하는 기능
- 등록된 모든 숙박업소를 조회하는 기능
- 숙박업소에 대한 리뷰와 선호도를 등록하는기능
- 리뷰에 대한 답글을 남길 수 있는기능
- 사용자가 원하는 숙박업소를 즐겨찾기에 추가하는 기능
- 마이 페이지를 통해 자신이 즐겨찾기에 추가된 숙소 조회 및 삭제, 등록한 리뷰 조회하는 기능
3. 데이터베이스 설계
개체, 속성 추출 결과
관계 추출 결과
E-R 다이어그램
릴레이션 스키마
물리 ERD
테이블 명세서
4. 데이터 수집
데이터 수집 및 확보 방안
아고다, 호텔스컴바인, 익스피디아 등 다양한 웹사이트의 통합 숙박업소 데이터베이스를 일일히 얻기 보다는 네이버 호텔(https://hotels.naver.com/) 페이지의 데이터베이스를 크롤링하여 데이터를 수집하였습니다.
전국의 숙박업소의 데이터를 모두 수집하기는 어렵기에 주요도시 15개(서울, 제주, 부산, 인천, 강릉, 속초, 여수, 경주, 대구, 대전, 울산, 평창, 전주, 군산, 양양)의 숙박업소 데이터만 추출하여 데이터를 수집하였습니다
데이터 충분성 판단
선정한 15개 도시에서 인기순으로 100개의 숙소를 선정하여 DB를 구성하였습니다. 해당 지역의 숙소 순위가 100위가 넘는 숙박업소를 예약하지는 않는 것으로 생각하는 것이 합리적이기에 지역마다 100개의 숙박업소를 선정하였습니다. 이런 점에서 데이터의 양은 충분하다고 판단됩니다.
크롤링으로 데이터를 수집하기에 숙박업소의 객실의 최소가격만 얻을 수 있다는 점과 객실 사이즈에 따른 가격을 수집하지 못한 것이 아쉽습니다.
5. 프로젝트 평가
프로젝트 기대효과
‘StayHub’를 통해 여러 웹사이트에서 제공하는 최저가 가격을 종합하여 합리적인 가격으로 사용자가 숙박업소를 예약할 수 있을 것입니다. 다음으로 리뷰 기능과 평점을 참조하여 사용자가 숙박업소를 예약하는데 도움이 될 것입니다.
프로젝트 마무리
국내 주요 15개 도시의 통합 숙박업소 DB를 만들고 ‘StayHub’를 만들면서 아쉬운 점으로는 대용량의 데이터를 처음 다루다 보니 미숙한 점도 많았고, 기능 구현에 아쉬운 점도 많았습니다. 다만, 이 프로젝트를 발전시킨다면 15개의 도시를 넘어 전국의 통합 DB와 해외의 숙박업소 DB를 만들수 있다는 점에서 확장 가능성이 큰 좋은 프로젝트라고 생각합니다.
6. 쿼리문/쿼리 결과물 예시 및 코드
CREATE TABLE member
(
member_id varchar(20) PRIMARY KEY,
member_pw varchar(45) NOT NULL,
member_name varchar(45) NOT NULL,
member_age int NOT NULL,
member_phonenumber varchar(100) NOT NULL
);
COMMIT;
CREATE TABLE favorite
(
favorite_num int PRIMARY KEY,
member_id varchar(20) NOT NULL,
accomodation_id varchar(45) NOT NULL,
FOREIGN KEY (member_id) REFERENCES member(member_id),
FOREIGN KEY (accomodation_id) REFERENCES accommodation(accommodation_id)
);
COMMIT;
CREATE TABLE accommodation
(
accomodation_id varchar(45) PRIMARY KEY,
accomodation_name varchar(45) NOT NULL,
accomodation_address varchar(45) NOT NULL,
accomodation_rate varchar(45) DEFAULT '0',
accomodation_lowprice varchar(45) NOT NULL
);
COMMIT;
CREATE TABLE review
(
review_num int PRIMARY KEY,
review_title varchar(45) NOT NULL,
review_detail varchar(400) NOT NULL,
member_id varchar(20) NOT NULL,
accomodation_id varchar(50) NOT NULL,
accomodation_rate varchar(45) NOT NULL,
FOREIGN KEY (member_id) REFERENCES member(member_id) ,
FOREIGN KEY (accomodation_id) REFERENCES accommodation(accommodation_id)
);
COMMIT;
CREATE TABLE comment
(
comment_num int PRIMARY KEY,
member_id varchar(20) NOT NULL,
review_num int NOT NULL,
comment_detail varchar(200) NOT NULL,
FOREIGN KEY (member_id) REFERENCES member(member_id) ,
FOREIGN KEY (review_num) REFERENCES review(review_num)
);
COMMIT;
쿼리문 결과 - DB/Python 연동
개인정보 입력