Lotto Strategy Simulation Service
로또 6/45 과거 회차 데이터 SQLite 적재/갱신
매주 크론(스케줄러) 기반 자동 동기화
전략 기반 게임 생성
low_overlap_random (기본): 가능한 한 중복을 줄인 랜덤 조합
uniform_random: 단순 무작위 조합
각 게임별 과거 회차 당첨 통계(1~5등) 계산 및 저장
FastAPI 기반 API 제공
Docker 구성(웹포트: 8645)
app/main.py : FastAPI 앱 및 API 라우트
app/services/crawler.py : 동행복권 결과 페이지 파싱 및 엑셀 다운로드
app/services/excel_parser.py : 엑셀 파싱
app/services/sync_service.py : 주간 동기화 오케스트레이션
app/services/strategies.py : 번호 생성 전략
app/services/evaluator.py : 회차별 등수 계산
app/db.py : SQLite 저장소 관리
app/cli.py : 동기화 CLI
app/scheduler.py : 매주 일요일 09:00 Asia/Seoul 주기 동기화
매 실행시 최신 회차를 확인
항상 엑셀(lt645/excelDown.do)로 1회차~최신회차 구간을 내려받아 파싱 시도
엑셀 파싱 실패 시 같은 구간을 API로 보조 조회
DB에 존재하지 않는 회차는 Insert, 값이 변경된 경우 Update, 동일값은 Skip
cp .env.example .env # 없으면 환경변수 직접 사용
./rebuild_restart.sh
# 캐시 없이 다시 빌드할 때
./rebuild_restart.sh --no-cache
런타임 스위치: AD_PROVIDER=none|adsense|adfit
페이지 내 슬롯 3개가 준비되어 있습니다.
상단 배너: top
중단 배너: mid
모바일 하단 고정: sticky
상세 설정과 운영자 할 일은 AD_SETUP_TODO.md를 참고하세요.
웹 API: http://localhost:8645
헬스체크: http://localhost:8645/health
API 스펙(자동 생성) 참고: /docs
브라우저에서 서비스하려면 /lotto/ 경로를 프록시할 nginx 규칙을 추가하면 됩니다.
docker compose exec web python -m app.cli sync
/home/taltal/git/lotto/nginx/lotto-taltalrealty.location.conf에 기본 프록시 예시를 넣어 두었습니다.
핵심은 location /lotto/를 FastAPI 컨테이너 포트 8645로 연결하고, /lotto는 /lotto/로 리다이렉트하는 것입니다.
권장 설정은 proxy_pass http://127.0.0.1:8645; + rewrite ^/lotto/(.*)$ /$1 break; 입니다.
curl -X POST http://localhost:8645/api/games \
-H ' Content-Type: application/json' \
-d ' {"game_count":5,"strategy":"low_overlap_random","seed":42}'
POST /api/sync : 동기화 실행
GET /api/draws : 회차 조회 (start_no, end_no 쿼리 지원)
POST /api/games : 게임 생성 및 평가
POST /api/number-check : 사용자 지정 6개 번호 조합의 역대 당첨 이력/등수 조회
GET /api/games : 게임 실행 이력
GET /api/games/{id} : 게임 상세(추가 파라미터 include_hits=true 가능)
GET /api/sync/runs : 동기화 이력
웹사이트 파싱 정책에 따라 엑셀 구조가 변경되면 파서 튜닝 필요
사이트 과도 호출을 방지하기 위해 배치 주기(일주일 1회)를 권장