GAS와 동행복권 API만 있으면 당첨번호 수집부터 빈도 분석, 추천번호 생성까지 전부 자동화할 수 있다. 프롬프트 몇 번이면 나만의 로또 분석기가 완성된다.
뭔가 상황이 힘들면, 로또를 찾게 되는데 주변 가게를 찾는 것도, 구매하는 과정도 경험이 그렇게 좋지는 않다.
그래서 꽤 오래된 주제이긴 한데, 로또 자동 구매 프로세스를 Google Apps Script로 진행을 해보려고 한다.
구글 스프레드시트는 데이터를 저장하고 분석하기 좋은 툴이니, 데이터를 모아 볼까 하고 시작해 본다.
우선 최근에 동행 복권 사이트가 리뉴얼을 했다 보니, 검색 결과를 활용할 수 없었다. 그래서 데이터 크롤링을 위해 동행 복권 사이트를 분석한다. 나중에 크롤링 관련해서도 정리를 해보겠다.
우선 전체 데이터를 조회하는 API는 다음과 같은데, 이런 것을 찾는 것이 중요하지, 그 데이터 처리는 중요하지 않다. 왜냐하면** AI Agent에게 전달하고 분석을 하라고 하면 되니까**!
전체 회차에 대한 당첨번호 수집 API
curl 'https://www.dhlottery.co.kr/lt645/selectPstLt645Info.do?srchLtEpsd=all&_=1768099476641' \ -H 'AJAX: true' \
\ -H 'Accept: application/json, text/javascript, */*; q=0.01' \
\ -H 'Accept-Language: ko,en-US;q=0.9,en;q=0.8' \
\ -H 'Connection: keep-alive' \
\ -H 'Content-Type: application/json;charset=UTF-8' \
\ -b 'WMONID=gQ3iuD0owxM; DHJSESSIONID=akTUnO7Pqr6BaBfquV9gjaLu8xBWLEzbbvLMdDZVQsCnmVE2tIvi3NnxtJYc4MUG.cHBwdHdhc19kb21haW4vUFBvU3J2Y0NvbjIx; recent=%5B%7B%22name%22%3A%22%EC%B6%94%EC%B2%A8%EA%B2%B0%EA%B3%BC%22%2C%22url%22%3A%22https%3A%2F%2Fwww.dhlottery.co.kr%2Flt645%2Fresult%22%7D%5D' \ -H 'Referer: https://www.dhlottery.co.kr/lt645/result' \
\ -H 'Sec-Fetch-Dest: empty' \
\ -H 'Sec-Fetch-Mode: cors' \
\ -H 'Sec-Fetch-Site: same-origin' \
\ -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36' \
\ -H 'X-Requested-With: XMLHttpRequest' \
\ -H 'requestMenuUri: /lt645/result' \
\ -H 'sec-ch-ua: "Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"' \
\ -H 'sec-ch-ua-mobile: ?0' \
\ -H 'sec-ch-ua-platform: "macOS"' \

동행 복권 전체 당첨번호 확인
ChatGPT, Claude, Gemini 어는 AI 툴이든 상관없다. 이제 계획을 수립해야 한다.
구글 스프레드시트로 동행복권 당첨번호를 조회해서 시트에 저장하고,
당첨번호의 빈도를 찾아서 추천하는 것과 랜덤으로 추천을 해주는 프로그램을 구글 앱스 스크립트로 작성할 수 있을까?
이를 진행하기 위해 내가 준비해야 하는 것을 알려줘
이렇게 요청을 하면 내가 받은 답변은 다음과 같다.
1. Google 계정 및 스프레드시트
Google 계정이 있으면 됩니다 (이미 보유하고 계실 겁니다)
새 Google 스프레드시트를 생성
2. Apps Script 편집기 접근
스프레드시트에서 확장 프로그램 > Apps Script 메뉴로 진입
별도 설치나 API 키 발급이 필요 없습니다
3. 시트 구조 설계 (권장)
스프레드시트에 다음과 같은 시트들을 미리 만들어 두면 좋습니다:
당첨번호: 역대 당첨번호 저장용
빈도 분석: 번호별 출현 빈도 집계용
추천번호: 생성된 추천번호 기록용
- 현재 최신 회차 확인
현재 최신 회차는 1206회 (2026년 01월 10일 추첨)입니다
1회부터 최신 회차까지 데이터를 수집하게 됩니다
우선 setup.sh 프로그램을 활용해서 Google Sheet 프로젝트로 하나를 만든다.
그렇게 되면 자동으로 1번, 2번은 완료가 된다. 새로 생성된 스프레드시트에 시트를 추가한다.
모든 준비가 완료되었다. 이제 생성된 프로젝트를 Antigravity로 열고 다음 프롬프트를 실행시켜본다.
이 글을 읽는 사람들 중 일부는 한 번에 성공할 수도 있고, 그렇지 않을 수 있다.
Google Apps Script로 구글 시트에 로또 6/45 당첨번호 분석 + 추천 시스템을 만들어줘.
해야 할 일:
1. 동행복권 API로 당첨번호 전체 수집해서 시트에 저장
2. 저장된 데이터로 번호(1~45) 출현 빈도 분석
3. 추천번호 생성
• 빈도 기반 추천 5세트
• 랜덤 추천 5세트
4. 시트에 커스텀 메뉴(예: “로또 분석”) 만들고, 메뉴에서 실행되게 해줘
• 당첨번호 업데이트
• 빈도 분석
• 추천번호 생성
• 전체 실행(업데이트→분석→추천)
• 주 1회 자동 실행 트리거도 메뉴에서 만들고/삭제할 수 있게 해줘(중복 생성 방지)
시트는 3개를 자동 생성해줘(이름 고정):
• 당첨번호
• 빈도분석
• 추천번호
주의사항
• 당첨번호 수집이 완료되고 나서 빈도분석이 이루어져야 하고, 빈도분석 결과를 기준으로 추천번호가 나와야 해. 순서를 반드시 지켜야 해
API 호출은 아래 curl과 동일한 엔드포인트 기준으로 구현해줘:
curl -s 'https://www.dhlottery.co.kr/lt645/selectPstLt645Info.do?srchLtEpsd=all' \
-H 'AJAX: true' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'Accept: application/json, text/javascript, */*; q=0.01'
마지막으로, 작업이 끝나면 커밋하고 푸시해줘
결과 확인은 시트에서 직접 수행해 보면 된다.

Antigravity - 수행 결과
나의 경우는 한 번에 안되었는데 다음과 같은 오류가 발생했다.
1차 시도 결과 - 실패

오류 발생
오류 내용을 그대로 다시 Antigravity에 전달한다. 그러면 알아서 수정하고, 커밋 푸시를 한다.
조회를 하는데, POST를 사용해서 GET으로 변경했다고 한다. 별로 궁금하지는 않으니, 다시 스프레드시트에서

Antigravity - 수정 사항
2차 시도 결과 - 실패
정상적으로 수행이 되었는데, 시트에 데이터가 한 건도 나타나지 않았다.

2차 실행 결과 - 빈 결과

Antigravity - 수정 내용
3차 시도 결과 - 성공

당첨번호 수집

빈도 분석

추첨번호 생성

로또 분석 메뉴
이 내용을 기준으로 더 많은 것을 할 수 있을 것이다. 비슷한 방식으로 웹앱까지 만들어보고 싶다면 웹앱 만들기 칸반 보드를 참고하고, 좀 더 실무에 가까운 프로젝트가 궁금하면 재고 관리 시스템 만들기 (상품 마스터 등록)도 함께 보자.
확률적으로는 큰 의미는 없겠지만 추천번호 생성을 고도화하거나, 실제 온라인 구매로 이어지게 하면 내 생활이 편해지지 않을까? 생각해 본다.
하나씩 하나씩 진행해 보자.
마지막으로 지금까지 실패를 경험 삼아 프롬프트 개선을 요청했다. 나의 실패를 밑거름으로 이 글을 읽으시는 분들은 한방에 성공하시길 기대해 본다.

프롬프트 개선 요청하기
Google Apps Script로 로또 6/45 당첨번호 분석 및 추천 시스템을 만들어줘.
### 1. 기능 요구사항
1. **데이터 수집**
- 동행복권 API를 호출하여 전체 회차 당첨번호를 가져와 '당첨번호' 시트에 저장 (기존 데이터 덮어쓰기).
- **API 요청 방식**: `GET` 메서드 사용 (필수).
- **API 엔드포인트**: `https://www.dhlottery.co.kr/lt645/selectPstLt645Info.do?srchLtEpsd=all`
- **헤더**: `AJAX: true`, `X-Requested-With: XMLHttpRequest`, `User-Agent: (적절한 브라우저 값)`
- **JSON 파싱 주의**: 응답 데이터는 `{"data": {"list": [...]}}` 형태의 중첩 구조일 수 있으므로, `data.list` 필드를 확인하여 배열을 추출하는 로직을 반드시 포함할 것.
2. **빈도 분석**
- '당첨번호' 시트의 데이터(1~45번)를 바탕으로 번호별 출현 빈도를 계산.
- '빈도분석' 시트에 [번호, 당첨횟수, 순위, 확률] 컬럼으로 저장 (내림차순 정렬).
- **실행 순서**: 데이터 수집이 완전히 끝난 후 분석이 시작되도록 `SpreadsheetApp.flush()` 처리 필수.
3. **추천번호 생성**
- **빈도 기반(5세트)**: 출현 빈도를 가중치로 사용하여 랜덤 추출.
- **완전 랜덤(5세트)**: 1~45 무작위 추출.
- '추천번호' 시트에 누적 저장 (최신 생성분이 아래에 오도록).
4. **UI 및 자동화**
- 스프레드시트 상단 메뉴 "로또 분석" 추가 (하위: 업데이트, 분석, 추천, 전체 실행, 트리거 설정/삭제).
- 주 1회(예: 월요일 오전 9시) 자동 실행되는 트리거 생성/삭제 기능 구현.
### 2. 시트 구조 (자동 생성)
- **당첨번호**: [회차, 날짜, 번호1~6, 보너스]
- **빈도분석**: [번호, 당첨횟수, 순위, 확률]
- **추천번호**: [타입, 생성일시, 번호1~6]
### 핵심 주의사항
- API 호출 시 `curl`과 동일하게 **GET 방식**을 사용해야 "사용할 수 없는 주소" 에러를 피할 수 있음.
- API 응답이 빈 배열이거나 구조가 다를 경우를 대비해 예외 처리를 확실히 할 것.
- 작업 완료 후 Git 커밋 및 푸시 수행.
불러오는 중...