계산 방식
원국은 틀리면 안 되는 값이에요. 그래서 쓰는 규칙을 전부 공개해요.
시간 보정
시계가 가리키는 시각과 해가 실제로 머리 위에 오는 시각은 달라요. 사주의 시주는 해의 위치로 정하는 것이라, 시계 시각을 그대로 쓰면 두 시간짜리 칸을 통째로 건너뛰는 일이 생겨요.
예를 들어 서울에서 오전 11시 20분에 태어났다면, 시계로는 11시를 넘겼지만 해로는 아직 10시 48분이에요. 그래서 오시(午時)가 아니라 사시(巳時)예요. 오시로 넘어가는 것은 시계로 11시 32분 무렵부터예요. 경계에 걸치는 시각에 태어났다면 이 32분이 시주 두 글자를 통째로 바꿔요.
- 진태양시 — 한국 표준시는 동경 135° 기준이지만 서울은 126.98°예요. 차이 8.02° × 4분 = 약 −32분. 출생 지역 경도로 시주를 판정해요. (부산 −24분, 광주 −33분)
- 표준시 변경 이력 — 1908.04~1911(UTC+8:30), 1912~1954.03.20(UTC+9), 1954.03.21~1961.08.09(UTC+8:30), 1961.08.10~현재(UTC+9)
- 서머타임 — 1948~1951, 1955~1960, 1987.05~1988.10 구간 출생자는 시계 시각에서 1시간을 뺀 뒤 계산해요.
네 기둥
- 년주 — 1월 1일도 설날도 아닌 입춘 절입 시각 기준이에요. 몇 시 몇 분까지 봐요.
- 월주 — 중기(우수·춘분)가 아니라 절(節) 12개 기준이에요.
- 일주 — 율리우스적일수(JDN) 기반 60갑자 모듈러 연산이에요.
- 시주 — 일간 기준 시두법. 진태양시로 보정한 시각으로 시지를 정해요.
야자시 정책
23:00~24:00 출생을 당일 자시로 볼지 다음날 자시로 볼지는 학파마다 달라요. 기본값은 다음날 자시이며, 입력 시트의 고급 설정에서 바꿀 수 있어요. 어떤 기준으로 계산했는지는 결과 화면의 "계산 근거"에 항상 표시돼요.
달이 1일에 바뀌지 않는 이유 — 절기
사주는 달력이 아니라 절기로 굴러가요. 한 해를 스물넷으로 나눈 것이 절기이고, 그중 홀수 번째 열둘을 절(節)이라 해요. 사주의 달은 이 절이 드는 순간에 바뀌어요 — 1일도 초하루도 아니에요.
입춘·경칩·청명·입하·망종·소서·입추·백로·한로·입동·대설·소한 열둘이 그것이에요. 2월 3일생과 2월 5일생이 서로 다른 해, 다른 달을 쓰게 되는 것도 그 사이에 입춘이 들기 때문이에요.
중기(우수·춘분·곡우…)는 달을 가르지 않아요. 절기 스물넷을 다 쓰는 것이 아니라 그중 열둘만 쓰는 것이라, ‘절기 기준’이라는 말만으로는 부족하고 절 기준이라 적어야 정확해요.
60갑자는 왜 60인가
천간이 열이고 지지가 열둘이에요. 둘을 짝지어 한 칸씩 돌리면 甲子·乙丑·丙寅…으로 나아가는데, 열과 열둘의 최소공배수가 60이라 예순 번 만에 처음 자리로 돌아와요. 그래서 간지는 120가지가 아니라 60가지예요.
甲子에서 시작해 癸亥로 끝나며, 甲과 子가 둘 다 양(陽)이라 양간은 양지와, 음간은 음지와만 짝이 돼요. 甲丑 같은 조합이 없는 이유예요. 환갑(還甲)이 예순한 번째 생일인 것도 태어난 해의 간지가 그때 처음 돌아오기 때문이에요.
날의 간지도 같은 예순 칸을 끊김 없이 돌아요. 사주플로우는 이 날짜 계산을 율리우스적일수(JDN)로 해요 — 달력이 바뀌든 윤년이 끼든 «며칠째인가»는 하나의 정수라, 거기서 60으로 나눈 나머지를 취하면 어긋날 데가 없어요.
태어난 시각을 모를 때
여덟 글자 중 둘이 시주예요. 시각을 모르면 그 둘을 채울 수 없어요. 이때 흔히 쓰는 방법이 «대충 정오로 넣기»인데, 그러면 나오지 않은 값이 나온 값처럼 보여요.
사주플로우는 시주를 비운 채로 여섯 글자만 계산해요. 화면에도 빈 자리로 표시하고, 시주가 있어야 나오는 값(시주 기준 신살 등)은 아예 내놓지 않아요. 대신 열두 시진을 각각 넣었을 때 무엇이 어떻게 달라지는지 나란히 보여 드려요 — 기억을 더듬어 «오후였다» 정도만 알아도 범위가 좁혀져요.
음력으로 넣을 때
음력 생일로 넣으면 먼저 양력으로 바꾼 뒤 계산해요. 사주는 해의 위치로 굴러가는 체계라 음력 날짜 자체로는 간지가 나오지 않기 때문이에요.
윤달은 따로 표시해 주셔야 해요. 윤5월 10일과 5월 10일은 양력으로 한 달쯤 떨어진 다른 날이고, 그 사이에 절기가 들면 월주가 달라져요. 입력 시트에서 음력을 고르면 윤달 스위치가 함께 나오고, 고른 달에 그 해 윤달이 실제로 있는지도 그 자리에 적어 드려요.
변환은 한국 음력 기준이에요. 한국과 중국은 초하루를 서로 자기 표준시로 재기 때문에 달이 하루씩 어긋나는 해가 있고, 드물게는 윤달 자리까지 갈려요 (2012년 — 한국 윤3월, 중국 윤4월). 1900~2049년 전 구간을 한국천문연구원 자료 기반 대조표와 맞대어 확인했어요.
절기 시각의 출처
절기 시각은 한국천문연구원이 공공데이터포털로 내주는 값을 그대로 써요 (2000년 이후). 그 밖의 해는 천문 계산 라이브러리(lunar-javascript)로 내요. 두 값을 695건 맞대어 보니 열에 아홉은 분까지 똑같고 나머지도 1분 안에 들어왔어요 — 계산으로 낸 해도 믿을 만하다는 뜻이에요. 다만 절입 경계 1~2분에 걸치는 시각이라면 결과가 달라질 수 있어요. 어느 쪽에서 나온 시각인지는 결과 화면의 계산 근거에 그대로 적어 둬요.
해석 문장에 대하여
현재 결과 화면의 "원국 요약"은 AI가 쓴 글이 아니에요. 일간·격국· 오행 편중·강약처럼 계산으로 확정된 사실에 고정 설명을 붙인 것이며, 같은 원국이면 언제나 같은 문장이 나와요. 궁합 점수도 마찬가지로 공개된 가중치만 사용해요.
개인 맥락에 맞춘 풀이는 이후 별도 기능으로 추가될 예정이에요.
쓰인 재료와 출처
계산 규칙(십신·십이운성·격국·시두법 등)은 수백 년 이어져 온 전통 명리학의 공통 규칙이며, 화면의 설명 문장은 이 서비스가 새로 쓴 것이에요.
- · 절기·공휴일 시각 — 한국천문연구원, 공공데이터포털
- · 음력 변환 — korean-lunar-calendar (MIT, 한국천문연구원 자료 기반)
- · 천문 계산 — lunar-javascript (MIT)
- · 표준시·서머타임 이력 — tz database
- · 타로 그림 — 이 앱에서 직접 그린 선 그림이에요. 카드의 뜻과 그림 설명은 라이더-웨이트 카드(1909, 저작권 만료)를 따라요
- · 글꼴 — Pretendard · 고운바탕 · IBM Plex Mono (SIL 오픈 폰트 라이선스)
- · 바탕 기술 — Next.js · React (MIT)
- · 캐릭터 그림 — Grok Imagine으로 제작
오픈소스와 공공데이터가 없었으면 못 만들었을 서비스예요. 각 라이브러리의 라이선스 전문은 이름으로 검색하면 나오는 저장소에 있어요.
용어가 어렵다면
사주 용어는 한자라서 처음 보면 낯설어요. 결과 화면의 한자에는 한글 독음을 함께 적었고, 용어 옆 물음표를 누르면 그 자리에서 뜻을 볼 수 있어요. 전체 목록은 용어 사전에 있어요.
검증
일주 30건·월주 20건을 독립 구현과 교차 대조하고, 입춘 경계·서머타임·표준시 변경·야자시·음력 윤달 변환·없는 날짜 거부를 포함한 1,308건의 자동 테스트를 통과한 상태로만 배포해요.
그림에 대하여
손 그림·타로 그림·오행 도표·태극 마크는 코드로 그린 그림(SVG)이에요. 좌표가 전부 소스에 있어 화면 크기가 달라져도 흐려지지 않아요.
첫 화면의 캐릭터는 생성형 AI(Grok Imagine)로 만든 그림을 배경만 지워 다듬은 것이에요. 사람이 그린 것이 아니라고 적어 두는 편이 맞다고 봤어요 — 이 서비스는 계산 근거를 전부 밝히는 것을 원칙으로 하는데, 그림만 예외로 둘 이유가 없어요.