기능 폭발 — 궁합, 일일 운세, 토정비결까지
사주 분석 엔진이 안정되자 머릿속에 아이디어가 쏟아지기 시작했다. 궁합도 보고 싶고, 매일 운세도 보여주고 싶고, 토정비결도 넣고 싶다. 문제는 이 기능들 하나하나가 독립적인 프로젝트 규모라는 것이었다. 그런데 AI와 함께하니 이야기가 달라졌다.
핵심 엔진이 만든 확장의 토대
앞선 편들에서 다룬 룰 기반 엔진과 AI 해석 레이어, 이 하이브리드 아키텍처가 기능 확장의 핵심 토대가 됐다. 천간지지 계산, 오행 판별, 십신 분석, 합충형파해 판단 — 이 모든 로직이 모듈화되어 있었기 때문에 새로운 기능을 추가할 때 바닥부터 시작할 필요가 없었다.
궁합 분석을 예로 들면, 두 사람의 사주를 각각 분석하는 것은 기존 엔진이 이미 할 수 있는 일이다. 추가로 필요한 것은 "두 사주 간의 관계"를 분석하는 레이어뿐이었다. 일일 운세도 마찬가지다. 사용자의 사주 원국은 이미 있고, 오늘 날짜의 천간지지만 계산하면 그날의 운세를 뽑아낼 수 있다.
모듈화의 진짜 가치는 처음 설계할 때가 아니라, 확장할 때 드러난다. 이 프로젝트에서 그 교훈을 몸으로 체감했다.
궁합 분석 — CompatibilityPage
궁합은 사용자들이 가장 많이 찾는 기능 중 하나다. 연인, 부부, 비즈니스 파트너까지 두 사람의 상성을 궁금해하는 수요는 늘 존재한다.
구현의 핵심은 두 사주의 일간 관계였다. 일간끼리의 오행 상생상극 관계, 십신 관계, 천간합 여부를 기본으로 보고, 여기에 지지의 삼합이나 육합, 육충 관계까지 분석한다. 예를 들어 갑(甲)일간과 기(己)일간은 천간합이 되므로 기본적인 끌림이 있다고 본다. 반면 갑(甲)과 경(庚)은 편관 관계로 긴장감이 존재한다.
AI에게 "궁합 분석에서 중요한 요소를 우선순위로 정리해줘"라고 요청했더니, 일간 관계, 용신 보완 여부, 합충 관계, 오행 균형 보완이라는 네 가지 축을 제안했다. 이 구조를 그대로 채택해 CompatibilityPage를 설계했다. 두 사람의 프로필을 입력하면 각 축별 상성 점수와 종합 분석이 나오는 구조다.
일일 운세에서 대운까지 — 시간의 층위
사주에서 "운"은 여러 시간 단위로 존재한다. 대운은 10년 단위, 세운은 1년 단위, 월운은 1개월, 일운은 하루 단위다. 이 각각이 사주 원국과 어떻게 상호작용하는지를 분석하는 것이 운세의 핵심이다.
DailyFortunePage는 매일 바뀌는 일진의 천간지지를 기반으로 사용자의 사주 원국과의 관계를 분석한다. 오늘의 일간이 사용자의 일간에게 어떤 십신인지, 오늘의 지지가 사용자의 지지와 합을 이루는지 충을 이루는지. 이런 요소들을 룰 엔진이 계산하고, AI가 "오늘 하루 이런 점을 유의하세요"라는 자연어 해석을 생성한다.
월별 운세와 신년 운세는 같은 로직의 시간 단위만 다른 버전이다. 대운 분석은 조금 더 복잡하다. 대운의 시작 시점을 계산해야 하고, 각 대운이 사주 원국에 미치는 영향을 10년 단위로 풀어내야 한다. 특히 대운 교체기에는 삶의 큰 변화가 있다고 보는데, 이 부분의 해석은 AI의 자연어 생성 능력이 빛을 발했다.
여기서 한 가지 설계 고민이 있었다. 일일 운세를 매일 AI에게 요청하면 API 비용이 상당하다. 그래서 룰 엔진의 분석 결과를 최대한 풍부하게 만들고, AI 호출은 사용자가 "상세 분석"을 요청할 때만 발생하도록 설계했다. 비용과 사용자 경험 사이의 균형이었다.
토정비결 — 전통 점술의 디지털화
토정비결은 조선시대 이지함 선생이 만든 것으로 알려진 전통 점술이다. 사주와는 계산 방식이 다르다. 생년의 상괘, 생월의 중괘, 생일의 하괘를 조합해 총 144가지 괘 중 하나를 뽑아내고, 그에 해당하는 점사를 보는 방식이다.
TojungPage를 구현하면서 흥미로웠던 것은 토정비결의 구조적 단순함이었다. 사주가 "무한 조합의 해석"이라면, 토정비결은 "144개의 고정 텍스트"에 가깝다. 오히려 타로의 구조와 비슷하다. 다만 144개의 점사 원문이 한문이고, 이를 현대 한국어로 번역하는 과정에서 AI의 도움이 컸다.
"토정비결 상괘 1, 중괘 3, 하괘 2에 해당하는 점사를 현대적으로 해석해줘." 이런 요청을 반복하면서 144개 조합의 해석 텍스트를 생성했다. 원문의 맥락을 살리면서도 현대인이 이해할 수 있는 어투로 바꾸는 작업. AI가 특히 잘하는 영역이었다.
주역과 꿈 해몽 — 사주 앱을 넘어서
ZhouyiPage(주역)와 DreamPage(꿈 해몽)는 사주 분석과는 직접적인 관계가 없는 기능이다. 그런데도 이 기능들을 추가한 이유가 있다.
주역은 동양 철학의 근간이다. 64괘 체계는 사주명리의 이론적 뿌리와 맞닿아 있다. 사주에 관심을 가진 사용자라면 주역에도 자연스럽게 호기심을 느끼는 경우가 많다. 주역 점을 간단히 체험해볼 수 있는 기능을 넣으면 앱의 콘텐츠 깊이가 달라진다.
꿈 해몽은 더 가벼운 기능이다. 진지한 사주 분석과 달리 재미 요소가 강하다. 하지만 바로 이 가벼움이 중요하다. 사주 앱에 처음 진입하는 사용자가 부담 없이 사용해볼 수 있는 기능. 일종의 진입 장벽을 낮추는 역할이다.
두 기능 모두 AI의 기여도가 높았다. 주역 64괘의 해석 텍스트 생성, 꿈의 키워드별 해몽 데이터 생성 — 이런 대량의 텍스트 콘텐츠는 사람이 직접 작성하면 몇 주가 걸리지만, AI와 함께하면 며칠 안에 초안을 완성할 수 있었다. 물론 이후의 검수와 수정 작업은 별도였지만.
"하루면 되겠는데"가 진짜 가능했던 이유
이전 직장 경험으로 추정하면, 궁합 분석 기능 하나를 제대로 구현하려면 최소 1~2주는 잡아야 했을 것이다. 요구사항 정리, 도메인 리서치, 설계, 구현, 테스트. 그런데 이 프로젝트에서는 "오늘 궁합 기능 넣어볼까" 하고 시작해서 하루 만에 동작하는 버전이 나왔다.
이 속도가 가능했던 이유는 크게 세 가지다.
첫째, 앞서 말한 모듈화된 엔진. 기존 분석 로직을 조합하는 것만으로 새 기능의 핵심이 완성된다. 둘째, AI의 도메인 지식. "궁합에서 일간 관계가 가장 중요한 이유"를 AI에게 물으면 즉시 구조화된 답이 돌아온다. 도메인 리서치 시간이 극적으로 줄어든다. 셋째, AI의 코드 생성 속도. 설계가 확정되면 컴포넌트 구현, 상태 관리, 라우팅 추가까지 AI와 함께 빠르게 진행된다.
다만 "하루면 된다"고 해서 품질도 하루치라는 뜻은 아니다. 첫날에 동작하는 버전이 나오고, 이후 며칠간 엣지 케이스 처리, UI 다듬기, 해석 텍스트 검수가 이어진다. "80%를 하루에, 나머지 20%에 며칠"이 더 정확한 표현이다.
기능 폭발의 이면 — 관리 복잡도
기능이 빠르게 늘어나면서 좋은 점만 있었던 것은 아니다. 페이지가 10개를 넘어가자 라우팅 관리가 복잡해졌고, 각 페이지에서 공유하는 컴포넌트와 유틸리티 함수의 의존 관계가 얽히기 시작했다.
예를 들어 궁합 분석과 일일 운세 모두 "십신 관계 계산" 로직을 사용한다. 처음에는 각 페이지에서 직접 호출했지만, 나중에 십신 계산 규칙을 수정하면 여러 곳을 동시에 고쳐야 하는 상황이 생겼다. 결국 분석 로직을 별도의 서비스 레이어로 분리하는 리팩토링을 했다.
또 하나의 이슈는 번들 사이즈였다. 토정비결 144괘 데이터, 주역 64괘 데이터, 꿈 해몽 키워드 데이터 — 이런 정적 데이터가 쌓이면서 초기 로딩 시간이 눈에 띄게 늘었다. React의 lazy loading과 코드 스플리팅으로 해결했지만, 기능을 추가할 때 번들 사이즈를 의식하지 않으면 사용자 경험이 나빠진다는 교훈을 얻었다.
이런 관리 복잡도 이슈들은 기능 하나하나를 추가할 때는 보이지 않지만, 기능이 일정 수를 넘어서면 한꺼번에 터진다. "기능을 빨리 추가할 수 있다"와 "기능을 잘 관리할 수 있다"는 다른 능력이다.
기능 확장에서 배운 것
이 기간에 기능이 빠르게 늘어나면서 배운 것이 몇 가지 있다.
첫째, 초기 아키텍처 설계의 투자는 확장 단계에서 몇 배로 돌아온다. 엔진을 모듈화하지 않았더라면, 새 기능마다 분석 로직을 처음부터 다시 짰어야 한다.
둘째, 모든 기능이 같은 깊이일 필요는 없다. 사주 분석은 프로젝트의 핵심이니 깊이를 추구하지만, 꿈 해몽이나 오행 테스트 같은 기능은 가벼운 재미로 충분하다. 기능별 적정 깊이를 판단하는 것도 설계의 일부다.
셋째, AI 협업의 진짜 생산성 향상은 "코드를 빨리 짜주는 것"이 아니라 "도메인 리서치와 설계 시간을 줄여주는 것"에서 온다. 궁합 분석의 구현 자체보다, 궁합 분석에서 어떤 요소를 봐야 하는지 파악하는 데 AI의 기여가 더 컸다.
넷째, 기능 추가 속도와 관리 품질은 별개의 축이다. AI가 기능 추가를 빠르게 해주는 만큼, 관리 복잡도에 대한 의식적인 투자가 더 중요해진다. 빠르게 만들 수 있다는 것이 빠르게 만들어야 한다는 뜻은 아니다.
다음 편 예고
기능이 늘어나면서 앱의 골격은 갖춰졌다. 그런데 기능만으로는 사용자가 다시 찾아오지 않는다. 사용자를 끌어들이고 머물게 하려면 "콘텐츠"가 필요하다. 유명인 사주 분석, MBTI와 일간의 매칭, 가벼운 오행 테스트 — 17편에서는 이런 콘텐츠 전략이 어떻게 앱의 성격을 바꿨는지 이야기한다.
댓글
댓글 쓰기