사주 · 만세력
계산 기준과 검증 결과
풍지관의 사주 계산은 AI 없이, 전통 규칙과 천문 계산만으로 합니다. 같은 입력이면 언제나 같은 결과가 나옵니다. 다른 만세력과 결과가 다를 때 어디서 갈리는지 알 수 있도록 쓰는 기준을 모두 적었습니다.
1. 네 기둥을 세우는 법
- 연주 — 해가 바뀌는 때는 설날도 양력 1월 1일도 아닌 입춘 절입 순간입니다. 입춘 전에 태어나면 전해의 간지를 씁니다. 간지 번호는 (사주 연도 − 4) ÷ 60의 나머지입니다.
- 월주 — 달이 바뀌는 때는 12절(소한·입춘·경칩·청명·입하·망종·소서·입추·백로·한로·입동·대설)의 절입 시각입니다. 월지는 입춘부터 인·묘·진…, 월간은 오호둔(五虎遁: 갑·기년 병인월, 을·경년 무인월, 병·신년 경인월, 정·임년 임인월, 무·계년 갑인월)으로 정합니다.
- 일주 — 달력 날짜의 율리우스 일수로 60갑자를 돌립니다. 2000년 1월 1일이 무오일입니다. 날짜는 자정(0시)에 바뀝니다. 23시대(자시)만 아래 3번 설정을 따릅니다.
- 시주 — 2시간씩 12시진(자 23~01시, 축 01~03시 …)이며, 시간은 오서둔(五鼠遁: 갑·기일 갑자시, 을·경일 병자시, 병·신일 무자시, 정·임일 경자시, 무·계일 임자시)으로 정합니다.
2. 절기(절입 시각) 데이터
1899~2101년의 24절기를 태양의 겉보기 황경(장동·광행차 반영)이 15도씩 넘어가는 순간으로 직접 계산해 표(data/saju/solar_terms.php)로 두었습니다. 입춘은 315도, 춘분은 0도입니다. 한국 천문연구원 발표처럼 가장 가까운 분으로 반올림해 쓰고, 출생 시각이 절입과 같은 분이면 절입 이후로 봅니다.
| 검증 | 결과 |
|---|---|
| 한국천문연구원 특일 정보(공공데이터)를 인용한 공개 자료와 대조 — 2021·2025·2026·2027년 27개 절기 | 27건 모두 분 단위 일치 (2021년 입춘 23:59 포함) |
| 외부 만세력 라이브러리 2종(lunar-python, manseryeok)과 4,800여 개 절입 시각 대조 | 1900~2029년은 약 89%가 분 단위까지 같고 나머지는 ±1분(반올림 경계). 2030년 이후는 지구 자전 예측(ΔT)의 불확실성으로 최대 1분 가까이 벌어집니다 |
절입 시각 3분 이내에 태어나신 경우에는 결과 화면에 경계 안내를 띄웁니다. 먼 미래의 절입은 예측값이므로 2030년 이후 날짜는 참고용입니다.
3. 출생 시각 — 당시 시계를 기준으로
입력하신 시각은 그때 한국의 법정 시계로 보고, 먼저 세계 표준시(UTC)의 한 순간으로 바꾼 뒤 절기와 비교합니다. 한국의 표준시는 몇 차례 바뀌었습니다.
| 기간 | 표준시 |
|---|---|
| 1912.1.1 ~ 1954.3.20 | UTC+9 (동경 135°) |
| 1954.3.21 ~ 1961.8.9 | UTC+8:30 (동경 127.5°) |
| 1961.8.10 ~ | UTC+9 |
| 서머타임(+1시간) | 1948~1951년 · 1955~1960년 · 1987~1988년 |
IANA 시간대 자료(Asia/Seoul)를 씁니다. 이 서버의 시간대 자료 버전은 0.system입니다. 1912년 이전 출생은 기록이 달라 몇 분 어긋날 수 있고, 시계가 건너뛰거나 되돌려진 시각을 입력하면 알려 드립니다.
시간 보정 (기본은 출생지 경도 보정)
진태양시는 출생지의 실제 태양 위치로 맞춘 시각입니다. UTC + 출생지 경도 ÷ 15시간(서울은 동경 126.98°라서 법정 시각보다 약 32분 늦음)이고, ‘경도 + 균시차’를 고르면 지구 공전 때문에 생기는 ±16분 안팎의 균시차(Spencer 근사식, 오차 ±35초)를 더합니다. UTC에서 바로 환산하므로 1954~61년의 UTC+8:30이나 서머타임도 따로 신경 쓰지 않아도 맞습니다. 연주·월주는 천문 순간으로 정하므로 경도와 무관하고, 일주·시주만 영향을 받습니다.
기본은 ‘출생지 경도 보정’입니다. 국내 만세력 앱 상당수가 서울 기준 약 30분을 빼어 시주를 정하기 때문에 같은 결과가 나오도록 맞추었습니다(예: 05:00 출생은 04:27 로 보아 寅시). 균시차까지 더할지, 법정 시각 그대로 쓸지는 ‘더 보기’에서 고를 수 있고, 선택에 따라 달라지는 경우에는 결과 화면에서 따로 알려 드립니다. 다만 앱마다 보정 분(30분 고정, 32분 등)이 달라 경계 시각 근처에서는 결과가 갈릴 수 있습니다.
4. 자시(23~24시) 처리
| 설정 | 23시대의 일주 | 23시대의 시주 천간 |
|---|---|---|
| 야자시 (기본) | 당일 | 다음 날 일간 기준 |
| 자정 교체 | 당일 | 당일 일간 기준 |
| 자시초 교체 | 다음 날 | 다음 날 일간 기준 |
23시대에 태어난 경우에만 영향이 있고, 그때는 세 가지 결과를 한 화면에 모두 보여 드립니다.
5. 음력과 윤달
음력표(data/saju/lunar_months.php)는 합삭(새달)과 중기를 천문 계산해 직접 만들었고, 1900~2100년을 지원합니다. 규칙은 한국 음력과 같습니다.
- 달의 첫날은 합삭이 든 날이며, 날짜는 그 당시 한국 표준시(서머타임 제외)로 정합니다.
- 동지가 든 달이 11월이고, 중기(우수·춘분·곡우·소만·하지·대서·처서·추분·상강·소설·동지·대한)가 든 달의 번호를 그 중기가 정합니다.
- 한 11월에서 다음 11월 사이가 13개월이면 중기가 없는 첫 달이 윤달이며 앞 달의 번호를 이어받습니다. 2033년의 윤11월처럼 동지가 든 달 다음에 윤달이 오는 해도 같은 규칙으로 처리합니다.
- 표준시는 1912년 이전 UTC+8, 1912~1954.3.20 UTC+9, 1954.3.21~1961.8.9 UTC+8:30, 이후 UTC+9입니다. 1912년 이전은 한국천문연구원 음양력 자료와 맞추어 보고 정한 기준입니다(UTC+9로 두면 1903~1911년의 5개월이 어긋납니다).
| 검증 | 결과 |
|---|---|
| 한국천문연구원 음양력 API 기준 외부 자료와 날짜별 대조 — 양력 1900-01-01 ~ 2049-12-31 (54,787일) | 전부 일치 (윤달 위치·달의 크기 포함, 1,855개월) |
| 2050~2100년 | 한국천문연구원 자료가 없는 구간입니다. 같은 계산을 중국 시간대(UTC+8)로 바꾸면 외부의 천문 계산 자료와 2개월을 뺀 전부가 일치해 계산 자체는 같음을 확인했고, 풍지관은 한국 시간대(UTC+9)로 계산합니다. 그래서 중국 음력과는 26개월이 다릅니다 |
음력 입력은 윤달 여부를 직접 고르게 합니다. 그 해에 윤달이 있으면 화면이 몇 월인지 알려 드립니다.
6. 십성 · 지장간 · 12운성
십성은 일간과 다른 글자의 오행 관계(같음·내가 생함·내가 극함·나를 극함·나를 생함)와 음양이 같은지 다른지로 정합니다. 지지는 정기(본기) 천간으로 봅니다.
지장간(사령분일, 합 30일)
| 지지 | 여기 | 중기 | 정기 |
|---|---|---|---|
| 子 자 | – | 壬 임 10일 | 癸 계 20일 |
| 丑 축 | 癸 계 9일 | 辛 신 3일 | 己 기 18일 |
| 寅 인 | 戊 무 7일 | 丙 병 7일 | 甲 갑 16일 |
| 卯 묘 | – | 甲 갑 10일 | 乙 을 20일 |
| 辰 진 | 乙 을 9일 | 癸 계 3일 | 戊 무 18일 |
| 巳 사 | 戊 무 7일 | 庚 경 7일 | 丙 병 16일 |
| 午 오 | 丙 병 10일 | 己 기 9일 | 丁 정 11일 |
| 未 미 | 丁 정 9일 | 乙 을 3일 | 己 기 18일 |
| 申 신 | 戊 무 7일 | 壬 임 7일 | 庚 경 16일 |
| 酉 유 | – | 庚 경 10일 | 辛 신 20일 |
| 戌 술 | 辛 신 9일 | 丁 정 3일 | 戊 무 18일 |
| 亥 해 | 戊 무 7일 | 甲 갑 7일 | 壬 임 16일 |
자·묘·유는 둘, 나머지는 셋이며, 오(午)는 병·기·정 세 글자로 보는 『연해자평』 계통을 따랐습니다. 학파에 따라 오(午)를 기·정 둘로만 보기도 합니다.
12운성
천간별 장생 자리: 甲→亥 · 乙→午 · 丙→寅 · 丁→酉 · 戊→寅 · 己→酉 · 庚→巳 · 辛→子 · 壬→申 · 癸→卯. 양간은 순행, 음간은 역행(양생음사)합니다. 장생·목욕·관대·건록·제왕·쇠·병·사·묘·절·태·양 순서입니다.
공망
일주가 속한 60갑자의 순(旬, 10일)에서 짝을 얻지 못한 두 지지입니다. 예를 들어 갑자순은 술·해가 공망입니다.
7. 대운 · 세운 · 월운
- 순행·역행 — 양년생 남자·음년생 여자는 순행, 음년생 남자·양년생 여자는 역행합니다. 연간의 음양은 입춘으로 정한 사주 연도의 천간입니다.
- 대운수 — 순행은 출생 후 다음 절, 역행은 출생 전 직전 절까지의 일수를 3으로 나눕니다(3일=1년, 1일=4개월). 대운수는 반올림한 정수이고, 시작 시점은 년·개월·일로 환산한 정확한 값을 씁니다.
- 대운 간지 — 월주에서 순행은 다음 간지, 역행은 이전 간지로 10년마다 한 칸씩 갑니다.
- 세운·월운 — 그 해와 그 달의 간지를 일간 기준 십성으로 나타냅니다. 해는 입춘, 달은 절입에서 바뀝니다.
8. 엔진 검증 결과
| 대조 내용 | 건수 | 결과 |
|---|---|---|
| 연·월·일·시주 — 절입 전후 1~5분, 자시, 서머타임, 1954~61년 UTC+8:30, 무작위 1900~2100년 | 5,618 | 절입 정각(같은 분 이후 0~1분) 구간을 뺀 4,570건 전부 일치 |
| 절입 정각 0~1분 구간 | 1,048 | 연주 30건·월주 245건 차이 — 같은 분을 절입 이후로 보느냐, 초 단위 시각과 비교하느냐의 차이입니다. 풍지관은 분 단위로 반올림한 절입 시각 이후로 봅니다 |
| 십성·12운성(천간 십성 2,400, 지지 십성 3,200, 12운성 3,200) | 800명분 | 전부 일치 |
| 대운 방향·첫 두 대운 간지·대운수(년·개월) | 600 | 600건 모두 일치. 대운 시작의 ‘일’ 환산은 32건이 학파별 환산 차이로 달랐습니다 |
검증 기준은 외부 만세력(lunar-python)이고, 절기 자체는 한국천문연구원 공공데이터와 따로 대조했습니다. 엔진을 고칠 때마다 이 표본이 자동으로 다시 돌아갑니다(tests/run.php).
풀이 규칙
격국은 자평진전의 방식(월지 지장간 중 천간에 투출한 것, 없으면 정기, 정기가 비견·겁재면 건록·양인·월겁격)으로 가립니다. 신강·신약은 자리별 비중(연간 8·월간 12·시간 12·연지 8·월지 30·일지 15·시지 15)에 지장간 일수를 나누어 일간을 돕는 십성(비견·겁재·인성)의 점수를 합산하며, 55% 이상 신강, 45~55% 중화, 45% 미만 신약입니다. 결과에서 계산표를 모두 볼 수 있습니다. 문구는 rules.csv의 규칙 99개에서 조건이 맞는 것만 골라 이으며, 문장마다 규칙 번호와 출처 고전을 붙입니다. 모두 초안이며 감수 전입니다.
조후용신은 궁통보감의 일간×월지 표(120칸)에서 주용신과 보조 글자를 찾아, 원국의 천간에 드러났는지·지장간에만 있는지·없는지를 판정합니다. 표는 서로 다른 두 정리 자료를 대조해 만들었고, 일치하지 않는 칸(壬일 辰월)은 화면에 그 사실을 밝힙니다. 원문과의 대조는 감수 단계에서 확인합니다.
9. 아직 하지 않는 것
- 격국·용신·신강 신약, 십성 풀이 — 고전 원문(자평진전·적천수·궁통보감 등)에 근거한 규칙 자료를 감수하며 만든 뒤 붙입니다. AI가 문장을 지어내지 않고, 규칙마다 출처 구절을 달 계획입니다.
- 신살(천을귀인·도화·역마 등) — 후대에 덧붙은 민속적 요소가 많아 보조 정보로만 다룰 예정입니다.