본문 바로가기
🤖 생산성 Up & Tips

숙박 애플리케이션에 테스트를 위한 숙소 데이터 구하기 (공공 API사용, 직접 Dummy 데이터 생성하기)

by kukim 2022. 6. 6.

상황

코드스쿼드 팀 프로젝트로 Airbnb와 유사한 애플리케이션을 개발하고 있다. 실서버와 유사한 부하를 느끼기 위해 많은 더미 데이터를 넣고 개발하고 싶었다.


의사 결정

더미 데이터는 크게 3곳에서 구할 수 있다고 판단하였다.

 

1. 공개 API 사용

2. 직접 더미데이터 생성

3. 크롤링


1. 공공 API 사용

공공데이터 포털 에 '숙박'이라고 검색하면 무려 73건의 API가 나오고 지역별로 API가 분리되어있다. (끔찍하다)

좀 더 검색해보니 한국관광공사의 TourAPI3.0에서 위와 동일한지는 모르겠지만, 전국 숙박 데이터를 모아놓았다.

OpenAPI 가이드 - [숙박 검색]

불편했던 점은 TourAPI 3.0과 공공데이터 포털 두 사이트가 다른 곳인데, 공공 데이터 포털에서 TourAPI3.0을 신청하고 인증키를 받아 사용해야 한다. 또한 API 문서가 뒤죽박죽으로 있다.

 

요약

- 공공데이터 포털 사이트 : [숙박 검색] API 한국관광공사_국문 관광정보 서비스 를 신청하여 인증키를 받는다.

- TourAPI3.0 사이트의 [숙박 검색] API를 활용하여 사용한다.

- 데이터는 약 3670개 전국의 숙소 데이터

- 중간중간 결측값이 꽤 있다.

- json으로 타입이 변환된다고 하지만 페이징 중에 에러가 발생, xml으로 받아 파싱 해서 사용했다.

 


2. 직접 더미데이터 생성

공공 API를 사용해보니 결측값과 원하는 데이터가 있지 않았다. python의 faker 라이브러리를 사용해 이름, 주소, 위경도를 랜덤으로 생성하기로 했고 이미지는 https://picsum.photos 의 랜덤 데이터를 활용하기로 했다.

 


3. 크롤링

숙박 앱인 Airbnb, 야놀자 등을 직접 크롤링을 할까 고민했지만 프로젝트 시간제한과 robots 고려해야했기 때문에 사용하지 않기로 했다.

검색한 깃허브에 공개된 크롤러를 함께 공유한다. (Airdnd-Crawler, Airbnb scraper)


 

결론

프로젝트 지역 : 한국 지역 한정

 

활용 : 공공 API + 직접 더미데이터 생성하여 약 10만 개 데이터 활용

- Python faker + 이미지 : 숙소, 숙소 이미지 더미 데이터 생성 코드 링크(gist) , colab 링크  (엉망인 코드지만 도움이 될까하여 공유한다.)

- python을 활용해 공공 데이터 .csv로 변환 코드(gist)

 

문제 : python으로 작성한 더미데이터 생성기가 속도가 느리다.

-> 병렬처리와 pandas를 사용하지 않고 numpy만을 사용, 문자열 생성 등 속도를 높일 수 있어 보인다.

 

배운 것

- 더미 데이터 생성 python의 fake 라이브러리가 편리하다.

- 공공 API는 불편하다. 하지만 주는 것만으로도 감사하다.

- 더미데이터 뿐만 아니라 실서버와 동일한 환경에서 테스트하는 습관을 만들어야겠다.

 

+a csv 파일을  h2 db에 insert 하기

csv 파일을 DB에 로드하는 방법은 DBMS마다 문법이 조금씩 다르다. 

h2 환경에서 csv 파일 업로드하는 문법은 아래와 같다. 

insert into host (host_name, host_image_url)
SELECT *
FROM CSVREAD('./src/main/resources/db/dummy_csv/dummy_host.csv');


insert into room (host_id, title, description, address, lat, lng, bathroom_count, bed_count,
                  bedroom_count, header_count_capacity, cleaning_fee, daily_price,
                  lodging_tax_ratio, sale_ratio, service_fee, rating_star_score, review_count)
SELECT *
FROM CSVREAD('./src/main/resources/db/dummy_csv/dummy_rooms.csv');


insert into room_image(room_id,image_url)
SELECT *
FROM CSVREAD('./src/main/resources/db/dummy_csv/dummy_room_images_plus.csv');

특별한 점

- load data 와 같은 문법이 아닌 insert into가 바로 나온다.

- CSVREAD(csv_file_path)의 csv_file_path가 루트 디렉토리부터 시작하기 때문에 ./src/main~ 경로를 입력하면 된다.

(참고 - DB별 CSV 파일 로딩 방법)


Reference

- 공공데이터 포털

- 한국관광공사의 TourAPI3.0

- python의 faker 라이브러리

- python을 활용해 공공 데이터 .csv로 변환 코드(gist)

- Python faker + 이미지 : 숙소, 숙소 이미지 더미 데이터 생성 코드 링크(gist)

- Airdnd-Crawler

- Airbnb scraper

- DB별 CSV 파일 로딩 방법

댓글