로쿠요(六曜)는 실제로 어떻게 계산되나요?

산식은 하나, 윤달이 그걸 조용히 깨뜨리지 못하게 막는 줄도 딱 하나예요.

Bokki 편집실

짧은 답

로쿠요(六曜) — 복키 홈이 「오늘의 상징」 네 카드 중 하나로 보여주는 大安·赤口·先勝·友引·先負·仏滅의 여섯 날 순환 — 은 산식 하나에서 나와요. 그 날짜의 음력 달 번호에 음력 일수를 더하고 6으로 나눈 나머지가 고정된 순서 중 하나를 골라요. 이 사이트 전체에서 제일 단순한 계산처럼 들려요. 그런데 여기가 복키 코드에서 그 날짜가 음력 윤달에 걸렸는지를 실제로 읽는 유일한 자리이기도 해요. 달 번호를 대주는 음력 라이브러리가 윤달에는 음수를 돌려주기 때문인데, 그 부호를 지우는 걸 깜박하면 실제로 크기를 잴 수 있는 구체적인 결함이 생겨요.

산식과 오늘의 예시

rokuyo.ts는 양력 날짜를 음력으로 바꾸고(사주 엔진이 쓰는 것과 같은 라이브러리, lunar-typescript) 음력 월·일을 읽어 더한 뒤 6으로 나눈 나머지를 고정 배열에 대요: 大安(0)·赤口(1)·先勝(2)·友引(3)·先負(4)·仏滅(5). 2026년 8월24일은 음력으로 7월12일이에요: 7 + 12 = 19, 19를 6으로 나눈 나머지는 1, 이름은 赤口 — 전통에서 정오만 길하다고 보는 날이에요. 이 결과는 산술이 맞아 보인다고 그냥 믿는 게 아니라, 테스트가 도는 모든 날짜에서 라이브러리 자체의 독립된 참조 메서드 getLiuYao()와 맞대어 확인해요.

윤달에 Math.abs()가 필요한 이유

lunar-typescript에는 알아 둘 만한 특이점이 하나 있어요. 어떤 날짜가 윤달 안에 있으면, 돌려주는 달 번호가 음수예요 — 윤2월은 월 2가 아니라 월 −2로 읽혀요. 2023년 4월5일을 예로 들면, 그해 윤2월의 15일인데 라이브러리는 월 = −2, 일 = 15를 돌려줘요. 복키 코드는 절댓값을 먼저 취해요: Math.abs(−2) + 15 = 17, 17을 6으로 나눈 나머지는 5, 이름은 仏滅 — 같은 날짜에 대한 라이브러리 자체 getLiuYao()와 정확히 일치해요. 절댓값을 건너뛰어도 계산은 여전히 돌아가지만, 틀린 숫자로 돌아가요: −2 + 15 = 13, 13을 6으로 나눈 나머지는 1, 이름은 赤口로 완전히 다른, 틀린 날이 돼요. 어느 쪽이든 오류는 안 나요 — 음수 부호가 여섯 답 중 어느 걸 받는지를 조용히 바꿀 뿐이에요.

로쿠요가 윤달 월수의 절댓값을 쓰는 이유2023년 4월5일(윤2월15일)에 대해 lunar-typescript는 월 = −2, 일 = 15를 돌려준다. 절댓값을 먼저 취하면 2 + 15 = 17, 17을 6으로 나눈 나머지는 5, 이름은 仏滅 — 라이브러리 자체 참조 메서드와 정확히 일치한다. 절댓값을 건너뛰면 −2 + 15 = 13, 13 mod 6 = 1, 이름은 赤口로 완전히 다른, 틀린 날이 된다. 1950~2050(36,890일)을 스캔하면 로쿠요는 하루도 빠짐없이 라이브러리 자체 답과 일치하고, 절댓값 한 줄이 없었다면 윤달 1,080일 중 727일(67.3%)이 틀리게 나왔을 것이다.2023-04-05 → 음력 월 −2, 일 15Math.abs() 적용|−2| + 15 = 1717 mod 6 = 5仏滅 ✓lunar-typescript 자체 getLiuYao()와 일치안 썼다면(가정)−2 + 15 = 1313 mod 6 = 1赤口 ✕다른, 틀린 날1950~2050 스캔: 36,890일 · 윤달 1,080일(2.9%)라이브러리 불일치 0 · abs() 없으면 어긋나는 날 727/1,080(67.3%)

이게 실제로 얼마나 자주 문제였을까

1950년부터 2050년까지 — 36,890일 — 하루도 빠짐없이 rokuyo()를 계산해 lunar-typescript 자체의 getLiuYao()와 맞대 봤어요. 일치는 완벽해요 — 백 년 전체에서 불일치 0. 그 36,890일 중 1,080일(2.9%)이 음력 윤달 안에 있어요. 그 1,080일만 골라 절댓값 없이 다시 계산해 보면 727일(67.3%)이 옳은 답과 다른 날로 나와요 — 윤달인 날의 셋 중 둘꼴로, 오류 하나 없이 조용히 틀린 로쿠요를 보여줬을 거예요. 소스와 직접 대조하지 않는 한 알아챌 방법도 없이요.

우리가 계산하지 않는 것

로쿠요는 어떤 천문 현상에도 묶여 있지 않아요 — 순전히 달력의 관례라서, 대조할 하늘이 없고 오직 달력 자체의 정본 구현에 대조할 뿐이에요, 그리고 그게 저희가 확인한 거예요. 전통적으로 가장 흉하다고 여겨지는 仏滅을 저희는 「비우고 다시 시작하기 좋은 날」로 되읽었어요(PHILOSOPHY·D-003) — 이건 계산 위에 얹은 따뜻함의 선택이지, 어느 날이 어느 자리에 떨어지는지는 손대지 않았어요. 여섯 날의 순서와 mod-6 산술은 그대로예요. 일부 출처가 다른 시작 오프셋으로 설명하는 六曜의 지역 변형은 구현하지 않았어요 — lunar-typescript의 정본 배정 하나만 확인했고, 사주 엔진이 이미 신뢰하는 것과 같은 출처예요. 그리고 로쿠요는 홈 방문자의 약 4분의 1에게만 닿아요 — 날짜로 고르는 네 개의 오늘의 상징 카드 중 하나라서요. 이 글을 쓰려고 그 빈도를 바꾸지도 않았어요.

맺음말 — 36,890일 스캔, 불일치 0, 놓칠 뻔한 727일

정리하면, 로쿠요는 고정된 여섯 날 순환에 대고 (음력 월 + 음력 일) mod 6을 계산하는 거예요. 그리고 이 사이트에서 음력의 윤달 부호를 직접 읽는 유일한 계산이기도 해요. 백 년(1950~2050, 36,890일)을 스캔해 보면 참조 라이브러리 자체의 getLiuYao()와 하루도 빠짐없이 일치해요. 그 백 년 안에서 1,080일(2.9%)이 윤달에 있고, 윤달 라이브러리의 음수 부호를 지우는 그 한 줄 Math.abs()를 빼면 727일(67.3%) — 윤달인 날의 셋 중 둘꼴 — 이 틀린 답을 냈을 거예요. 윤달은 사주 계산에는 아예 안 닿지만(짝글 「윤달과 사주」 참고), 여기는 직접 닿아요. 그리고 그럴 때마다 옳고 그름을 가르는 건 절댓값 한 줄뿐이에요.

← 내 사주 보기

이어서 읽기

홈에서 오늘의 로쿠요 보기 →
윤달에 태어나면 사주가 달라지나요? — 음력을 아예 안 읽는 계산
절기(節氣)란? — 복키의 사주 엔진이 실제로 따르는 달력 경계

사람들이 실제로 묻는 것

로쿠요(六曜)는 실제로 어떻게 계산되나요?

(음력 월 + 음력 일) mod 6을 大安·赤口·先勝·友引·先負·仏滅의 고정된 여섯 순서에 대요 — 테스트가 도는 모든 날짜에서 lunar-typescript 자체의 참조 메서드와 맞대어 확인해요.

이 계산에서 윤달이 왜 특히 중요한가요?

음력 라이브러리가 윤달 안 날짜에는 음수 달 번호를 돌려주는데, 복키의 로쿠요 계산이 전체 코드베이스에서 그 음력 달 번호를 직접 읽는 유일한 자리이기 때문이에요.

음수 부호를 처리하지 않으면 어떻게 되나요?

계산 자체는 여전히 돌아가지만 틀린 숫자로 돌아가요 — 백 년치를 스캔해 보니 절댓값 처리를 건너뛰면 윤달 1,080일 중 727일(67.3%)이 다른, 틀린 날로 나왔어요.

윤달은 복키의 사주 명식에도 같은 식으로 영향을 주나요?

아니요 — 사주 계산은 윤달이든 아니든 음력 달 번호를 아예 읽지 않아요. 그래서 영향을 안 받는 거예요(짝글 「윤달에 태어나면 사주가 달라지나요?」 참고).

복키는 仏滅(부츠메츠)을 흉일 경고로 다루나요?

아니요 — 복키는 그날을 경고 대신 「비우고 다시 시작하기 좋은 날」로 되읽어요. 어느 날이 그 자리에 떨어지는지나 산술 자체는 그대로 두고요.