먼저 밝혀둘 것
픽랩은 당첨 번호를 예측하지 않습니다. 로또는 매 회차 완전한 무작위이고, 지나간 회차의 통계는 다음 회차에 대해 아무것도 말해주지 않습니다. 어떤 조합을 고르든 1등 확률은 똑같이 1 / 8,145,060입니다. 이 문장은 앱을 열면 맨 위에 제일 먼저 나오도록 해뒀습니다 — 숨겨야 할 각주가 아니라 이 앱의 전제라서.
무엇을 하나
화면은 네 개입니다. 픽 생성에서 순수 무작위·빈도 가중·균형·핫·콜드 다섯 가지 방식 중 하나로 번호를 뽑습니다. 포함할 번호, 뺄 번호, 홀짝 비율, 번호합 구간 같은 조건을 걸 수도 있습니다.
데이터랩은 1회차부터 1,236회차까지의 실제 당첨 기록을 펼쳐 보여줍니다. 번호별로 몇 번 나왔는지, 홀짝 구성은 어떻게 갈리는지, 번호합은 어느 구간에 몰리는지. 균등성 검정(카이제곱 p-value 0.965)도 같이 보여주는데, 이 값이 말하는 건 하나입니다 — 이 추첨은 균등하다. 어느 번호도 특별하지 않다는 뜻입니다.
eLAB은 모델 점수가 높은 조합을 역으로 찾아보는 실험 기능이고, 마이페이지는 뽑은 번호를 회차에 묶어 저장했다가 발표 뒤 몇 개 맞았는지 대조합니다.



아이디가 저장에만 필요한 이유
처음엔 로그인을 지나야 앱에 들어갈 수 있었습니다. 그런데 구경하러 온 사람에게 계정부터 만들라는 건 순서가 뒤집힌 요구라서, 로그인을 저장하는 순간으로 미뤘습니다. 번호를 뽑고 통계를 보는 데는 아무것도 필요 없고, 뽑은 번호를 회차에 남겨두고 싶을 때만 아이디를 정하면 됩니다. 저장을 누른 뒤 아이디를 만들면 하던 저장이 그대로 이어집니다.
비밀번호는 보안 장치가 아닙니다. 서버가 없어서 계정도 저장 번호도 전부 브라우저 안에만 있고, 같은 브라우저를 쓰는 다른 사람과 칸을 나누는 정도의 칸막이입니다. 기기를 옮기면 저장한 번호는 따라오지 않습니다 — 이 점도 화면에 그대로 적어두었습니다.
어떻게 만들었나
의존성도 빌드도 없이 파일 열두 개로 돌아갑니다. 통계 계산과 번호 생성은 전부 브라우저 안에서 끝나고, 저장 경계를 lotto-store.js 한 곳에 모아둬서 나중에 서버를 붙일 때 그 파일만 API 호출로 바꾸면 되도록 해뒀습니다.