연구·해설

직접 만세력을 만들면서 실제로 틀렸던 계산 10가지

작성자: 청명헌 2026. 9. 21. 09:57

직접 만세력을 만들면서 실제로 틀렸던 계산 10가지

만세력을 만들며

 

만세력을 직접 만들기 시작했을 때는 공식만 정확히 옮기면 금방 끝날 일이라고 생각했습니다.

 

개발해 보니 전혀 달랐습니다. 연주를 몇 월 며칠 몇 시에 바꿀지, 월주 경계를 날짜로 볼지 시각까지 볼지, 시주 보정값을 어느 계산에 넣을지처럼 경계에 걸린 처리가 계속 말썽을 일으켰어요. 처음에는 생년월일 몇 개만 넣어 보고 정상으로 나오는 값이 많아서 거의 끝났다고 여기기도 했습니다.

 

오류가 되풀이되자 검증 방식을 바꿨습니다. 2026년 1월 1일 00시 00분부터 12월 31일 23시 59분까지를 1분 단위로 잘라 52만 5,600개의 출생시각을 만들고, 제가 실제로 헷갈렸던 계산을 하나씩 다시 넣어 정상 계산과 전부 대조했습니다. 아래는 그렇게 드러난 열 가지 오류입니다.

 

첫 실행에서 연주가 1월 1일에 바뀌었습니다

처음 짠 연주 계산은 일반 달력의 연도와 거의 같은 방식이었습니다. 2026년이 시작되면 바로 丙午년으로 넘어가게 하면 코드가 단순해지니까요. 첫 번째 오류가 여기서 나왔습니다. 사주의 연주는 1월 1일이 아니라 입춘을 경계로 바뀝니다.

 

2026년 입춘은 2월 4일 오전 5시 2분이고, 한국천문연구원이 공개한 2026년 달력자료에서도 같은 시각을 확인할 수 있습니다.

 

2월 4일 오전 5시 1분까지는 乙巳년이고, 오전 5시 2분부터 丙午년입니다.

 

연주 경계를 입춘 시각으로 고친 뒤 1년 전체를 다시 돌렸습니다. 1월 1일에 연주를 미리 바꿨다고 가정한 계산은 정상 계산과 달라지는 구간이 34일이 넘었고, 1년의 약 9.4%에 해당했습니다. 설날을 경계로 쓰는 방식도 같이 확인했는데, 2026년 설날이 2월 17일이라 입춘에서 설날까지 약 12일 동안 다른 연주가 나왔습니다. 날짜가 같아도 입춘 전후 1분 사이에 연주가 갈리니 연도 숫자나 음력 설날만으로는 처리할 수 없는 부분이었습니다.

 

월주를 고치자 서로 다른 오류가 세 번 연달아 나왔습니다

두 번째 오류는 양력의 월을 그대로 월주에 대응시킨 계산이었습니다. 2월은 寅월, 3월은 卯월처럼 달력의 월이 바뀌는 순간 사주의 월도 바뀌게 만든 것입니다. 이 방식과 절입시각을 쓰는 방식을 2026년 52만 5,600분 전체에서 비교하자 월주가 달라지는 시간이 약 18.7%, 거의 1년의 5분의 1이었습니다.

 

2026년 경칩은 3월 5일 22시 59분입니다. 3월 5일 낮에 태어났다는 이유만으로 새 월에 들어가는 게 아니고, 22시 58분까지와 22시 59분 이후의 월주가 서로 다릅니다. 그래서 양력 월을 버리고 절입 날짜를 넣었습니다. 입춘은 2월 4일, 경칩은 3월 5일, 청명은 4월 5일처럼 날짜를 맞췄으니 이번엔 해결됐다고 생각했죠.

 

세 번째 오류는 절입의 날짜만 맞추고 시각을 0시로 처리한 것이었습니다. 2026년의 12개 월 경계를 전부 대조하니 이 방식으로 잘못되는 시간이 합계 10,336분이었습니다. 가장 큰 차이는 백로에서 나왔습니다. 2026년 백로는 9월 7일 23시 41분인데 날짜만 쓰면 0시부터 이미 다음 월로 넘어가 버립니다. 실제 절입시각을 적용하면 밤 11시 41분까지 기다려야 하니 그날 1,440분 가운데 1,421분이 달라졌습니다. 반면 망종은 6월 6일 00시 48분이라 같은 실수의 영향이 48분뿐이었어요. 로직 오류는 같아도 절입이 몇 시에 들어오느냐에 따라 오답 구간이 이만큼 달랐습니다.

 

시각까지 반영한 뒤에는 24절기 목록을 다시 연결했고, 여기서 또 문제가 생겼습니다.

 

네 번째 오류는 24절기가 바뀔 때마다 월도 하나씩 바뀌게 만든 계산이었습니다. 소한, 대한, 입춘, 우수, 경칩, 춘분처럼 절기가 연달아 나오니 처음에는 모든 절기를 월의 경계로 취급해도 된다고 생각했습니다. 그대로 계산했더니 2026년 전체의 약 92%에서 월주가 정상 계산과 달랐습니다. 소한에서 丑월로 넘어간 뒤 대한이 온다고 월이 다시 바뀌지는 않고, 그다음 월 경계는 입춘입니다. 월주 계산에서는 절기 이름을 전부 읽는 것과 실제로 월 경계로 쓰는 절기를 구분해야 했습니다.

 

일주 기준값은 하루만 틀려도 365일이 함께 밀렸습니다

월주를 고친 다음에는 일주를 따로 검산했습니다. 이 부분에서는 작은 오차가 다음 경계에서 저절로 복구되지 않았습니다.

 

다섯 번째 오류는 일주의 기준일을 하루 잘못 잡은 경우였습니다. 60개의 간지가 하루씩 계속 순환하기 때문에 기준이 하루 어긋나면 그 뒤의 값도 한 칸씩 계속 밀립니다. 기준을 하루 잘못 잡은 계산과 정상 계산을 비교하니 2026년 365일 전체가 달랐습니다. 몇 날짜만 확인하면 값이 규칙적으로 나와서 오히려 정상처럼 보이기 쉬운 오류였습니다.

 

수정한 뒤에는 한국천문연구원이 공개한 실제 일진 자료와 따로 맞췄습니다. 예를 들어 2026년 음력 1월 1일인 2월 17일의 일진은 壬戌이고, 이후 음력 초하루들의 일진도 공개되어 있습니다. 한 지점만 맞추지 않고 여러 달의 값을 대조한 이유가 이것입니다.

 

시주 보정은 30분을 빼는 것으로 끝나지 않았습니다

현재 이 사이트는 시주를 계산할 때 출생시각에 30분 고정 보정을 적용합니다. 구현하는 동안 이 숫자 하나 때문에 두 종류의 오류가 연달아 나왔어요.

 

여섯 번째 오류는 30분 보정을 아예 빼먹은 경우였습니다. 2026년 전체를 다시 계산하니 시주가 달라지는 시간이 전체의 25%였습니다. 시주는 하루에 한 번 바뀌는 게 아니라 두 시간마다 경계가 반복됩니다. 각 경계에서 30분씩 어긋나는 구간이 하루 내내 생기니 하루의 4분의 1이 영향을 받은 거죠.

 

보정값을 넣은 뒤에도 결과가 이상해서 코드를 보니 빼야 할 30분을 더하고 있었습니다.

 

일곱 번째 오류는 -30분과 +30분의 부호를 반대로 넣은 경우였습니다. 정상 계산은 30분 앞쪽으로, 잘못된 계산은 30분 뒤쪽으로 움직이니 둘 사이에 총 한 시간 차이가 생깁니다. 52만 5,600분을 다시 대조하자 절반의 시간에서 시주가 달랐고 오답 비율은 정확히 50%였습니다. 두 시간짜리 시주 구간에서 한 시간만큼 서로 어긋난 결과였습니다.

 

한국 날짜와 세계표준시 날짜를 섞자 매일 아침이 전날이 됐습니다

시간대를 다루는 코드에서는 화면에 보이는 시각만 맞으면 된다고 생각하기 쉽습니다. 하지만 실제 계산에는 날짜 자체가 들어가서 다른 문제가 생겼습니다.

 

여덟 번째 오류는 세계표준시로 바꾼 뒤 그 날짜를 그대로 일주 계산에 사용한 경우였습니다. 한국시간 9월 20일 오전 1시는 세계표준시로는 9월 19일 오후입니다. 이때 세계표준시의 날짜인 ‘19일’을 그대로 쓰면 한국에서는 20일인데 계산기는 전날의 일주를 내놓습니다. 한국시간으로 매일 0시부터 오전 8시 59분까지가 여기에 들어가며, 하루의 37.5%였고 1년 전체로 확인해도 같은 37.5%였습니다.

 

화면의 시간이 9시간 어긋나는 정도로 끝나지 않았습니다. 날짜가 달라지면 일주가 달라지고, 일간이 바뀌면 시주의 천간까지 영향을 받을 수 있으니까요. 날짜 계산에 쓰는 기준과 표시용 시간대 변환을 분리한 뒤 다시 검산했습니다.

 

계산기를 검증하다가 예전에 쓴 글에서 아홉 번째 오류를 찾았습니다

프로그램을 계속 확인하다가 예전에 쓴 ‘출생시간을 모르면 사주는 어디까지 볼 수 있을까?’라는 글도 다시 읽게 됐습니다. 그 글은 출생 연월일이 정확하면 출생시간을 몰라도 연주·월주·일주와 월령을 확인할 수 있다는 취지로 설명했습니다. 대부분의 날에는 맞는 말인데, 2026년 365일을 실제로 하루씩 확인하니 예외가 나왔습니다.

 

아홉 번째 오류는 절입일에도 출생 날짜만 알면 월주를 하나로 확정할 수 있다고 본 설명이었습니다. 2026년 3월 5일의 경칩은 22시 59분입니다. 출생 날짜가 3월 5일이라는 것만 알고 시간이 없다면 22시 58분에 태어났는지 23시에 태어났는지 구분할 수 없으니 월주도 하나로 정해지지 않습니다. 입춘이 들어오는 2월 4일은 범위가 더 넓어서, 출생시간을 모르면 월주뿐 아니라 연주까지 달라질 수 있습니다.

 

이 예외를 확인한 뒤 2026년의 하루하루를 다시 1분씩 계산해서 같은 원국끼리 묶었습니다. 절입이 없는 날에는 예상대로 시주 12개에 따라 12가지가 나왔지만 절입일에는 후보 수가 달라졌습니다.

 

2026년 날짜 유형 날짜 수 출생시간을 전혀 모를 때 생기는 서로 다른 원국 후보
절입이 없는 날 353일 12가지
대부분의 절입일 10일 14가지
6월 6일·9월 7일 2일 13가지

 

2026년 365일 가운데 12일은 날짜만 알아서는 월주를 하나로 확정할 수 없었고, 전체 날짜의 약 3.3%였습니다. 같은 시주 구간 안에 절입이 들어오면 시주는 같아도 절입 전과 후의 월주가 달라지기 때문에 기존 12가지 후보에 새 조합이 더해집니다. 대부분의 절입일에는 14가지가 나왔고, 망종이 들어오는 6월 6일과 백로가 들어오는 9월 7일은 절입 위치가 달라 13가지였습니다. “출생시간을 모르면 시주만 없다”는 설명만으로는 보이지 않던 결과이고, 하루 1,440분을 실제로 나눠 보고서야 확인할 수 있었습니다.

 

출생시간의 오차도 같은 방식으로 돌려 봤습니다

여기까지 검증한 뒤에는 계산기 자체가 아니라 입력되는 출생시간의 정확도를 확인했습니다. 부모님이 “아마 오전 10시쯤이었을 거야”라고 기억하는 것처럼 5분이나 10분의 차이가 있을 때 결과가 얼마나 달라지는지 보려는 것이었습니다.

 

±1분은 기록된 시각이 오전 10시라면 실제 출생시각이 9시 59분부터 10시 1분 사이였을 가능성을 가정한 것입니다. 그 범위 안에서 연주·월주·일주·시주 중 하나라도 달라지면 경계에 걸린 시간으로 셌습니다.

 

출생시간이 이 정도 부정확하다면 사주 일부가 달라질 수 있는 시간대 하루 평균으로 환산하면
약 1분 차이 1.8% 약 26분
약 5분 차이 9.0% 약 2시간 10분
약 10분 차이 18.1% 약 4시간 21분
약 30분 차이 52.1% 약 12시간 31분
약 1시간 차이 100% 하루 전체

 

표의 ‘하루 평균 26분’은 매일 똑같은 26분이 위험하다는 뜻이 아닙니다. 시주가 바뀌는 경계, 자정, 절입시각처럼 결과가 달라질 수 있는 위치가 하루마다 흩어져 있고, 1년 동안 그런 시간을 모두 모아 365일로 나눈 평균입니다.

 

1분 차이가 왜 영향을 줄까요?

어떤 시주의 경계가 10시 30분이라면, 10시 29분으로 기록된 출생시간이 실제로는 10시 30분이었을 때 단 1분 차이로 시주가 바뀔 수 있습니다. 오전 10시 5분처럼 경계에서 한참 떨어진 시각이라면 1~2분이 달라도 결과가 변하지 않고요. 모든 사람이 1분 오차 때문에 사주가 달라지는 것은 아니며, 경계 가까이에 태어난 경우가 영향을 받습니다.

 

2026년 52만 5,600분에서 이런 ‘1분 민감 구간’은 약 1.8%였습니다. 원래 계산값은 9,512분이고 하루 평균으로 환산하면 약 26분이에요. 10분 정도 시간이 불확실해지면 범위는 약 18.1%까지 늘었습니다. 그래서 부모님이 “정확히 기억은 안 나지만 오후 3시쯤”이라고 기억하는 것과, 출생증명서에 분 단위까지 적힌 시간을 쓰는 것은 같은 수준의 자료로 취급하기 어렵다고 느꼈습니다.

 

마지막 오류는 낮 시간 테스트에서는 거의 보이지 않았습니다

시주 보정도 넣고 부호도 바로잡은 뒤에 코드 구조를 단순하게 만들려고, 출생시각 자체에서 먼저 30분을 빼고 그 보정된 시각을 연주·월주·일주·시주 계산에 모두 썼습니다.

 

열 번째 오류는 시주를 위해 만든 30분 보정값을 다른 주의 계산까지 함께 적용한 것이었습니다. 예를 들어 9월 20일 00시 15분에서 30분을 빼면 9월 19일 23시 45분이 됩니다. 시주를 정하려고 넣은 보정 때문에 일주 계산 날짜까지 전날로 넘어간 겁니다. 2026년 전체를 확인하니 이 방식으로 결과가 달라지는 시간이 11,299분이었고, 대부분 매일 자정 직후에 나타났으며 절입 부근에서는 월주까지 같이 달라지는 경우가 있었습니다.

 

이 오류가 오래 남은 이유는 테스트 시간 탓이었습니다. 오후 2시, 오후 4시, 저녁 8시처럼 날짜 경계에서 떨어진 값만 넣으면 멀쩡하게 나옵니다. 자정과 정확한 절입 근처를 일부러 넣어 보고서야 드러났어요.

 

반복해서 틀린 곳은 공식이 아니라 경계 처리였습니다

열 가지 오류를 다시 놓고 보니 같은 형태가 여러 번 되풀이됐습니다. 연주에서는 1월 1일, 설날, 입춘을 구분해야 했고 입춘도 날짜만이 아니라 5시 2분이라는 시각까지 내려가야 했습니다. 월주에서는 양력 월, 절입 날짜, 절입시각, 24절기 전체와 실제 월 경계를 각각 분리해야 했고요. 일주에서는 기준일 하나가 틀리면 365일이 함께 밀렸고, 시간대 변환에서는 한국 날짜와 세계표준시 날짜를 섞는 순간 매일 9시간 구간의 날짜가 바뀌었습니다. 시주도 30분이라는 보정값 자체보다 누락, 부호, 적용 범위가 각각 다른 오류를 만들었습니다.

 

계산식 하나가 틀렸다기보다 경계를 어느 기준에서 자르고 그 값을 어디까지 전달하느냐가 되풀이해서 문제를 일으킨 셈입니다.

 

최종 검증은 임의의 날짜 몇 개가 아니라 52만 5,600분 전체였습니다

개발 초반에는 평범한 낮 시간 몇 개를 넣어 맞으면 다음 단계로 넘어갔습니다. 이 방식으로는 자정 직후, 절입 직전과 직후, 시주 경계처럼 짧게 나타나는 오류를 놓치기 쉬웠어요.

 

최종 검증에서는 2026년의 52만 5,600개 출생시각을 1분씩 전부 계산했습니다. 정상 계산을 하나 두고 오류가 의심되는 규칙을 한 번에 하나씩 바꿔 가며 결과가 달라지는 분을 셌습니다. 이 방식으로 양력 월을 월주에 쓰면 약 18.7%, 시주 30분 보정을 빼먹으면 25%, 부호를 반대로 넣으면 50%가 달라지는 것을 확인했습니다. 세계표준시 날짜를 일주에 그대로 쓴 경우에는 37.5%, 모든 24절기를 월 경계로 쓴 계산은 약 92%가 정상 계산과 달랐습니다.

 

일주 기준값은 여러 달의 한국천문연구원 공개 일진 자료와 따로 대조했습니다. 절입이 들어오는 날은 날짜별 후보 원국을 다시 묶어 기존 설명의 예외도 확인했고, 출생시각의 불확실성은 ±1분, ±5분, ±10분, ±30분, ±1시간으로 범위를 넓혀 다시 계산했습니다. 대표 사례 몇 개가 맞는지 보는 방식에서 경계값을 포함한 1년 전체를 훑는 방식으로 바꾸고서야, 정상처럼 보이던 오류들이 서로 다른 크기로 드러났습니다.

 

이 검증에도 남아 있는 범위

여기 나온 수치는 기존 만세력 설명을 옮겨 적은 값이 아니라, 이 글을 쓰면서 2026년의 시간을 1분씩 나눠 비교한 결과입니다. 동시에 이 사이트에서 쓰는 계산 기준과 2026년의 절입시각을 놓고 검산한 결과이기도 합니다. 다른 연도에는 절입시각이 달라지니 세부 숫자도 달라질 수 있습니다.

 

지역별 진태양시, 균시차, 야자시처럼 서로 다른 계산 기준을 쓰는 경우도 이번 검증에서는 어느 한쪽을 오류라고 판단하지 않았습니다. 이 작업이 겨냥한 것은 어느 유파의 계산법이 유일하게 맞는지를 정하는 일이 아니라, 하나의 계산 기준을 정한 뒤 실제 프로그램으로 구현했을 때 몇 분, 몇 시간의 경계 처리가 결과를 얼마나 바꿀 수 있는지 확인하는 일이었습니다. 2026년 52만 5,600분을 전부 확인했지만 연도가 바뀌거나 계산 기준 자체가 달라지면 다시 검증해야 할 부분은 남아 있습니다.

 

검증자료

2026년 원자료와 주장별 재현 결과표를 별도 파일로 공개합니다.

재현 결과 이미지

 

claim_check_summary.csv
0.00MB
solar_terms_2026_kasi.csv
0.00MB
reproduce_2026.py
0.00MB

 

 

▶ 내 만세력 확인하기