구글 앱스 스크립트로 만든 AI 로또 번호 추천 서비스 🍀

🎯 프로젝트 소개

저의 N잡 중 하나는 대박 복권집의 알바입니다. 연휴 때는 복권방에 사람이 정~~~말 많아요;;; 손님들이 줄서서 기다리는 동안 뭐라도 하면 덜 화나지 않을까 싶어서 이 앱을 생각하게 되었어요.

구글 앱스 스크립트를 활용해서, 사용자가 원하는 기준을 선택하면 AI가 로또 번호를 추천해주는 웹앱입니다. 무조건적인 랜덤이 아니라, 약간의 통계적 분석을 가미한 '합리적인(?)' 번호 추출을 목표로 했어요.

🛠️ 어떤 기능이 있을까?

사용자는 4가지 기준 중 원하는 항목을 골라서 로또 번호를 추천받을 수 있습니다.

✅ 균형잡힌 홀짝 비율 - 홀수와 짝수를 적절하게 섞어줍니다.
✅ 번호 구간 분배 - 1~45번 중 특정 범위에 너무 몰리지 않도록 분산합니다.
✅ 연속 번호 제한 - 연속된 번호가 지나치게 포함되지 않도록 조정합니다.
✅ 최근 당첨 번호 분석 - 최근 당첨 패턴을 참고하여 추천합니다.

이렇게 여러 기준을 조합해서, 나름대로 합리적인 로또 번호를 추천해줍니다. (물론 당첨을 보장하지는 않아요 😉)

🔥 개발 과정

🤔 로또 번호 추천 기준을 고민하다

다양한 AI 모델과 토론을 해봤어요. ChatGPT와 Claude, Genspark에게 로또 번호 생성 방식에 대해 조언을 구했죠. 와- 다양한 방식과 통계.. 때론 정반대의 기준이 가능하더라구요! 예를 들어, '최근에 자주 나온 번호가 또 나올꺼야!' vs '최근에 안 나온 번호니까 이제 나올때가 됐을꺼야!' 처럼요.

한국의 메시지 스크린 샷

10개의 통계 기준을 최종 4개로 줄이며 쉬운 기준으로 만들고 사용자 친화적인 설명으로 만들었어요. 결국 중요한 건 사용자가 이해할 수 있는 기준이니까요.

🖥️ 최근 당첨 번호 적용 방법

최근 당첨 번호를 반영하는 방식도 고민이 많았어요.

  • 웹 스크래핑을 할까? 하지만 HTML 분석이 필요하고 알 수 없는 파싱 모시기로 개발해야 된다는데... 시작부터 뭔소린지 모르겠음;;;

  • 수동 입력이 더 편할까? 고민 끝에, 동행복권 사이트에서 엑셀 파일을 다운로드해 구글 스프레드 시트로 가져오는 방법을 선택했어요. 의외로 심플!

👉 개발자가 아니라면 수동 입력이 더 쉬울 수 있다! (머리가 안 돼도 손이 있어서 다행이야~ 🤗)

🔄 반복적인 개발과 비개발자의 디버깅

클로드 무료 유저라 시간 제한에 자주 걸렸어요. 마침 연휴라서 매일 짬짬이 대화를 이어가서 큰 불편은 없었어요. 그리고 조금 더 많은 토큰을 사용해야 할 때는 젠스파크로 넘어가서 했답니다.
그러다보니 새 대화를 할 때마다 이전 코드를 복붙복붙 해줘야 하는 불편이 있었어요..

이래저래 코드를 여러 번 갈아엎고, 에러와 (혹은 비개발자의 무지와..) 싸우느라 꽤 시간이 걸렸어요. 비개발자로서 가장 어려웠던 점은 수정 코드가 어디에 들어가야 하는지 몰랐다는 것이었어요. 처음에는 클로드에게 전체 코드를 달라고 했는데, 몇 번 하다 보니 코드가 너무 길어져서 나중에는 저도 보기 힘들고, 심지어 클로드도 자동으로 두 부분으로 나눠주더라고요.
😅 그래서 결국 수정된 코드가 어디 앞, 어디 뒤에 들어가야 하는지 알려달라고 요청했어요.

한국어 문자 메시지의 스크린 샷

이렇게 하면서 수정하다 보니 코드의 구조가 조금(아주 쬐끔)은 더 이해가 되는 느낌이었어요.🎇

🎨 UI 디자인 고민

처음에는 "2030이 좋아할 만한 디자인"을 목표로 클로드에게 요청했어요. (동화님의 사례에서 배웠죠. 😎) 하지만 우리 복권방의 주 고객층이 50대 이상이라는 걸 깨닫고, 디자인 방향을 수정했어요. 보다 선명하고 알아보기 쉬운 UI로 변경하고, 추천 번호도 눈에 잘 띄도록 화려한 색상으로 변경했어요. 또, 하단에 주의사항 안내를 추가하여 신뢰도를 높였죠.

  • 처음 심플한 UI

파란색 배경을 가진 한국 신청서

  • 2030을 타겟으로 한 UI

    복권 선택 앱의 스크린 샷

  • 50대를 타겟으로 한 UI

한국 웹 사이트의 스크린 샷

(여러분의 원픽은 무엇인가요? 🙄)

최종 웹앱은 여기서 확인할 수 있어요 👉 로또 번호 추천

💻 주요 코드

사용한 코드는 **Google Apps Script (GAS)**로 작성되었으며, 서버리스 웹앱 형태로 동작합니다.

function generateLottoNumbers(selectedCriteria = []) {
  let numbers = Array.from({length: 45}, (_, i) => i + 1);
  let originalNumbers = [...numbers];
  let warning = '';
  
  const filters = {
    '홀짝비율': filterHolEvenBalance,
    '번호구간': filterNumberRangeDistribution,
    '연속숫자': filterPreventConsecutive,
    '최근트렌드': filterRecentTrend
  };
  
  selectedCriteria.forEach(criteria => {
    const filteredNumbers = filters[criteria](numbers);
    
    if (filteredNumbers.length < 6) {
      warning += `${criteria} 기준이 너무 제한적입니다. `;
      numbers = originalNumbers;
    } else {
      numbers = filteredNumbers;
    }
  });
  
  return {
    numbers: shuffleAndPickSix(numbers),
    warning: warning || null
  };
}

이 함수는 사용자가 선택한 기준에 맞게 필터링하고, 최종적으로 랜덤한 6개 번호를 뽑아줍니다.

웹앱은 간단한 HTML + JavaScript로 구성되어 있으며, 선택한 기준에 따라 Google Apps Script에서 로직을 실행하도록 구성했습니다.
(라고 쓰라고 서포터 GPTs가 알려줬어요. 😁)

📌 배운 점과 개선할 점

💡 배운 점

  • 사용자 친화적인 기준 & 사용자 연령대에 맞춘 UI 디자인을 정하는 것이 중요하다는 걸 깨달음.

  • 웹 크롤링이 부담스럽다면, 수동 입력도 충분한 대안이 될 수 있다!

  • 코드 수정 시 수정할 코드의 위치까지 함께 요청하면 코드를 익히는데 더 도움이 될 것 같다!

🚀 개선할 점

  • 모바일 반응형 디자인 개선하기 📱 (현재 모바일에서 제대로 작동하지 않아, 화면 크기에 맞게 조정 필요)

  • 동행복권 데이터를 자동으로 업데이트하는 기능 추가하기

  • 사용자 피드백을 반영해서 추천 기준 추가하기

🏆 마무리하며...

이 프로젝트가 로또 당첨 확률을 높여줄지는 모르겠지만, 적어도 랜덤 숫자보다 재미있고 신뢰도 높은(?) 번호를 추천해준다고 믿고 있습니다. 😆

혹시 관심 있으시면 직접 테스트해보세요! (단, 너무 믿고 올인하지는 마세요...😂)
👉 로또 번호 추천

10
5개의 답글

👉 이 게시글도 읽어보세요