본문 바로가기
DEV-LOG/Lottomate

[Project Lottomate] 개발일지(4)

by DahnDellDev 2025. 4. 21.

17. 공통 로깅 AOP 적용 완료
목표: 서비스 및 컨트롤러 계층의 진입/반환 시점에 대한 자동 로그 기록을 통해 디버깅 및 흐름 파악 용이성 확보
클래스: aop.CommonLogger
기능 요약:

  • @Aspect 기반 AOP 적용
  • @Before: 메서드 진입 시 메서드명 및 파라미터 자동 로깅
  • @AfterReturning: 반환값 자동 로깅 (70자 초과 시 요약 처리)
  • 예외 처리는 GlobalExceptionHandler에서 별도 처리
  • 적용 대상: com.eeerrorcode.lottomate.controller..*, service..* 전역 적용

📌 Postman 테스트 및 추천 알고리즘 디버깅 시 서비스 흐름을 자동으로 추적 가능해졌음


18. 추천 번호 API 1차 버전 구현 완료
목표: 통계 기반 알고리즘을 통해 사용자가 설정한 옵션에 맞는 로또 번호 6개 추천
클래스: LottoRecommendServiceImpl
주요 기능:

  • recommendNumbers(RecommendOption option) 메서드 구현
  • LottoRange ENUM 기반 회차 범위 지정
  • 번호 출현 빈도 통계 기반으로 상위 번호 추출
  • 동일 빈도 시 Collections.shuffle()로 무작위성 부여
  • 짝홀 혼합 여부, 보너스 포함 여부 옵션 처리
  • 결과는 TreeSet<Long>으로 정렬하여 반환

DTO 구성:

  • RecommendOption: 회차 범위, 짝홀 필터, 보너스 포함 여부 등의 사용자 선택 옵션
  • RecommendResponse: 추천된 번호 6개와 관련 정보 포함

19. Postman 테스트 및 Swagger 문서화 진행

  • /recommend API Postman 테스트 완료 (모든 옵션 정상 작동 확인)
  • Swagger 문서화 진행 중
    • @Operation, @ApiResponse 어노테이션 적용
    • 응답은 공통 DTO 형식인 CommonResponse<RecommendResponse>로 통일

20. 최신 회차 자동 크롤링 스케줄러 구현 완료
목표: 매주 토요일 오전 11시에 최신 로또 회차 정보를 자동으로 수집 및 저장
구현 방식:

  • @Scheduled(cron = "0 0 11 ? * SAT") 사용
  • LottoCrawlerService.crawlLatest() 실행
  • 최신 회차 중복 여부 확인 후 데이터 저장 (lotto_results, lotto_result_details)

21. 관리자용 수동 크롤링 API 추가
경로: GET /api/lotto/crawl/latest
기능: 관리자 또는 테스트용으로 수동으로 최신 회차 데이터를 수집하는 엔드포인트

  • Swagger 테스트 가능
  • 이미 저장된 회차일 경우, 저장 없이 스킵
  • 응답: CommonResponse<String> (성공 or 중복 안내 메시지)

22. 추천 알고리즘 모드별 로직 분리 완료
목표: 다양한 번호 추천 전략 제공을 위해 추천 모드를 분리
ENUM: RecommendMode

  • HIGH_FREQUENCY: 출현 빈도가 높은 번호 추천
  • LOW_FREQUENCY: 출현 빈도가 낮은 번호 추천
  • MIXED: 고빈도 + 저빈도 조합 추천

구현 방식:

  • recommendNumbers() 메서드 내 switch 분기 처리
  • 모드별 추출 방식 분리 및 무작위성 보장 (shuffle())

23. Swagger 문서화 병행 진행
문서화 대상 API:

  • /recommend: 로또 추천 API
  • /stats/distribution: 번호 출현 통계
  • /lotto/crawl/latest: 수동 크롤링 API

공통 사항:

  • 모든 API에 @Operation, @ApiResponse 적용 중
  • 응답 구조는 CommonResponse<T>로 통일하여 일관성 유지

24. 고정 번호 / 회피 번호 필터 기능 구현 완료
목표: 사용자가 지정한 번호를 강제로 포함하거나 제외할 수 있도록 옵션 확장
구현 방식:

  • RecommendOption DTO에 fixedNumbers, avoidNumbers 리스트 필드 추가
  • 추천 로직 내부에서 다음 처리 수행:
    • fixedNumbers: 결과에 우선 포함되도록 처리
    • avoidNumbers: 후보군에서 제거
  • 필터 후 조건에 따라 남은 번호로 6개까지 채움

유의사항:

  • 고정 번호와 회피 번호 중복 시 자동 필터링
  • 고정 번호가 6개 이상일 경우 상위 6개만 반영

검증:

  • Postman 테스트에서 모든 필터 조건 정상 작동 확인
  • Swagger 문서에 필드 설명 추가 예정

📌 다음 작업 예정 항목 (업데이트)

  • Swagger 문서 예제 및 설명 보강
  • 추천 API 파라미터 유효성 검증 (@Valid, 커스텀 Validator)
  • JavaDoc 주석 추가 (Service 계층 중심)
  • 추천 기능 및 크롤링 기능에 대한 단위 테스트 작성
  • 추천 결과 저장 기능 (추천 이력 저장, 마이페이지 연동 등)

 

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

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