- @dohwadore_saju 채널(한/영 바이링구얼 명리학 채널, 430개 영상 자막 확보)을 15개 배치로 병렬 증류해 "쉬운 설명 기법·카테고리 차별화 기법·구조 화법·신뢰감 형성" 4갈래 패턴을 뽑았다 — 목적은 사용자가 지적한 "기존 타로/사주 콘텐츠가 어렵고, 한 카테고리에서 본 내용이 다른 카테고리에도 계속 중복된다"는 문제를 이 자료로 개선할 수 있는지 확인하는 것.
- 타로 때와 같은 방식으로 결정론(deterministic) 파일럿 비교를 먼저 했다: 실제 앱의 무료 미끼 카테고리인 연간운세(yearFortune) 하나만 골라, 캐논 기법을 반영한 새 버전(
src/soloReport.new.js, 아직 앱에 미적용)을 만들고, worker.js가 쓰는 것과 완전히 동일한 고정 사주(1995-08-22 · 남성 · 시주 오 · 이름 민준)로 기존 버전(src/soloReport.js, 현재 배포 중)과 나란히 실행해 비교했다. - 예상 밖의 발견: 이번 비교로 기존 코드의 실제 정확도 버그를 하나 찾았다. 기존 로직은 오행 상생 관계를 "받는 입장"과 "주는 입장"을 구분하지 않고 하나로 뭉뚱그려서, 이번 고정 사주(일간 오행=목, 올해 오행=화, 즉 내가 화 기운을 만들어내는 "목생화" 관계인데도) "올해 기운이 나를 도와주는 흐름"이라는 반대 방향 문장을 내보내고 있었다. 새 버전은 이 방향을 구분해서 "내가 힘을 쏟아붓는 흐름"으로 정확하게 고쳤다.
- 결론(1차): 캐논 기법(오행 관계를 구체적 물리 이미지+방향성으로 설명)이 "쉬움"과 "정확성"을 동시에 개선하고, 사람마다 실제 오행 조합이 다르므로 "우려먹는 느낌"도 줄어든다는 걸 확인했다. 다만 처음엔 연간운세 하나만 다뤘다.
- 같은 날 범위를 나머지 8개 카테고리(건강운·학업운·직업운·이직운·재물운·연애운·결혼운·궁합) 전부로 확장했다(6장 이후). 결과: 8개 중 6개에서 같은 모양의 문제(반대 의미 두 경우를 한 버킷으로 뭉뚱그림)가 반복 발견됐고, 그중 연애운↔결혼운 쌍은 사용자가 지적한 "카테고리 간 중복" 문제의 실제 사례였다 — 결혼운을 연애운과 겹치지 않는 완전히 다른 데이터(부부 재정·양가 어른·자녀 설계)로 재설계했다. 부수적으로 재물운·학업운 등에서 실제 정확도 버그도 여러 건 발견해 함께 고쳤다.
1. 배경
사용자 피드백: "기존 타로가 너무 어렵고, 하나의 운에서 봤던 내용이 다른 운에 또 계속 중복해서 나온다." 타로는 이미 jinjin10960(930개 영상) 증류 캐논(db/tarot-patterns.html)이 있어 6개 무료 카테고리·4개 유료 샘플에 적용·배포된 상태다. 이번엔 같은 문제의식을 사주(soloReport.js) 쪽에도 적용해볼 수 있는지 확인하기 위해, 명리학 전문 채널인 @dohwadore_saju(259개 롱폼+242개 쇼츠+11개 라이브 다시보기, 총 430개 확보분)의 자막을 같은 방식으로 증류했다.
덕사주타로의 사주 프리미엄 리포트는 타로와 마찬가지로 LLM 실시간 호출이 아니라 룰베이스 슬롯 조합형 텍스트다(src/soloReport.js, src/gunghapReport.js) — 사주 계산(만세력, 십성, 격국, 신살)은 순수 계산으로 결정되고, 그 계산 결과를 바탕으로 문장 배열에서 결정론적으로(seededPick) 문구를 골라 조립한다. 앱에서 비로그인 사용자에게 무료로 미리 보여주는 미끼 카테고리는 연간운세(generateYearFortuneReport, worker.js /sample-report?key=yearFortune)다 — 이번 파일럿의 대상.
2. 증류 결과 요약 — 4갈래 패턴 (430개 영상, 15배치 병렬 분석)
타로 증류 때와 동일한 원칙(원문 5단어 이상 연속 인용 금지, 구조·화법만 일반화해서 추출)으로 분석했다. 아래는 15개 배치 결과를 압축한 요약이다 — 전체 원문은 각 배치 에이전트 산출물에 있고, 이 표는 그중 여러 배치에서 반복 확인된(=우연이 아닌) 패턴만 추렸다.
① 쉬운 설명 기법
- 오행(목화토금수)을 한자 대신 색깔로 1차 언어화 — 거의 모든 배치에서 가장 많이 반복된 단일 기법.
- 오행 상생상극을 구체적 물리 현상으로 설명(물이 불을 끄는 것, 나무가 흙을 뚫는 것, 쇠가 나무를 베는 것 등) — "기운이 나를 돕는다/누른다" 같은 추상 표현 대신.
- 전문용어 등장 즉시 같은 문장 안에서 현대적 등가물로 재번역(예: 특정 신살 → "개인 브랜드 자산"), 설명 없이 방치하지 않음.
- 번호 매긴 체크리스트(첫번째·두번째·세번째)로 판단 절차를 쪼갬.
② 카테고리 차별화 기법
- 같은 기본 개념(십성 등)도 카테고리마다 완전히 다른 어휘 세트로 재매핑 — 재물은 투자·현금흐름 용어, 연애는 밀당·감정 용어, 커리어는 조직·인사 용어.
- 카테고리마다 "봐야 할 자리"를 다르게 지정해, 같은 사주표를 매번 다른 각도로 재활용.
- 같은 시기(월/연도)를 다루더라도 카테고리마다 다른 상징·비유를 배정해 겹침 방지.
③ 구조/화법 기법
- 직접 호명 + 반전형 오프닝("사실은 반대")으로 시작.
- 시간 특정성이 매우 높음 — "몇 월", "몇 살부터" 등 구체적 시기를 항상 명시.
- 조건부 헤지 표현("~일 수 있다") 반복 — 단정하지 않으면서도 확신 있게 들리는 절제된 화법.
- 모든 세그먼트를 구체적 행동 지침으로 마무리(추상적 서술로 끝내지 않음).
④ 신뢰감/전문성 형성 기법
- 단정 대신 "제가 본 사례로는" 식 경험 근거 + 불확실성 인정 — 과신하지 않는 태도 자체가 신뢰 요소.
- 실존 인물(연예인 등) 사주를 검증 가능한 사례로 제시.
- "사주를 맹신하지 말라"는 자정 메시지로 미신과 스스로 구분.
전체 배치별 상세 원문(파라프레이즈)은 이 세션의 서브에이전트 산출물에 보관돼 있으며, 요청 시 재구성 가능. 위 4갈래는 사람이 다시 압축한 요약이다.
3. 방법론 — 어떤 카테고리를, 어떻게 비교했나
- 대상 선정. 사주 프리미엄 카테고리 중 앱이 실제로 무료 미끼(샘플)로 노출하는 건 연간운세 하나뿐이다(
public/index.html"예시 사주풀이 참고하기" CTA →sampleKey="yearFortune"→generateYearFortuneReport, worker.js도 같은 함수·같은 고정 입력을 씀). 그래서 타로 때 LOVETODAY_TEXT를 고른 것과 동일한 논리로 이 카테고리를 골랐다. - 같은 사주 고정. 카드 셔플이 있던 타로와 달리 사주 리포트는 애초에 랜덤 요소가 없다(생년월일시가 입력이므로) — worker.js가 실제로 쓰는 고정 입력을 그대로 재사용했다:
{year:1995, month:8, day:22, calendar:"solar", hourBranch:"오", gender:"male"}, 이름 "민준". 이 사주의 일간은 을목(乙木), 신약, 정관격(성격). - 전/후 소스. "전"=
src/soloReport.js(현재 배포 중, 미변경). "후"=src/soloReport.new.js(이번에 새로 만든 실험용 사본, 아직 앱 코드 어디에서도 import 안 됨 — 프로덕션에 영향 없음). 둘 다 Node로 직접 import해서 같은computeSaju()결과값을 넣고 함수를 나란히 실행했다(compare_yearfortune.mjs). - 수정 범위.
generateYearFortuneReport()안에서 헤드라인 한 줄 요약과 활용팁 두 슬롯만 캐논 기법(①번 물리적 오행 이미지, 방향성 구분)을 반영해 새로 썼다. 월별 섹션·신살 섹션·격국 한줄평·용어 해설 블록은 이번 파일럿에서 손대지 않았다(전/후 동일 — 아래 Exhibit에서 확인 가능).
YEAR_TONE_FACT/YEAR_TONE_NUANCE는 오행 관계를 상생/비화/상극/중립 4버킷으로만 분류했는데, elementRelation() 함수 자체가 "그 해가 나를 생하는지" vs "내가 그 해를 생하는지"를 구분하지 않고 둘 다 "상생"으로 뭉뚱그린다. 그런데 실제 의미는 정반대다 — 전자는 도움을 받는 입장(인성), 후자는 내가 에너지를 쏟아내는 입장(식상)이다. 이번 고정 사주(을목 일간, 갑오년처럼 화 기운이 오는 해라고 가정 시 목생화 = 내가 화를 생함)에서 기존 코드는 "올해 기운이 나를 도와주는 흐름"이라고 방향이 반대인 문장을 내보내고 있었다. 이건 캐논 적용과 무관하게 존재하던 기존 버그이고, 이번 파일럿에서 방향성을 구분하는 로직(yearRelationRole())을 새로 만들면서 같이 고쳐졌다.4. Exhibit 1 — 같은 사주, 헤드라인 한 줄 요약 전/후
을목(乙木) 일간 · 신약 · 정관격 · 남성 · 이름 민준
| 버전 | 전 — 현재 배포 중(soloReport.js) | 문제/기법 |
|---|---|---|
| 전 | "올해는 그 해 기운이 나를 도와주는 흐름이야. 도움받는 해라 무리한 욕심 없이도 순조롭게 풀릴 가능성이 커." |
방향 오류 실제로는 내(목)가 올해(화) 기운을 생하는 관계(목생화)인데, "도움을 받는다"는 반대 방향으로 서술됨. 오행 자체(목/화)도 문장에 안 드러남 — 다른 사람 리포트와 구분이 잘 안 됨. |
| 후 | "내(나무) 기운이 타올라서 화 기운에 불을 지피고 있는 관계라, 올해는 내가 가진 힘을 이 해(불)한테 쏟아붓는 흐름이야. 베푸는 흐름인 만큼 너무 다 퍼주지만 말고 스스로 채우는 시간도 같이 챙겨." |
구체적 물리 이미지방향성 정정 "나무가 타올라 불을 지핀다"는 실제 오행(목→화) 그대로의 장면 묘사로 정확도와 이해도를 동시에 높임. 방향이 "주는 입장"으로 정정됨. |
5. Exhibit 2 — 같은 사주, 활용팁 전/후
| 버전 | 내용 | 비고 |
|---|---|---|
| 전 | "주변에서 도움 준다는 제안이 오면 부담 갖지 말고 받아들여봐. 올해는 그게 자연스럽게 통하는 흐름이야." |
헤드라인과 마찬가지로 "받는 입장" 팁 — 방향 오류가 그대로 이어짐. 상생/비화/상극/중립 4개 버킷 각각 고정 문구 1개뿐이라, 같은 유형인 다른 사용자와 100% 동일한 팁을 받는다. |
| 후 | "네 능력이나 콘텐츠를 드러낼 자리가 있으면 망설이지 말고 나서봐. 올해는 그게 먹히는 흐름이야." |
방향성 정정변형 확대 "주는 입장"에 맞는 팁으로 정정. 5개 역할(받음/줌/누름/눌림/비화) × 각 2개 변형으로 seededPick 결정론적 분기 — 같은 오행 조합이라도 사람마다(사주 시드 기준) 두 갈래 중 하나로 갈리게 확장. |
soloReport.new.js/gunghapReport.new.js 실험용 사본에만 있고, 프로덕션(soloReport.js/gunghapReport.js)은 전혀 손대지 않았다.6. 9개 카테고리 전체 요약 — 발견한 문제 · 적용한 기법
모든 카테고리에서 반복적으로 나타난 근본 패턴은 하나였다: 서로 의미가 반대인 두 경우를 하나의 버킷으로 뭉뚱그려서, 실제로는 달라야 할 조언이 같은 문장으로 나가고 있었다. yearFortune의 "받는 입장 vs 주는 입장" 버그와 정확히 같은 모양의 문제가 8개 카테고리 중 6개에서 재발견됐다 — 이건 우연이 아니라, 이 코드베이스 전반에 깔린 일관된 설계 습관(방향성 무시)이었다는 뜻이다.
| 카테고리 | 기존 코드에서 발견한 문제 | 적용한 수정 |
|---|---|---|
| 연간운세 (1~5장, 최초 파일럿) | 버그 오행 상생을 "받음/줌" 구분 없이 한 버킷으로 처리 — 방향이 반대인 문장이 나가는 경우 존재 | 5역할(받음/줌/누름/눌림/비화) 분리 + 실제 오행쌍을 명시하는 물리 이미지 |
| 건강운 | 버그 오행 "부족"과 "과다"를 이유 문구에서만 구분하고, 정작 몸 상태 설명·팁은 방향 무관 동일 문구 재사용(실제로는 반대 체질에 가까움) | 오행×부족/과다 10칸으로 분리, 몸으로 느껴지는 구체적 물리 이미지(예: "지반이 얕은 화단처럼") + 방향 전용 관리팁 |
| 학업운 | 버그① 정인·편인 둘 다 0인 사람이 "고르게 있다"는 사실과 다른 balanced 문구를 받음 버그② 정인 대운·편인 대운을 "인성 기운"으로 뭉뚱그려서, 위 스타일 섹션에서 이미 구분해둔 커리큘럼형/몰입형 차이가 시기 섹션에서만 사라짐 | 없음(none) 4번째 버킷 신설 + 정인/편인 대운을 방향별로 분리해 원래 공부 스타일과 교차 비교하는 studyTimingFitNote() 추가 |
| 직업운 | 버그 관성/재성 비중만으로 조직형/사업가형 3버킷 — "위험 감수형(편)"과 "신중형(정)"을 구분 못 해 조언이 뭉툭함 | 편/정까지 갈라 5버킷(orgBold/orgSteady/bizBold/bizSteady/balanced), 보고체계·인사고과 등 조직행동 전용 어휘로 방향별 팁 분리 |
| 이직운 | 버그 관성·재성 이벤트를 "이동·기회 기운"으로 뭉뚱그림 + 직업운과 사실상 같은 방향 정보를 재탕(카테고리 중복 사례) | 승진·발령형(관성)/제안·스카우트형(재성)/겹경사형(both) 3분류 타이밍 + 직업운과 다른 각도("일하는 스타일"이 아니라 "옮기는 판단·협상 스타일")의 신규 5분류 섹션 추가 |
| 재물운 | 버그 "정재/편재 스타일" 축만 있고 "그릇 크기"(신강약×재다소) 축은 재다신약 1개 조합만 캐주얼티로 덧붙여짐 — 재다신강(이상적 부자 그릇) 등 나머지 5조합은 아예 언급조차 없었음 | 강/약/중화 × 재다/재소 6조합 총평 섹션(WEALTH_CAPACITY) 신설, 적금·ETF·시드머니 등 구체적 금융 어휘로 확장 |
| 연애운 | 버그 배우자성이 2종류 이상 겹친 사람도 present[0](첫 매칭)만 쓰고 나머지 정보를 버림 — 정재+편재 둘 다 있는 사람이 정재 단일형으로만 서술됨 | 주(主)/부(副) 배우자성을 빈도순으로 둘 다 반영하는 mixedSpouseTraitLine(), 월별 좋음/조심 문구에 연락텀·밀당·직진 등 구체적 행동 지침 추가 |
| 결혼운 | 중복 문제(사용자 지적 사례 그 자체) 배우자성 성향·직업·시기를 연애운과 거의 같은 데이터로 다시 서술 — "다른 운에서 본 내용이 또 나온다"는 지적이 정확히 이 카테고리 얘기였음 | 연애운이 다루지 않는 데이터(부부 재정 스타일=십성그룹, 양가 어른=년/월주, 자녀·말년=시주)로 완전히 재설계, 오프닝 문장에서 "성향은 연애운에서 이미 짚었으니 여기선 결혼 이후"라고 명시적으로 역할 분리 |
| 궁합 | 버그 오행 상생(生)은 이미 방향 구분돼 있었는데 상극(剋)만 방향 미구분("상호 극" 한 버킷) — 내가 상대를 누르는 것과 상대한테 눌리는 게 반대 의미인데 같은 문장 | 극도 생과 동일하게 방향별 6분류로 통일, 두 사람의 실제 오행쌍을 명시하는 물리 이미지로 궁합 전체 표현 일관화 |
7. Exhibit 3 — "카테고리 간 중복" 문제의 실제 사례: 연애운 vs 결혼운
사용자가 처음 지적한 문제("하나의 운에서 봤던 내용이 다른 운에도 계속 중복해서 나온다")를 코드로 직접 확인할 수 있었던 게 이 쌍이다. 같은 고정 사주로 두 카테고리를 나란히 뽑아보면:
| 연애운【배우자궁이 보여주는 성향】 | 결혼운【결혼운 총평】 | |
|---|---|---|
| 전(개편 전) | "사주에 배우자성(재성/관성)이 뚜렷하게 드러나 있지 않아서, 배우자상이 한 가지 유형으로 딱 정해지기보단 상황에 따라 유연하게 그려지는 편이야." |
"배우자성이 뚜렷하게 드러나진 않지만, 그만큼 특정 시기·조건에 얽매이지 않고 유연하게 흘러갈 수 있는 사주야." |
두 문장이 사실상 같은 근거(배우자성 부재)로 같은 결론을 두 번 말하고 있다 — 결혼 시기 섹션도 findUpcomingDaeunByTenGod(["정관","정재"])로 완전히 동일한 계산을 반복 사용했다(전 버전 코드 원문 확인).
| 섹션 | 연애운에 있음? | 비고 |
|---|---|---|
| 【결혼 후 부부 사이 기본 결】 | 일지 재사용(중복) | 기존 코드와 동일 — 유지 |
| 【부부 재정 스타일】 | 신규 — 연애운엔 없음 | 십성 5그룹(비겁/식상/재성/관성/인성) 기반, 통장 분리·자동이체 등 구체적 재정 행동 |
| 【양가 어른들과의 관계】 | 신규 — 연애운엔 없음 | 년주·월주(연애운은 일지만 씀) 활용 |
| 【자녀·말년 설계】 | 신규 — 연애운엔 없음 | 시주(어떤 카테고리도 안 쓰던 기둥) 활용 |
오프닝 문장도 "어떤 성향의 사람을 만날지는 연애운에서 이미 짚었으니, 여기서는 결혼 '이후'에 집중"이라고 명시적으로 역할을 분리했다 — 사용자가 두 리포트를 연달아 봐도 "또 같은 얘기"라고 느끼지 않도록.
8. Exhibit 4 — 정확도 버그 사례: 재물운의 "빠진 절반"
기존 코드는 if (jaeCount >= 2 && chart.strength === "신약") cautionParts.push(...) 단 한 줄로만 "그릇" 축을 다뤘다 — 재다신약(재물이 부담되는 경우)만 캐치하고, 정반대인 재다신강(재물을 넉넉히 감당하는 이상적 구조)이나 재성이 옅은 케이스들은 리포트 어디에도 등장하지 않았다. 즉 재다신강인 사람도 그 사실을 리포트에서 전혀 못 보고 지나갔다.
| 버전 | 내용 |
|---|---|
| 전 | (재다신강 케이스에 해당하는 문장 자체가 없음 — 【조심할 점】에 "특별히 두드러지는 재물 관련 리스크 신호는 없어"만 출력됨) |
| 후 | "재성도 많고 그걸 받아낼 그릇(일간)도 튼튼한 재다신강 구조라, 지금 재물 그릇 자체가 큰 편이야 — 아끼는 것보다 규모를 키우는 시도가 오히려 너한테 잘 맞는 타이밍이야." |
이번 고정 사주(신약)는 재다신약도 재다신강도 아닌 "신약-thin"(재성 옅음) 조합이라 실제 실행 결과(Exhibit 목록의 재물운 항목)엔 이 정확한 문장이 나오지 않는다. 재다신강 문장이 실제로 나오는지는 별도의 신강+재다 조합 사주(1980-01-03生, 남성, 자시)로 직접 재실행해서 확인했다 — 【그릇의 크기와 감당력】에 "일간이 강한데 재성까지 많아서, 돈이 커져도 휘둘리지 않고 잘 다루는 타입이야"가 실제로 출력됨.
9. 이번 확장 파일럿에서 변경하지 않은 부분
| 범위 | 상태 | 비고 |
|---|---|---|
월별 섹션(MONTH_TONE_SHORT 등, yearFortune 내부) | 미변경 | 이미 재물/관계/건강별로 도메인 차별화는 돼 있었음 — 방향성(생 받음/줌) 미구분 문제가 있는지는 미확인. |
신살 매핑(SINSAL_CASUAL) 전체 | 미변경 | 캐논과 무관한 별도 로직, 카테고리별 FOCUS 리스트만 필요시 재배치(결혼운에서 1건 함). |
| 궁합의 JIJI(지지 합충) 섹션 | 미변경 | OHEANG(오행) 축만 이번에 수정 — JIJI_FACT/NUANCE는 손대지 않음. |
공용 헬퍼(gyeokgukOneLiner, termGlossaryBlock, fourPillarStageLines 등) | 미변경 | 여러 카테고리가 공유 — 건드리면 파급 범위가 커서 이번 파일럿에서 의도적으로 보존. |
10. 한계 · 미확인
- 고정 사주 1쌍(+궁합용 상대 1명)으로만 실증했다. 각 카테고리의 신규 분기(예: 재물운 6조합, 직업운 5조합)는 코드 로직상 전부 매핑돼 있지만, 이번 고정 사주에서 실제로 지나간 경로만 눈으로 검수했다 — 나머지 조합은 로직 리뷰로만 확인(Exhibit 4처럼 일부는 별도 스팟체크).
- 궁합의 "상극 방향" 케이스는 이번 고정 쌍에서 실증되지 않았다. 민준(을목)·서연도 을목이라 두 사람이 비화(같은 오행) 관계였다 — 상극 방향 분리(내가 극함/눌림)는 코드는 존재하지만 이 리포트의 실제 출력 비교에는 반영되지 않았다. 다른 쌍으로 재검증이 필요하다.
- "카테고리 간 중복" 문제는 연애운↔결혼운 1쌍만 직접 확인했다. 재물운·직업운·이직운 사이에도 비슷한 잠재적 중복(예: 둘 다 "돈/일" 관련 오행·십성 데이터를 씀)이 있을 수 있는데, 이번엔 이직운↔직업운 1쌍만 다뤘고 나머지 조합은 점검하지 않았다.
- 월별 세부 섹션·신살·공용 헬퍼는 미확장 — 9장 표 참고.
src/soloReport.new.js/src/gunghapReport.new.js는 실험용 사본이라 앱 어디에서도 import되지 않는다 — 결정 전까지 프로덕션 동작에 아무 변화 없음.
11. 결론 및 적용 결과
9개 카테고리 전부에서 dohwadore_saju 증류 기법(구체적 물리 이미지 + 방향성 분리)을 적용해본 결과, 매번 같은 모양의 문제(반대 의미 두 경우를 한 버킷으로 뭉뚱그림)가 반복 발견됐고, 그중 하나(연애운↔결혼운)는 사용자가 처음 지적한 "카테고리 간 중복" 문제의 직접적인 사례였다. 부수적으로 실제 정확도 버그도 여러 건 찾아 같이 고쳤다(재다신강 케이스 누락, 정인·편인 0개를 balanced로 오분류 등).
src/soloReport.js, src/gunghapReport.js)에 병합하고 wrangler deploy로 실제 앱(https://ducksajutarot.jjujjuya1226.workers.dev)에 배포 완료했다. 배포 직후 /api/sample-report?key=yearFortune 실제 응답으로 새 문구가 라이브에 반영된 것까지 확인했다. 이 과정에서 워킹트리에 남아있던 무관한 미검증 변경(이모지 손그림 아이콘 기능)은 git stash로 잠시 빼놓고 사주 변경사항만 배포한 뒤 원상 복구해서, 의도치 않게 같이 배포되지 않도록 했다. GitHub에도 커밋·푸시 완료.