https://github.com/Bellroute/NewRealsedShoesNoticeBatch
2022년 초 1월 10일부터 16일까지 나이키 Member Days 이벤트 기간 동안 나이키 한정판 신발을 구매하기 위해 발매 시 슬랙 알림을 제공하는 서비스
서비스 플로우
하나의 Job 안에 3개의 Step으로 구성
크롤링을 위해 나이키 공식 홈페이지을 분석해본 결과 한 페이지에 40개의 제품이 로딩되도록 페이징처리가 되어 있음을 확인했습니다. 때문에 모든 상품 정보를 크롤링하기 위해서는 페이지 수만큼 url 요청을 보내야했습니다.
해당 로직은 비동기적으로 이뤄질 수 있을 것이라 판단되어 멀티 스레딩 방식으로 구현을 하였고, 기존에 40~50초가 소요되던 작업이 10초 미만으로 단축시킬 수 있었습니다.
public List<Product> crawlProducts() throws InterruptedException, IOException {
int pageSize = nikeCrawler.getPageSize();
log.info("page size : {}", pageSize);
**CountDownLatch countdownLatch = new CountDownLatch(pageSize);
for (int page = 1; page <= pageSize; page++) {
Thread thread = makeThread(page , countdownLatch);
thread.start();
}**
countdownLatch.await();
return products;
}