LectureBuilder — PPTX 템플릿 설계 (슬라이드 마스터)

목적

Skills API (skill_id: "pptx")가 사용할 PPTX 템플릿 파일의 설계 명세. 이 문서를 기반으로 python-pptx로 베이스 템플릿 2개를 생성한 뒤, Skills API에 전달해 TCELS 유형별 슬라이드를 자동 채운다.


1. 슬라이드 규격

항목
비율16:9
해상도1280 × 720 px (96 DPI)
기본 언어한국어 (ko-KR)
파일 포맷.pptx (PowerPoint Open XML)
슬라이드 마스터테마별 1개 마스터 + TCELS 5종 레이아웃

2. 테마 A — 데이터분석 (파랑)

컬러 시스템

역할이름HEX용도
PrimaryNavy#1E3A6E헤더 바, Title 슬라이드 배경, 강조 테두리
SecondaryBlue#2E86C1섹션 헤더, 아이콘 색상
AccentAmber#F39C12핵심 키워드 하이라이트, Lab 슬라이드 아이콘
BackgroundCloud#F5F8FF일반 슬라이드 배경
SurfaceWhite#FFFFFF콘텐츠 카드 배경
Text-PrimaryDark Navy#1A1A2E본문 주요 텍스트
Text-SecondaryGray#4A5568캡션, 보조 설명
Code-BGIce#EBF5FB코드 블록 배경
SuccessTeal#1ABC9C체크리스트 완료 아이콘

폰트

용도폰트크기굵기
슬라이드 대제목Pretendard40ptBold
섹션 제목Pretendard28ptSemiBold
본문Pretendard18ptRegular
강조Pretendard18ptBold
캡션·주석Pretendard13ptRegular
코드D2Coding16ptRegular
Fallback나눔고딕(동일)

3. 테마 B — 생성형 AI (보라)

컬러 시스템

역할이름HEX용도
PrimaryDeep Purple#4A0E8F헤더 바, Title 슬라이드 배경
SecondaryViolet#7B2FBE섹션 헤더, 아이콘 색상
AccentMagenta#E91E8C핵심 키워드 하이라이트, Lab 슬라이드 아이콘
BackgroundLavender#FAF8FF일반 슬라이드 배경
SurfaceWhite#FFFFFF콘텐츠 카드 배경
Text-PrimaryDark Indigo#1A0A2E본문 주요 텍스트
Text-SecondarySlate#553C7B캡션, 보조 설명
Code-BGSoft Purple#F3E8FF코드 블록 배경
SuccessEmerald#10B981체크리스트 완료 아이콘

폰트

테마 A와 동일 (Pretendard + D2Coding + fallback 나눔고딕)


4. 공통 레이아웃 구조 (1280×720)

┌─────────────────────────────────────────────┐
│ [Header Bar] 40px — Primary색, 모듈명 + ObjID  │
├─────────────────────────────────────────────┤
│                                              │
│  [Content Area]  580px                       │
│  (슬라이드 유형별 레이아웃)                       │
│                                              │
├─────────────────────────────────────────────┤
│ [Footer] 40px — Text-Secondary, 슬라이드 번호  │
└─────────────────────────────────────────────┘
영역Y 위치높이내용
Header Bar0px40px왼쪽: 모듈명·Objective ID / 오른쪽: 테마 로고
Content Area40px620pxTCELS 유형별 다름
Footer680px40px왼쪽: 과목명 / 오른쪽: n/N

5. TCELS 유형별 슬라이드 레이아웃

T (Title) — 학습목표 선언

배경: Primary 색상 Full-bleed (어두운 단색)
┌─────────────────────────────────────────────┐
│  [Objective Badge]  Accent색 둥근 태그       │  80px
│  e.g. "Objective 1-1"                        │
├─────────────────────────────────────────────┤
│                                              │
│  [슬라이드 대제목]  40pt Bold, 흰색           │  180px
│  "Python 타입 힌트 이해 및 적용"              │
│                                              │
├─────────────────────────────────────────────┤
│  [학습목표 박스]  반투명 흰색 카드             │  200px
│  "이 강의를 마치면:"                          │
│  ✓ Python 3.7+ 타입 힌트를 적용하여           │
│    AI-native 코드를 작성할 수 있다.            │
├─────────────────────────────────────────────┤
│  [메타 정보]  작게, 흰색 50% 투명도            │  100px
│  난이도: 중급 | 슬라이드: 8장 | 실습: 3시간    │
└─────────────────────────────────────────────┘

C (Concept) — 핵심 이론 설명

레이아웃 2가지 선택 (콘텐츠에 따라):

C-Full (텍스트 중심):

┌─────────────────────────────────────────────┐
│ Header Bar (슬라이드 제목, Secondary색)       │  60px
├─────────────────────────────────────────────┤
│                                              │
│  [본문 영역]  전체 너비                       │  500px
│  • 항목1 (18pt)                              │
│  • 항목2                                     │
│  • 항목3                                     │
│                                              │
│  [코드 or 박스 강조]  Code-BG 배경 카드       │  (선택)
│                                              │
└─────────────────────────────────────────────┘

C-Split (텍스트 + 다이어그램):

┌────────────────────┬────────────────────────┐
│ Header Bar (전체 너비)                        │  60px
├────────────────────┼────────────────────────┤
│ [왼쪽: 본문] 55%   │ [오른쪽: 이미지/다이어그램] 45% │
│ • 개념 설명        │  Mermaid 다이어그램     │  500px
│ • 핵심 포인트      │  또는 비교표            │
│                    │  또는 스크린샷          │
└────────────────────┴────────────────────────┘

E (Example) — 코드·사례 예제

┌─────────────────────────────────────────────┐
│ Header Bar (Accent색 테두리 + "예제" 뱃지)    │  60px
├─────────────────────────────────────────────┤
│ [코드 블록]  Code-BG 배경, D2Coding 16pt     │  360px
│ ┌─────────────────────────────────────────┐ │
│ │ def process(data: list[int]) -> float:  │ │
│ │     ...                                 │ │
│ └─────────────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ [설명 영역]  핵심 포인트 2-3개 (18pt)         │  160px
│ ① 타입 힌트로 list[int] 명시                  │
│ ② 반환 타입 float 선언                        │
└─────────────────────────────────────────────┘

L (Lab) — 실습 지시

배경: Background + 왼쪽 Accent색 세로 줄 (8px)
┌─────────────────────────────────────────────┐
│ 🔬 [실습 제목]  Accent색 아이콘 + 굵은 제목    │  80px
├──────────────────────┬──────────────────────┤
│ [단계별 지시] 60%     │ [실습 정보] 40%       │  460px
│ Step 1. ... (20분)   │ 난이도: 중급          │
│ Step 2. ... (30분)   │ 시간: 180분           │
│ Step 3. ... (45분)   │ 데이터: users.csv     │
│ Step 4. ... (45분)   │ (1,000행)             │
│                      │                       │
│                      │ 예상 결과:            │
│                      │ • 모든 함수에 타입 명시 │
│                      │ • mypy 검증 통과       │
└──────────────────────┴──────────────────────┘

S (Summary) — 핵심 정리

배경: Primary색 10% 투명도 (연한 테마색)
┌─────────────────────────────────────────────┐
│ [섹션 제목] "핵심 정리"  Secondary색 굵은 글씨  │  60px
├────────────────────┬────────────────────────┤
│ [키워드 박스] 50%   │ [체크리스트] 50%        │  300px
│ ┌──────────────┐   │ ✅ 타입 힌트 문법 적용    │
│ │ 타입 힌트    │   │ ✅ IDE 자동완성 활용      │
│ │ PEP 484      │   │ ✅ FastAPI 통합 이해      │
│ │ 제네릭       │   │                          │
│ │ IDE 지원     │   │                          │
│ └──────────────┘   │                          │
├─────────────────────────────────────────────┤
│ [다음 연결] "다음 → Objective 1-2: 비동기"   │  80px
│ Accent색 화살표 + Secondary색 텍스트          │
└─────────────────────────────────────────────┘

6. Skills API 연동 Markdown 입력 포맷

Skills API에 전달할 Markdown 구조 (각 슬라이드 --- 구분):

<!-- TEMPLATE: data-analytics -->
<!-- THEME: blue -->
 
---
<!-- TYPE: T | OBJ: 1-1 | SLIDES: 8 -->
# Python 타입 힌트 이해 및 적용
 
**Objective 1-1** | 난이도: 중급 | 실습: 3시간
 
> 이 강의를 마치면: Python 3.7+ 타입 힌트와 제네릭을 활용하여 AI-native 데이터분석 코드를 작성할 수 있다.
 
---
<!-- TYPE: C | TITLE: Python 타입 시스템 진화 -->
## Python 타입 시스템의 역사
 
- **Python 2**: 타입 힌트 없음, 런타임 오류 다발
- **PEP 484 (2014)**: `typing` 모듈 도입 — 첫 공식 타입 힌트
- **PEP 526 (2016)**: 변수 어노테이션 (`x: int = 5`)
- **PEP 585 (2019)**: 내장 타입 제네릭 (`list[int]` 대신 `List[int]`)
- **PEP 604 (2020)**: 유니온 단축 (`int | None`)
 
> 트렌드: 타입 안전성 강화 ↑ — AI-native 코드에서 필수
 
---
<!-- TYPE: C | TITLE: 기본 타입 문법 | LAYOUT: split -->
## 기본 타입 힌트 문법
 
- `int`, `str`, `float`, `bool` — 기본 스칼라
- `list[int]`, `dict[str, int]` — 컨테이너 타입
- `Optional[str]` = `str | None` — 선택적 파라미터
- `tuple[int, str, float]` — 고정 길이 튜플
 
```python
def greet(name: str, age: int) -> str:
    return f"안녕하세요, {name}님 ({age}세)"


---

## 7. python-pptx 베이스 템플릿 생성 코드 (핵심 구조)

```python
from pptx import Presentation
from pptx.util import Pt, Emu
from pptx.dml.color import RGBColor

THEMES = {
    "data-analytics": {
        "primary":    RGBColor(0x1E, 0x3A, 0x6E),  # #1E3A6E Navy
        "secondary":  RGBColor(0x2E, 0x86, 0xC1),  # #2E86C1 Blue
        "accent":     RGBColor(0xF3, 0x9C, 0x12),  # #F39C12 Amber
        "background": RGBColor(0xF5, 0xF8, 0xFF),  # #F5F8FF Cloud
        "text":       RGBColor(0x1A, 0x1A, 0x2E),  # #1A1A2E Dark Navy
        "code_bg":    RGBColor(0xEB, 0xF5, 0xFB),  # #EBF5FB Ice
    },
    "generative-ai": {
        "primary":    RGBColor(0x4A, 0x0E, 0x8F),  # #4A0E8F Deep Purple
        "secondary":  RGBColor(0x7B, 0x2F, 0xBE),  # #7B2FBE Violet
        "accent":     RGBColor(0xE9, 0x1E, 0x8C),  # #E91E8C Magenta
        "background": RGBColor(0xFA, 0xF8, 0xFF),  # #FAF8FF Lavender
        "text":       RGBColor(0x1A, 0x0A, 0x2E),  # #1A0A2E Dark Indigo
        "code_bg":    RGBColor(0xF3, 0xE8, 0xFF),  # #F3E8FF Soft Purple
    },
}

SLIDE_SIZES = {"width": Emu(9144000), "height": Emu(5143500)}  # 16:9

def create_base_template(theme_name: str, output_path: str):
    """TCELS 5종 레이아웃을 가진 베이스 PPTX 템플릿 생성."""
    prs = Presentation()
    prs.slide_width = SLIDE_SIZES["width"]
    prs.slide_height = SLIDE_SIZES["height"]
    theme = THEMES[theme_name]
    # ... 슬라이드 마스터 & 레이아웃 정의
    prs.save(output_path)

8. 파일 산출물 목록

파일생성 방법용도
templates/base-data-analytics.pptxpython-pptxSkills API 입력 템플릿 (파랑)
templates/base-generative-ai.pptxpython-pptxSkills API 입력 템플릿 (보라)
output/module-N-data-analytics.pptxSkills API모듈별 생성 슬라이드
output/module-N-generative-ai.pptxSkills API모듈별 생성 슬라이드
final/lecture-slides-data-analytics-180.pptxpython-pptx 병합최종 납품물
final/lecture-slides-generative-ai-120.pptxpython-pptx 병합최종 납품물

관련 페이지