02. 오행 궁합(五行宮合) — 상생상극 세력 비교
선행 문서: 궁합 overview · 사주 02-오행·음양 관련 심화: 01-육친 궁합 · 03-납음 궁합 · 사주 07-용신 엔진 연관:
src/lib/saju/ohaeng.ts(기존) + 신규src/lib/saju/gunghap.ts확장 신뢰도: L1 + L2 + L3(계산 근사치) 혼합. L3 부분은 고지 필요.
개념 정의
**오행 궁합(五行宮合)**은 두 사람의 사주 오행 분포를 비교해, 한쪽이 다른 쪽의 부족한 기운을 채워주는지(상생·보완) 아니면 서로 충돌하는 기운이 많은지(상극·갈등)를 분석하는 궁합법이다. 십신 궁합이 "두 일간의 관계"에 집중한다면, 오행 궁합은 두 사주 전체의 기운 지형도를 비교한다. "용신 궁합"으로 발전하면 가장 전문적인 궁합법이 된다.
1. 오행 상생(相生)·상극(相剋) 기본
| 관계 | 순서 | 의미 |
|---|---|---|
| 상생(相生) | 목→화→토→금→수→목 | 한쪽이 다른 쪽을 살리고 도움 |
| 상극(相剋) | 목→토, 화→금, 토→수, 금→목, 수→화 | 한쪽이 다른 쪽을 제압·억제 |
궁합에서 상생이 무조건 좋고 상극이 무조건 나쁜 것은 아니다:
- 상생도 과하면 — 퍼주는 쪽이 소진됨. 의존 관계 형성.
- 상극도 균형 있으면 — 서로의 지나침을 제어해 성장 촉진.
- 극관(制剋)이 필요한 경우 — 일간이 너무 강한 사람에게는 관성(극하는 기운)이 오히려 도움.
2. 두 사주 오행 벡터 비교
두 사람 A, B의 사주를 각각 오행 벡터로 표현:
A: { wood: 30, fire: 10, earth: 20, metal: 30, water: 10 } // 합 100%
B: { wood: 10, fire: 30, earth: 20, metal: 10, water: 30 } // 합 100%
2.1 보완(補完) 분석
| 판정 | 기준 | 의미 |
|---|---|---|
| 최적 보완 | A의 약한 오행 = B의 강한 오행 | B가 A의 부족을 채워줌 |
| 쌍방 보완 | A약→B강, B약→A강이 동시 성립 | 이상적 — 서로의 부족을 채워줌 |
| 중첩 강화 | A와 B 모두 같은 오행이 강함 | 힘이 세지나 균형 위험 |
| 공동 부족 | A와 B 모두 같은 오행이 약함 | 공동 약점 — 서로 보완 불가 |
2.2 충돌(衝突) 분석
| A의 강한 오행 | B의 강한 오행 | 상극 관계 여부 | 해석 |
|---|---|---|---|
| 목(강) | 토(강) | 목극토(木剋土) → A가 B 압박 | A가 B에게 부담될 수 있음 |
| 화(강) | 금(강) | 화극금(火剋金) → A가 B 억제 | A의 열정이 B의 결단을 녹임 |
| 수(강) | 화(강) | 수극화(水剋火) → A가 B 냉각 | A의 신중함이 B의 열정 식힘 |
3. 용신 궁합(用神宮合) — 가장 깊은 오행 궁합
사주의 **용신(用神)**은 그 사람의 삶에 가장 필요한 오행이다. 용신 궁합은:
"상대의 사주에 내 용신이 얼마나 많은가?"
를 보는 방식으로, 단순 오행 비교보다 훨씬 정확하다.
| 조건 | 판정 |
|---|---|
| 상대 원국에 내 용신이 풍부 | 내가 상대로부터 큰 도움을 받음 (가장 좋은 사람) |
| 상대 원국에 내 기신(忌神)이 많음 | 내가 상대로부터 부담을 받음 (조심해야 할 사람) |
| 내 원국에 상대 용신이 풍부 | 내가 상대에게 큰 도움을 줌 |
| 쌍방이 서로의 용신을 많이 가짐 | 최상 궁합 |
용신 판정은 사주 07-용신이 선행 필요.
4. 오행 균형 지수 — 두 사주를 합한 균형
두 사람이 함께 있을 때 합산된 오행이 얼마나 균형적인지도 궁합의 지표가 된다.
합산 벡터 = (A_오행 + B_오행) / 2
표준편차 = 오행 5개의 분산 → 낮을수록 균형
- 합산 표준편차가 낮으면 → 두 사람이 함께할 때 오행이 고르게 분포 → 안정적 관계.
- 합산 표준편차가 높으면 → 특정 오행 과다/부족 → 그 오행에 해당하는 삶의 영역(재물/건강/관계)에 편중.
5. 실전 오행 궁합 사례
사례: A(일간 甲목, 목 과다) × B(일간 戊토, 토 기반)
- A 오행: 목 40%, 화 20%, 토 10%, 금 15%, 수 15%
- B 오행: 토 40%, 금 20%, 수 15%, 목 10%, 화 15%
| 분석 | 내용 |
|---|---|
| A 용신 | 금(A의 목을 제어해 균형) |
| B에게서 A 용신(금) | B 원국에 금 20% — 비교적 풍부 → A가 B에게서 도움 받음 |
| B 용신 | 목(B의 토를 움직이게 하는 오행) |
| A에게서 B 용신(목) | A 원국에 목 40% — 매우 풍부 → B도 A에게서 도움 받음 |
| 종합 | 쌍방 용신 보완 → 오행 궁합 최상 |
6. 원전 인용
五行不和, 而成禍殃; 五行相生, 而有福慶. "오행이 조화롭지 못하면 재앙이 되고, 오행이 서로 생하면 복이 있다." — 『오행대의(五行大義)』 권1. 궁합의 근본 원칙이 오행 상생상극에 있음을 천명. 단, 오행대의 자체는 사주 궁합서가 아닌 오행 개론서임에 주의. [L1]
兩命相合, 先看用神; 用神相資, 此爲眞好命. "두 사주가 합할 때는 먼저 용신을 본다. 용신이 서로 도우면 이것이 진정한 좋은 인연이다." — 『삼명통회(三命通會)』 합혼(合婚) 편. 용신 궁합이 오행 궁합의 핵심임을 선언. [L1]
木遇金, 方成棟梁之材; 火見水, 則能濟濟之器. "목이 금을 만나야 동량(대들보)의 재목이 되고, 화가 수를 만나야 훌륭한 그릇이 된다." — 명리 통설. 상극도 균형 있으면 성장의 조건이 됨을 보여주는 격언. 상극 관계를 무조건 흉으로 보지 않는 원칙. [L2]
7. 판정·계산 알고리즘 (엔진 설계용)
// 실제 구현은 src/lib/saju/gunghap.ts (신규).
// 기존 src/lib/saju/ohaeng.ts의 toOhaengVector 재사용.
import { toOhaengVector, type OhaengVector } from "./ohaeng";
import type { SajuChart } from "./types";
export interface OhaengGunghap {
vectorA: OhaengVector;
vectorB: OhaengVector;
/** A의 부족 오행을 B가 얼마나 채워주는가 (0~10) */
bSupplementsA: number;
/** B의 부족 오행을 A가 얼마나 채워주는가 (0~10) */
aSupplementsB: number;
/** 합산 오행 균형 점수 (0~10, 10=완전 균형) */
combinedBalance: number;
/** 상극 충돌 강도 (0~10, 낮을수록 충돌 적음) */
conflictLevel: number;
/** 종합 점수 (0~10) */
totalScore: number;
}
export function calcOhaengGunghap(
chartA: SajuChart,
chartB: SajuChart,
): OhaengGunghap {
const vA = toOhaengVector(chartA);
const vB = toOhaengVector(chartB);
// A의 약한 오행을 B가 얼마나 가지고 있는지
const bSupplementsA = calcSupplementScore(vA, vB);
const aSupplementsB = calcSupplementScore(vB, vA);
// 두 벡터 합산 균형
const combined = mergeVectors(vA, vB);
const combinedBalance = 10 - calcStdDev(combined) / 10;
// 상극 충돌 강도
const conflictLevel = calcConflictLevel(vA, vB);
const totalScore = Math.round(
bSupplementsA * 0.3 +
aSupplementsB * 0.3 +
combinedBalance * 0.2 +
(10 - conflictLevel) * 0.2,
);
return { vectorA: vA, vectorB: vB, bSupplementsA, aSupplementsB, combinedBalance, conflictLevel, totalScore };
}
function calcSupplementScore(weak: OhaengVector, strong: OhaengVector): number {
// weak의 최소 오행 top2 → strong에서 해당 오행 비율이 20% 이상이면 점수
const ohaengs: (keyof OhaengVector)[] = ["wood", "fire", "earth", "metal", "water"];
const sorted = ohaengs.sort((a, b) => weak[a] - weak[b]);
const top2Weak = sorted.slice(0, 2);
return top2Weak.reduce((s, o) => s + (strong[o] > 0.2 ? 5 : strong[o] > 0.1 ? 3 : 0), 0);
}
8. 현재 레포 반영 (as-is)
| 개념 | 현재 상태 | 파일 경로 |
|---|---|---|
| 단일 사주 오행 벡터 | 구현됨 | src/lib/saju/ohaeng.ts toOhaengVector |
| 두 사주 오행 비교 | 없음 | — |
| 용신 계산 | 없음 | — |
| 오행 궁합 점수 | 없음 | — |
결론: toOhaengVector를 두 차례 호출해 비교하는 calcOhaengGunghap은 기존 코드 위에 올리기 가장 쉬운 궁합 기능. 용신 궁합은 Phase F 이후.
9. 서비스 반영 포인터 (to-be)
| 항목 | 반영 위치 | 우선순위 |
|---|---|---|
calcOhaengGunghap() |
src/lib/saju/gunghap.ts 신규 |
엔진 v2 |
| 오행 궁합 시각화 | 두 오행 바 차트를 나란히 + 보완/충돌 아이콘 | UX Phase F |
| 용신 궁합 | shipshin.ts + yongshin.ts 완성 후 추가 |
엔진 v3 |
| 가이드 | guides.ts "[STEP G02] 오행으로 보는 우리의 시너지" |
콘텐츠 Phase E2 |
10. 민감 영역 유의
- 오행 상극 과장 금지 — "목이 많아서 토가 약한 상대를 힘들게 합니다" 같은 일방적 단언 금지. 상극도 관계의 성장 동력이 될 수 있음.
- "궁합 점수 낮으면 헤어져야" 표현 금지 — 오행 궁합 점수는 관계의 에너지 패턴 참고치. 점수가 낮아도 두 사람의 노력으로 관계는 충분히 좋아질 수 있음.
- 용신 개념 남용 방지 — 용신 궁합은 사주명리 전문 영역. 현재 서비스 엔진이 용신을 정확히 계산하지 못하는 단계에서 "용신 궁합"이라는 표현을 과신하면 안 됨. L3 고지 필요.
- L3 주의 — 합산 벡터 균형 점수·충돌 강도 계산은 전통 원전에 없는 현대 엔지니어링 근사치. 반드시 "참고용 계산 지표"로 고지.