본문 바로가기
IT 트랜드

OpenAI API로 만드는 사주 풀이 프로그램 #1 - 천간 지지 기반 년주 계산 방법

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

이전 글에서 챗지피티 사주 풀이에 대해 살펴봤어요. 궁금하신 분은 본문 아래 링크를 참고하시고요.

오늘부터는 챗지피티 홈페이지인 OpenAI.com에서 제공하는 OpenAI API를 이용해서 나만의 사주 프로그램을 만들어보려 합니다. 명리학 기반 이론이라 이론도 복잡하지만, 이를 코딩하는 것도 간단한 것은 아니라서, 연속해서 글을 이어나가야 할 듯합니다.

오늘은 그 첫 번째 이야기로 사주팔자 중 ‘년주’를 세우는 이야기와 파이썬으로 구현한 과정을 나눠볼게요.

OpenAI API로 만드는 사주 풀이 프로그램 #1
OpenAI API로 만드는 사주 풀이 프로그램 #1

 

반응형

OpenAI API로 만드는 사주 풀이 프로그램 #1

  사주팔자

사주팔자라는 말, 한 번쯤 들어보셨을 거예요.

사주는 네 개의 기둥(년주, 월주, 일주, 시주)을 뜻하고, 각 기둥은 두 글자(천간과 지지)로 이뤄져요. 그래서 총 여덟 글자, 즉 팔자가 되어, 이를 우리는 사주팔자(4개 기둥과 8 자)라고 부르는 거예요

예를 들어, 제 생년월일이 “2001년 5월 2일 오전 8시”라고 해볼게요. 이 숫자들을 사주팔자로 바꾸면 아래와 같이 한자로 된 여덟 글자가 나와요. 

시주 일주 월주 년주
庚(경) 乙(을) 壬(임) 辛(신)
辰(진) 丑(축) 辰(진) 巳(사)

 

이 글자들은 명리학에서 시간과 자연의 흐름을 담고 있다고 해요. 그럼 이 한자들은 어디서 오는 걸까요?

먼저 천간은 열 개의 글자(갑, 을, 병, 정, 무, 기, 경, 신, 임, 계)로 이뤄져 있어요.

지지는 열두 글자(자, 축, 인, 묘, 진, 사, 오, 미, 신, 유, 술, 해)인데, 이건 우리에게 친숙해요. 바로 띠로 쓰이는 쥐, 소, 호랑이, 토끼 같은 동물들이죠! 천간과 지지가 만나면서 한 해, 한 달, 하루, 한 시를 표현하는 특별한 조합이 만들어지는 거예요.

 

 

  년주를 세우는 기본 원리

이제 년주를 세우는 법을 본격적으로 알아볼까요? 년주는 태어난 해를 천간과 지지로 나타낸 기둥이에요. 예를 들어, 2001년은 천간 ‘신’와 지지 ‘사’가 만나 ‘신사년’이 되죠. 이렇게 한 해를 두 글자로 표현하는 게 사주에서 첫 번째 기둥이에요.

 

재미있는 건, 천간 10개와 지지 12개가 조합되면서 60년마다 같은 해가 반복된다는 점이에요. 그래서 60세가 되면 ‘환갑’이라고 부르는 거죠. ‘갑자년’에서 시작해서 ‘계해년’까지 돌고 나면 다시 처음으로 돌아가요. 이 주기가 어디서 오는지 궁금해서 계산해 보니, 천간과 지지의 최소공배수가 딱 60이더라고요. 

 

 

  파이썬으로 년주 세우기

평소엔 사주 앱이나 만세력 책을 펴서 확인했는데, 직접 코딩하려니 정확한 이론이 정리되지 않으면 어려워요. 예전에 봤던 명리학 책과 유튜브 등을 참고하다 보니 딱 떨어지는 논리가 정립되더라고요.

 

기본 원리는 간단해요. 연도를 입력하면 끝자리로 천간을 정하고, 연도를 12로 나눈 나머지로 지지를 찾는 거예요.

def calculate_year_ganzhi(year):
    cgan = y_CHEONGAN[int(str(year)[-1])]  # 끝자리로 천간 찾기
    jiji = y_JIJI[year % 12]              # 12로 나눈 나머지로 지지 찾기
    return f"{cgan}{jiji}년"

코드로 구현하면 위와 같죠. 그런데 여기서 문제가 생겼어요. 코드가 문제없는 것 같은데, 실행해 보면 정답이 나오기도 하고 엉뚱한 오답이 나오기도 하더라고요.

 

알고 보니, 사주에서는 단순히 연도만 보면 안 되고 절기를 고려해야 했어요. 특히 2월 초에 태어난 사람은 입춘(대략 2월 4일)을 기준으로 해가 바뀐다고 봐요. 또 지지도 정해진 절기의 기준이 따라 결정되는 거였어요.

그래서 코드를 이렇게 수정했어요.

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'
}

def is_after_in(self, month, day):
    in_month, in_day = map(int, self.JULGI_JIJI['인'].split('-'))
    return month > in_month or (month == in_month and day >= in_day)

def calculate_year_ganzhi(self, year, month, day):
    if not self.is_after_in(month, day):  # 입춘 전이면 전년도 사용
        year -= 1
    cgan = self.y_CHEONGAN[int(str(year)[-1])]
    jiji = self.y_JIJI[year % 12]
    return f"{cgan}{jiji}년"

이제 2001년 5월 2일을 넣으면 ‘신사년’이 정확히 나오더라고요. 절기라는 요소가 들어가니까 사주가 단순한 숫자 놀음이 아니라 자연의 리듬과 연결되어 있다는 게 프로그램 구현을 하다보다 더 직접적으로 느껴졌어요.

 

 

명리학에 대한 기본적인 이해가 있으신 분들은 '코드로 이렇게 만들 수 있구나!' 하실 거고, 이론이 없으신 분들은 '뭐라는 거지?' 하실 거예요. 나머지 월주나 일주, 시주에 대해서는 다음 글에서 간단하게 살펴보도록 할게요. 

 

 


 

챗지피티 사주 풀이, 정말 정확할까? AI 사주 한계와 올바른 사주 명식 확인법 #1

 

챗지피티 사주 풀이, 정말 정확할까? AI 사주 한계와 올바른 사주 명식 확인법 #1

요즘 챗지피티(ChatGPT) 사주 보기가 유행인 듯해요. 주변 사람들도 챗지피티 사주에 대해 이야기하더라고요. 과연 챗지피티 같은 인공지능이 동양 철학 특히 사주의 기본적인 이론이 되는 명리학

maos.tistory.com

 

반응형