본문 바로가기
DEV-LOG/Lottomate

[Project Lottomate] 개발일지(1)

by DahnDellDev 2025. 4. 16.

✅ 1. 크롤링 대상

  • 대상: 동행복권
  • 범위: 로또 1회차부터 최신 회차(1167회차)까지 전체
  • 수집 정보:
    • 당첨 번호(n1~n6)
    • 보너스 번호
    • 추첨일자
    • 1등 당첨자 수
    • 1등 당첨금액
    • 총 판매금액
    • 2등~5등 각 등수의 당첨자 수 및 금액

✅ 2. DB 테이블 구조

📄 lotto_results

컬럼명 설명

draw_round 회차 번호
draw_date 추첨일
n1 ~ n6 당첨 번호
bonus_number 보너스 번호
first_prize_winners 1등 당첨자 수 (Long 타입으로 확장)
first_prize_amount 1등 당첨금
total_sales_amount 총 판매금액

📄 lotto_result_details

컬럼명 설명

lotto_result_id 외래키 (lotto_results)
rank 등수 (2~5등)
winner_count 당첨자 수
prize_amount 당첨금액

✅ 3. Spring 엔티티 구성

  • LottoResults, LottoResultDetails 두 개의 Entity 구성
  • @OneToMany(mappedBy = "lottoResults") 로 연관관계 설정
  • @Builder.Default 로 List<LottoResultDetails> 기본값 세팅

✅ 4. 크롤링 서비스 구성

📌 LottoCrawlerService

  • crawlAndSave(WebDriver driver, int round)
    • 단일 회차 크롤링 및 저장
  • crawlLatest()
    • 최신 회차 1회 자동 저장
  • getLatestRound()
    • 셀렉트 박스에서 최신 회차 파싱
  • crawlAll()
    • 1회차부터 최신까지 전체 저장 루프

주요 수정 사항:

  • Integer.parseInt(...) → Long.parseLong(...) 로 변경하여 int 범위 초과 문제 해결
  • 날짜 처리 시 LocalDate.parse(...).atStartOfDay() 방식으로 LocalDateTime 일관 처리

✅ 5. Controller 구성

@PostMapping("/crawlall")
public ResponseEntity<?> crawlAll() {
    crawlerService.crawlAll();
    return ResponseEntity.ok("전체 회차 크롤링을 성공적으로 완료했습니다.");
}
  • Postman에서 POST 요청으로 전체 크롤링 수행 가능

✅ 6. Selenium 설정 및 디버깅 이슈

  • chromedriver 자동 세팅 (WebDriverManager)
  • ExpectedConditions.presenceOfElementLocated() 로 로딩 안정성 확보
  • NoSuchElementException, NumberFormatException 등 예외 처리 및 로깅 강화

✅ 7. 성공 결과

  • 🌟 총 1167회차까지 크롤링 및 DB 저장 성공
  • ✔️ DB 정합성 및 데이터 정리 확인 완료

✍️ 향후 작업 예정

  • 스케줄러로 매주 토요일 오전 자동 실행 기능
  • 테스트 컨트롤러로 DB 호출 기능 확인
  • Swagger 연동으로 API 테스트 편의성 향상
  • 데이터 기반 추천 알고리즘 개발 및 연동 (확률 기반 번호 추천)
  • 크롤링 결과 대시보드 시각화

 

'DEV-LOG > Lottomate' 카테고리의 다른 글

[Project Lottomate] 개발일지(6)  (0) 2025.04.25
[Project Lottomate] 개발일지(5)  (0) 2025.04.22
[Project Lottomate] 개발일지(4)  (0) 2025.04.21
[Project Lottomate] 개발일지(3)  (0) 2025.04.20
[Project Lottomate] 개발일지(2)  (0) 2025.04.18