Phase X-BX' + X-C 계획 문서 정리
- PHASE-X-BX.md: 유형 B 미완료 6개 task 수행 방향 상세 (02번 먼저 → 03번 확장) - PHASE-X-C.md: 서브존 프리셋 기반 범용 레이아웃 방향 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
142
PHASE-X-C.md
Normal file
142
PHASE-X-C.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Phase X-C: 서브존 프리셋 기반 범용 레이아웃
|
||||
|
||||
> 최종 업데이트: 2026-04-07
|
||||
> 전제: Type A, Type B 건드리지 않음. Type C로 새 접근.
|
||||
> 의존: Phase X-BX' 완료 후 시작 (zone 기반 코드 전환 완료 필요)
|
||||
|
||||
---
|
||||
|
||||
## 핵심 아이디어
|
||||
|
||||
**AI는 "고르는 것"에만 쓰고, "만드는 것"은 코드가 한다.**
|
||||
|
||||
### 고정 구조
|
||||
|
||||
모든 슬라이드는 3개 zone:
|
||||
```
|
||||
┌───────────────────────────┐
|
||||
│ header (제목) │ ← 고정
|
||||
├───────────────────────────┤
|
||||
│ body (본문) │ ← 서브존 프리셋 적용
|
||||
├───────────────────────────┤
|
||||
│ footer (핵심 요약) │ ← 고정
|
||||
└───────────────────────────┘
|
||||
```
|
||||
|
||||
### 서브존 프리셋
|
||||
|
||||
body 안의 배치를 row 조합으로 정의:
|
||||
|
||||
```
|
||||
row 유형:
|
||||
F = 전체폭 (1칸)
|
||||
H = 2분할
|
||||
T = 3분할
|
||||
Q = 4분할
|
||||
|
||||
프리셋 예시:
|
||||
S1: F → 1단 전체폭
|
||||
S2: H → 2단 (좌/우)
|
||||
S3: T → 3단 균등
|
||||
S4: F+H → 상단 전체폭 + 하단 2분할 (현재 Type B에 해당)
|
||||
S5: H+F → 상단 2분할 + 하단 전체폭
|
||||
S6: H+H → 상하 각 2분할 (2x2)
|
||||
S7: F+T → 상단 전체폭 + 하단 3분할
|
||||
S8: T+F → 상단 3분할 + 하단 전체폭
|
||||
S9: F+F → 전체폭 2단 (현재 Type A에 가까움)
|
||||
```
|
||||
|
||||
### Kei 역할 (최소화)
|
||||
|
||||
1. **꼭지 추출** — 콘텐츠를 몇 개 덩어리로 나눌지
|
||||
2. **꼭지 간 관계** — 비교/나열/종속/독립
|
||||
3. **프리셋 선택** — 번호로 고르기 (또는 코드가 자동 매핑)
|
||||
|
||||
### 코드 역할
|
||||
|
||||
1. 프리셋 → zone/sub-zone px 계산 (사칙연산)
|
||||
2. 텍스트량 기반 비율 계산
|
||||
3. before→filled→after 파이프라인 (Selenium 측정 → 재배분)
|
||||
4. MDX 원본 텍스트 배치
|
||||
5. 블록 선택 (프리셋별 적합 블록 매핑)
|
||||
|
||||
---
|
||||
|
||||
## 질문: Kei가 프리셋을 고를 수 있는가?
|
||||
|
||||
### 자동 매핑 (코드가 결정) — 안정적이지만 제한적
|
||||
```python
|
||||
if len(topics) == 1: preset = "S1" # 1단
|
||||
if len(topics) == 2: preset = "S2" # 2분할
|
||||
if len(topics) == 3: preset = "S3" # 3단
|
||||
if len(topics) == 4: preset = "S6" # 2x2
|
||||
```
|
||||
→ 꼭지 관계 무시. 비교 3개 + 정리 1개 같은 경우 대응 못 함.
|
||||
|
||||
### Kei 선택 — 유연하지만 불안정 위험
|
||||
```json
|
||||
{"topics": [...], "preset": "S4", "reason": "상단 3개 비교 + 하단 종합"}
|
||||
```
|
||||
→ 블록 선택도 불안한데 프리셋 선택이 안정적일지 미지수.
|
||||
|
||||
### 하이브리드 (유력) — 코드가 후보 제시, Kei가 선택
|
||||
```
|
||||
코드: "꼭지 4개이므로 후보: S4, S6, S7"
|
||||
Kei: "비교 관계이므로 S4"
|
||||
```
|
||||
→ 선택지를 3개 이하로 좁히면 Kei가 잘 고를 가능성 높음.
|
||||
|
||||
---
|
||||
|
||||
## 기술적 구현 방향
|
||||
|
||||
### sub-zone px 계산
|
||||
|
||||
```python
|
||||
def calculate_sub_zones(preset: str, body_width: int, body_height: int, gap: int):
|
||||
rows = parse_preset(preset) # "F+H" → [F, H]
|
||||
row_count = len(rows)
|
||||
row_height = (body_height - gap * (row_count - 1)) // row_count
|
||||
|
||||
zones = []
|
||||
for i, row_type in enumerate(rows):
|
||||
col_count = {"F": 1, "H": 2, "T": 3, "Q": 4}[row_type]
|
||||
col_width = (body_width - gap * (col_count - 1)) // col_count
|
||||
for j in range(col_count):
|
||||
zones.append({
|
||||
"row": i, "col": j,
|
||||
"width": col_width, "height": row_height,
|
||||
})
|
||||
return zones
|
||||
```
|
||||
|
||||
### 비율 조정
|
||||
```python
|
||||
# 텍스트량 기반 비율
|
||||
text_lengths = [len(topic.text) for topic in row_topics]
|
||||
total = sum(text_lengths)
|
||||
ratios = [l / total for l in text_lengths]
|
||||
# 최소 20%, 최대 60% 제한
|
||||
ratios = [max(0.2, min(0.6, r)) for r in ratios]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 단계별 진행 계획
|
||||
|
||||
1. **X-C-1: 프리셋 정의** — S1~S9 구조 + px 계산 함수
|
||||
2. **X-C-2: 자동 매핑 먼저** — 꼭지 수 → 프리셋 (코드만으로)
|
||||
3. **X-C-3: 조립 범용화** — zone 기반으로 어떤 프리셋이든 조립
|
||||
4. **X-C-4: Kei 선택 실험** — 하이브리드 방식 테스트
|
||||
5. **X-C-5: before→filled→after 연결** — X-BX'의 zone 기반 코드 활용
|
||||
6. **X-C-6: 검증** — 01/02/03번 + 새 MDX로 범용성 테스트
|
||||
|
||||
---
|
||||
|
||||
## Type A/B와의 관계
|
||||
|
||||
- Type A, B는 기존 코드 그대로 유지
|
||||
- Type C는 별도 경로로 동작
|
||||
- 추후 Type C가 안정화되면 A/B를 C의 프리셋으로 흡수 가능:
|
||||
- Type A ≈ S9 (F+F) + sidebar
|
||||
- Type B ≈ S4 (F+H)
|
||||
Reference in New Issue
Block a user