본문 바로가기
IT 트랜드

OpenAI API로 만드는 사주 풀이 프로그램 #2 - 사주팔자 월주 정하는 법

by 마오양 2025. 4. 15.
반응형

지난 포스팅에서는 년주(년지+년간)를 계산하는 방법과 절기의 역할에 대해 알아보았습니다. 이번 글에서는 이어서 월주 세우기 방법에 대해 설명하고 구현 코드 예시로 정리해 보겠습니다.( * 이 글에서는 '년'은 그대로 '년'으로 표기하겠습니다.)

사주팔자 월주 정하는 법
사주팔자 월주 정하는 법

 

반응형

 

사주팔자 월주 정하는 법

  월지 찾기

월주는 출생일이 속한 절기를 기준으로 월지지가 결정됩니다. 여기서 중요한 점은 음력 월과는 다르게 양력 절기 기준으로 월이 정해진다는 것입니다.

 

예를 들어, 보통 2월 4일경에 입춘이 있으므로 이 날짜 이전에 태어났다면 ‘축월’, 이후라면 ‘인월’로 판단하게 됩니다.

월간(월의 천간)은 년간을 기준으로 5간씩 순환하여 배정됩니다. 이때 사용하는 절기 기준은 다음과 같이 12개입니다.

self.JULGI_JIJI = {
    '인': '02-04', '묘': '03-06', '진': '04-05',
    '사': '05-06', '오': '06-06', '미': '07-07',
    '신': '08-08', '유': '09-08', '술': '10-08',
    '해': '11-07', '자': '12-07', '축': '01-05'
}

위 딕셔너리는 편의상 대략적인 날짜를 지정했을 뿐이고, 더욱 정확하게 계산하기 위해서는 해당하는 해의 정확한 절기가 언제였는지 파악해야만 합니다. 

 

 

이전 글에서 2001년 5월 2일 오전 8시 생을 기준으로 년주를 세워봤어요. 이전 글에서 이 생년월일의 년주는 "신사" 였죠.

그러면 이 "신사"년 을 기준으로 월주를 계산해 볼게요.

 

우선, 5월 2일이 절기상 어디에 해당하는지 확인합니다. 위 딕셔너리에서 5월 2일은, 4월 5일에서 5월 6일 사이니까 "진"에 해당합니다. 때문에 절기를 기준으로 월주의 지지는 "진" 됩니다.

 

  월간 찾기

이제 월간을 따져봐야 하는데, 이 월간을 따지려면 명리학의 기초 이론에 대해 알아야만 어떻게 구성되는 건지 이해할 수 있어요. 음양오행과 이들의 상생관계에 대해 이야기를 하자면 너무 길기 때문에 여기에서는 예시로 '이런 게 있다' 정도로 소개할게요.

 

먼저, 년천간의 합이란 게 있어요. 년(연)간과 그 짝이 되는 천간이 합하여 오행의 어떤 기운을 나타낸다는 것이에요. 예를 들면,

  • 갑(木)과 기(土)가 합하여 토(土)의 기운을 나타낸다.
  • 을(木)과 경(金)이 합하여 금(金)의 기운을 나타낸다.
  • 병(火)과 신(金)이 합하여 수(水)의 기운을 나타낸다.

 

이런 식으로 갑,을,병,정... 천간 10개가 합을 이루어 오행을 나타냅니다. 이렇게 나타난 오행을 생(生)하는 그 오행의 양간을 그 해 인월의 월간으로 정합니다. 오행의 생상 관계를 간단하게 말하면 다음과 같아요.

  • 목은 화를 생하고
  • 화는 토를 생하고,
  • 토는 금을 생하고,
  • 금을 목을 생한다.

이 말은 이렇게도 표기할 수 있겠죠. 목(木) > 화(火) > 토(土) > 금(金) > 수(水) > 목(木)

 

즉, 병(火)과 신(金)년 천간의 합은 수(水)가 되며, 수(水)를 생하는 기운은 금(金)이므로 신년에 해당하는 신사년의 인월은 10 천간의 금(金)에 해당하는 경인월이 되는 거예요. 이때 천간의 금(金)은 경(庚)뿐만 아니라 신(辛)도 있는데요? 할 수 있어요. 그런데, 인월은 음양 중 양에 해당하는 천간만 사용합니다.

어렵죠? 그냥 '이런 이론에 기초해서 정해진다.' 정도로 생각하시면 됩니다.

 

자, 그럼 이제 다시 돌아가서,

앞서 우리는 5월 2일생의 월지를 "진"이라 했어요. 그럼 인월이 경인월이므로 진월까지는 지지에서 인, 묘, 진 순서로 3번째에 해당하므로, 경에서부터 3번째 천간 경, 신, 이 되겠네요. 따라서 월주는 "임진"월이 됩니다.

 

 

  월주 파이썬 코드 예시

이를 파이썬으로 구현한다면 다음과 같이 간단하게 만들 수도 있죠.

def calculate_month_ganzhi(self, year_ganzhi, month, day, is_leap_month):
    cgan = year_ganzhi[0]
    ...
    if cgan in ['기', '경', '신', '임', '계']:
        cgan = {'기': '갑', '경': '을', '신': '병', '임': '정', '계': '무'}[cgan]

    result = self.day_dungan_df.loc[self.day_dungan_df['JIJI'] == jiji, cgan].values[0]
    return f"{result}월"

여기에서 day_dungan_df는 앞서 설명한 천간합과 오행에 대해 미리 다 계산한 후 따로 선언하여 사용했어요.

 

월주 세우기만 이야기해도 너무 길게 얘기했네요. 오늘은 여기까지 하고, 또 다음 글에 이어서 일주, 시주를 정리해 보도록 할게요.

반응형