헬로프라이스 개발기 02
헬로프라이스는 다나와 최저가 알림을 주는 텔레그램 봇입니다.
다음은, 헬로프라이스 개발 과정을 담은 글입니다.
많이 부족하지만, 잘부탁드립니다.
개발을 끝내고 쓰는 개발기?
소스코드
프로젝트상세
<br>
<br>
그래서 이게 될까?
<img src="https://static.podo-dev.com/blogs/images/2019/12/27/origin/342a165f-3426-43bf-8393-9bf69a9c2d44.png" alt="base64.png" style="width:320px;">
첫째로, 상품을 어떻게 구분할 것인지에 대한 고민이다
상품은 너무다양하다.
특히 동일 제품이라도, 옵션에 따라서 다른 제품으로 취급한다.
다나와에서 수 많은 상품은 어떻게 구분할지를 고민했는데,
고맙게도, 다나와는 상품별로 유니크한 상품코드
가 지정 되어있고,
Query Parameter
에서 이를 확인 할 수 있었다.
<img src="https://static.podo-dev.com/blogs/images/2019/12/02/origin/e472bb50-6b5c-458d-b3ab-79578cd451ef.png" alt="base64.png" style="width:688px;">
pcode
값은 유니크한 상품코드
값이고,
즉 이 값을 알면, 해당 상품 페이지로 이동 할 수 있다.
사용자는 상품코드
를 이용해서 상품을 등록 할 수 있을 것이다.
<br>
둘째로, 다나와 크롤 가능 여부를 조사한다.
다나와에서 데이터를 가져와도 되는지 robots.txt
를 확인했다.
htttp://www.danawa.com/robots.txt
<img src="https://static.podo-dev.com/blogs/images/2019/12/02/origin/3bb14554-afb9-481c-8ab1-d15930e842c2.png" alt="base64.png" style="width:190px;">
robots.txt
에는 별 다른,
크롤 제한 규칙을 명시하진 않아, 가능한 것으로 판단했다.
<br>
!!? 그럼 될거같은데
<img src="https://static.podo-dev.com/blogs/images/2019/12/02/origin/02c106c9-b325-4570-8337-ac30b6d7c8f2.png" alt="base64.png" style="width:200px;">
<br>
요구사항은 이렇다.
- 텔레그램 봇을 통해 서비스를 제공한다.
- 봇을 통해 상품을 검색 할 수 있다.
- 상품 검색 후, 상품을 등록 할 수 있다.
- 사용자는 봇을 통해 URL을 이용하여 상품을 등록 할 수 있다.
- 사용자는 최대 10개의 상품을 등록 할 수 있다.
- 가격이 떨어지면, 사용자에게 봇을 통해 알림이 전송된다.
- 상품 가격 주기는 5분 간격으로 갱신된다.
- 사용자는 이메일을 등록 할 수 있다.
- 이메일 등록 시에, 이메일로도 알림을 받을 수 있다
<br>
사용 기술
Java를 사용해봅니다
- Java 1.8
- Spring Boot 2.2.0
- Spring Batch
- Spring JPA
- MySql
- Jsoup
- Selenium
- Telegram java lib
<br>
설계는 이렇다.
사용자
, 상품
모델이 존재한다.
두 가지 모델만 존재하고,
사용자는 상품을 N
개 등록 할 수 있고
상품은 M
명의 사용자에게 등록 될 수 있다.
사용자와 상품은 N:M
관계로 조인테이블을 필요로 한다.
<img src="https://static.podo-dev.com/blogs/images/2019/12/02/origin/2ebdaaaa-b044-4664-8549-1e2cf0a4b9d7.png" alt="base64.png" style="width:672px;">
각 모델에 사용되는 필드값
상품
<img src="https://static.podo-dev.com/blogs/images/2019/12/27/origin/a5eaeff9-7c73-4805-ba47-2246ac7b1a08.png" alt="base64.png" style="width:490px;">
사용자
<img src="https://static.podo-dev.com/blogs/images/2019/12/27/origin/1b9e9154-3c92-46d8-8793-a7c224a6f1bc.png" alt="base64.png" style="width:490px;">
사용자_아이템
<img src="https://static.podo-dev.com/blogs/images/2019/12/27/origin/1cb13b71-4534-4af5-a9a7-a1a24f226f26.png" alt="base64.png" style="width:490px;">
<br>
멀티모듈
모듈은 멀티모듈로 설계하고 다음과 같이 구성하였다.
<img src="https://static.podo-dev.com/blogs/images/2019/12/03/origin/1fe413b8-b2c5-4a1f-bd8c-6bff2f147f43.png" alt="base64.png" style="width:190px;">
- helloprice-crawlworker - 주기적으로 상품을 가져와 갱신하는 배치작업을 수행
- helloprice-crawler - 다나와 가격 정보를 가져오는 모듈
- helloprice-domain - 도메인 (entity, repository)
- helloprice-telegram - 텔레그램 봇 구현
- helloprice-core - 핵심 유틸리티 구현
<br>
개발기는 이어집니다 >>