24시간 열려 있는 나의 운세 가게. 사주팔자 · 오늘의 운세 · 일일 타로 · MBTI 결합 해석을 담은 웹 앱입니다. 엽전으로 매일 조금씩 사서 보는 편의점 컨셉으로 만들었습니다. 빌드 도구 없이 순수 HTML/CSS/JS로 만들어져 어디서든 바로 실행됩니다.
🔗 배포 주소: https://gnuinu.github.io/saju/
# 아무 정적 서버로 열면 됩니다
python3 -m http.server 8000
# → http://localhost:8000 접속index.html을 브라우저에서 직접 열어도 동작합니다.
main 브랜치에 푸시하면 .github/workflows/deploy-pages.yml이 자동으로
엔진 테스트를 돌리고 GitHub Pages에 배포합니다. 테스트가 실패하면 배포되지 않습니다.
이 저장소는 Pages 설정이 완료되어 있습니다. 포크해서 쓰실 경우에만 아래가 필요합니다. Settings → Pages → Source를 GitHub Actions로 한 번 지정해 주세요. Actions의
GITHUB_TOKEN으로는 Pages 사이트를 새로 생성할 수 없어 (Resource not accessible by integration) 최초 1회는 수동 설정이 필요합니다.
| 기능 | 설명 | 과금 |
|---|---|---|
| 오늘의 운세 | 내 사주 × 오늘의 일진(간지) 조합으로 매일 달라지는 개인화 운세. 총운/재물/애정/직장/건강 + 행운 아이템 | 무료 |
| 내 사주 | 사주팔자 네 기둥, 일간 해설, 오행 밸런스, 십신, 대운(10년 주기), 12운성, 공망, 신살 | 무료 |
| 심층 사주 리포트 | 십신 상세 · 직업 · 연애 · 배우자성 · 올해 세운/현재 대운 | 🪙 20냥 (영구) |
| 주간 운세 | 7일 흐름 + BEST/주의 날짜 + 총평 | 🪙 10냥 (주 단위) |
| 일일 타로 | 메이저 아르카나 22장, 정/역방향 해석 | 1장/일 무료, 추가 🪙 5냥 |
| MBTI × 사주 | 16유형 × 일간 결합 해석, 시너지 점수 | 무료 |
| 궁합 보기 | 두 사주를 네 항목으로 비교. 총점·항목 점수는 무료 | 상세 풀이 🪙 30냥 (상대별 영구) |
| 용어 사전 | 화면의 한자어를 눌러 뜻풀이 확인 (40여 개) | 무료 |
| 음력 생일 입력 | 윤달 포함. 입력 즉시 양력 환산을 보여 줌 | 무료 |
| 영수증 공유 카드 | 오늘의 운세와 궁합을 편의점 영수증 이미지로 저장·공유 | 무료 |
손님은 엽전으로 계산합니다. 광고를 보거나 매일 출석 도장을 찍으면 엽전이 쌓입니다.
- 획득: 첫 방문 +30냥, 매일 출석 도장 +5냥, 광고 시청 +3냥 (일 3회)
- 사용: 주간 운세, 심층 리포트, 타로 추가 뽑기, 궁합 상세 풀이
- 충전/정기권: 계산대에 패키지 UI 준비됨 (결제 연동 전 "준비 중" 상태)
실제 서비스 전환 시 js/store.js의 두 함수만 교체하면 됩니다.
showRewardedAd(onComplete, onCancel)— 현재는 5초 카운트다운 데모 모달(AdPlaceholder). AdMob/카카오 AdFit 등 리워드 광고 SDK 호출로 교체.purchasePackage(pkgId, onSuccess, onFail)— 현재는 "준비 중" 안내. 인앱결제(IAP) 또는 PG 결제 모듈로 교체. 상품 정의는IAP_PACKAGES참조.
index.html 앱 골격 (온보딩·탭·모달)
css/style.css 밤하늘 테마 스타일 (모바일 우선)
js/saju.js 만세력 엔진 (간지·절기·십신·오행, 시드 RNG)
js/lunar.js 음양력 변환 (삭·중기 계산, 윤달 판정)
js/data.js 해석 콘텐츠 (일간 10종·오행·십신·운세 템플릿)
js/fortune.js 일별/주간 운세 생성 (결정적 시드 → 같은 날 같은 결과)
js/tarot.js 메이저 아르카나 22장 + 뽑기
js/mbti.js MBTI 16유형 × 사주 결합 해석
js/match.js 궁합 (일지·일간·오행·띠 4축 비교)
js/store.js 엽전·출석 도장·광고·결제 스캐폴딩 (localStorage)
js/receipt.js 영수증 공유 카드 (오늘의 운세 / 궁합 2종, Canvas)
js/app.js UI 로직
tests/test.js 엔진 검증 테스트 (node tests/test.js)
docs/ 다음 기능 구현 준비 문서
- 일주: 율리우스 적일 기반 60갑자 (2000-01-01 = 무오일 검증)
- 년주: 입춘 기준 / 월주: 절기(節氣) 기준 / 시주: 일간 기준 오자시두법
- 23시 이후 출생은 다음날 자시로 처리
- 절기: 태양 겉보기 황경을 직접 계산(Meeus 천문알고리즘 + ΔT 보정)해 절기 시각까지 구합니다. 근사식(壽星公式)을 쓰지 않으므로 입춘 등 경계일 출생도 정확합니다. 같은 날이라도 절기 시각 전후로 년주·월주가 갈리는 것까지 반영합니다.
- 한국 표준시 역사 반영: 표준자오선이 UTC+8:30이던 시기(1954-03-21
1961-08-09)와 서머타임 시행 기간(194851, 195560, 198788, IANA tz database 기준)에 따라 태양시 보정값을 30분 / 0분 / 90분으로 자동 조정합니다. 시주 정확도에 직결됩니다. - 대운: 양남음녀 순행 / 음남양녀 역행. 대운수는 순행이면 다음 절기까지, 역행이면 이전 절기부터의 일수를 3으로 나눠 산출합니다 (성별 필수)
- 배우자성: 남자는 재성(정재·편재), 여자는 관성(정관·편관) 기준
- 신살: 년지·일지의 삼합국 기준 도화·역마·화개, 일간 기준 천을귀인
- 12운성: 일간별 장생 지지에서 시작해 양간은 순행, 음간은 역행으로 열두 단계를 배정합니다.
- 공망: 60갑자를 열 개씩 여섯 순으로 나눌 때 남는 지지 두 개를 일주 기준으로 판정합니다.
- 궁합: 일지(배우자궁)·일간·오행·띠 네 축을 각 25점으로 봅니다. 지지는 삼합/육합/충/원진/육해를, 천간은 천간합/충/상생/상극/비화를 판정하고, 두 사주를 합쳤을 때의 오행 균형과 서로의 부족한 기운을 채워 주는 정도를 반영합니다.
- 음력: 삭(신월) 순간을 Meeus 49장으로 계산해 초하루를 정하고, "동지는 11월에 든다 / 중기 없는 달이 윤달" 규칙으로 달 번호와 윤달을 판정합니다. 한국 음력 기준인 KST(UTC+9)를 씁니다 (중국 음력은 UTC+8이라 가끔 하루 차이가 납니다). 설날·추석·윤달 실측 대조 및 1930~2030년 양력↔음력 왕복 변환으로 검증했습니다.
- 절기 시각은 저차항 급수를 쓰므로 실제와 수 분 차이가 날 수 있습니다. 날짜 판정에는 영향이 없고, 절기 순간 ±10분 이내 출생자만 영향을 받습니다.
- 균시차(眞太陽時)는 적용하지 않고 평균태양시를 씁니다 (국내 만세력의 통상 관례).
- 1930년 이전 출생은 지원하지 않습니다 (입력 범위 제한).
- 대운·세운 (10년 주기 운세) — 성별 기반 순행/역행
- 신살 (도화·역마·화개·천을귀인)
- 음력 생일 입력 (윤달 포함)
- 결과 공유 카드 (편의점 영수증 스타일 이미지)
- 궁합 보기 (두 사람 사주 비교)
- 12운성 · 공망
- 균시차(진태양시) 옵션
- 리워드 광고 SDK 연동
- 인앱결제/PG 연동 + 서버 측 재화 관리
- 푸시 알림 (아침 운세 알림) — 설계 완료, 백엔드 필요
node tests/test.js # 절기 정밀도·음력 변환·궁합·12운성·공망 등 164개 검증
⚠️ 본 앱의 운세·해석은 재미와 자기 이해를 위한 참고 자료입니다.