thumbnail

헬로프라이스는 다나와 최저가 알림을 주는 텔레그램 봇입니다.
다음은, 헬로프라이스 개발 과정을 담은 글입니다.
많이 부족하지만, 잘부탁드립니다.
개발을 끝내고 쓰는 개발기?
소스코드
프로젝트상세

<br>

헬로프라이스 개발기 01

<br>

그래서 이게 될까?

<img src="https://file.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://file.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://file.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://file.podo-dev.com/blogs/images/2019/12/02/origin/02c106c9-b325-4570-8337-ac30b6d7c8f2.png" alt="base64.png" style="width:200px;">

<br>

요구사항은 이렇다.

  1. 텔레그램 봇을 통해 서비스를 제공한다.
  2. 봇을 통해 상품을 검색 할 수 있다.
  3. 상품 검색 후, 상품을 등록 할 수 있다.
  4. 사용자는 봇을 통해 URL을 이용하여 상품을 등록 할 수 있다.
  5. 사용자는 최대 10개의 상품을 등록 할 수 있다.
  6. 가격이 떨어지면, 사용자에게 봇을 통해 알림이 전송된다.
  7. 상품 가격 주기는 5분 간격으로 갱신된다.
  8. 사용자는 이메일을 등록 할 수 있다.
  9. 이메일 등록 시에, 이메일로도 알림을 받을 수 있다

<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://file.podo-dev.com/blogs/images/2019/12/02/origin/2ebdaaaa-b044-4664-8549-1e2cf0a4b9d7.png" alt="base64.png" style="width:672px;">

각 모델에 사용되는 필드값

상품
<img src="https://file.podo-dev.com/blogs/images/2019/12/27/origin/a5eaeff9-7c73-4805-ba47-2246ac7b1a08.png" alt="base64.png" style="width:490px;">

사용자
<img src="https://file.podo-dev.com/blogs/images/2019/12/27/origin/1b9e9154-3c92-46d8-8793-a7c224a6f1bc.png" alt="base64.png" style="width:490px;">

사용자_아이템
<img src="https://file.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://file.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>

개발기는 이어집니다 >>

CommentCount 0
이전 댓글 보기
등록
TOP