최종 프로젝트 WBS와 기획서 작성 안내 추가
This commit is contained in:
1 parent
062e0f22ca
commit
8892598525
4 files changed
+1075
No files matched your search
@@ -0,0 +1,517 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="ko">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>WBS 잘 쓰는 법</title>
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700;900&family=JetBrains+Mono:wght@400;600&display=swap">
|
||||||
|
<style>
|
||||||
|
@page { size: 1920px 1080px; margin: 0; }
|
||||||
|
* { box-sizing: border-box; margin: 0; }
|
||||||
|
html, body { background: #1B1E24; height: 100%; overflow: hidden; }
|
||||||
|
body { display: flex; align-items: center; justify-content: center; }
|
||||||
|
.frame { width: min(100vw, calc(100vh * 16 / 9)); aspect-ratio: 16 / 9; position: relative; overflow: hidden;
|
||||||
|
display: none; }
|
||||||
|
.frame.active { display: block; }
|
||||||
|
.nav { position: fixed; right: 16px; bottom: 12px; display: flex; gap: 8px; align-items: center;
|
||||||
|
font: 14px 'JetBrains Mono', 'Noto Sans CJK KR', monospace; color: #C9D3E3; opacity: .25; transition: opacity .2s; }
|
||||||
|
.nav:hover, body.moved .nav { opacity: .9; }
|
||||||
|
.nav button { background: #2B2F36; color: #F7F6F2; border: 1px solid #4A5D80; border-radius: 6px;
|
||||||
|
width: 36px; height: 32px; font-size: 16px; cursor: pointer; }
|
||||||
|
.nav button:hover { background: #E8833A; color: #14213D; }
|
||||||
|
.progress { position: fixed; left: 0; bottom: 0; height: 4px; background: #E8833A; transition: width .2s; }
|
||||||
|
.slide { width: 1920px; height: 1080px; transform-origin: 0 0; position: absolute; left: 0; top: 0; }
|
||||||
|
.slide > section { width: 1920px; height: 1080px; position: relative; overflow: hidden;
|
||||||
|
font-family: 'Noto Sans KR', 'Noto Sans CJK KR', Arial, sans-serif; }
|
||||||
|
section [style*="JetBrains"] { }
|
||||||
|
h1, h2, h3, p, li, td, th { font-family: inherit; }
|
||||||
|
ul, ol { padding-left: 1.3em; }
|
||||||
|
table { border-collapse: collapse; width: 100%; }
|
||||||
|
th, td { padding: 0.35em 0.6em; text-align: left; border-bottom: 1px solid #E2E0D8; vertical-align: top; }
|
||||||
|
@media print {
|
||||||
|
html, body { background: none; padding: 0; gap: 0; display: block; height: auto; overflow: visible; }
|
||||||
|
.nav, .progress { display: none; }
|
||||||
|
.frame { display: block !important; width: 1920px; height: 1080px; break-after: page; }
|
||||||
|
.slide { transform: none !important; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="frame"><div class="slide"><section id="cover" style="background:#14213D;color:#F7F6F2;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px;display:flex;flex-direction:column;justify-content:center;gap:40px">
|
||||||
|
<div style="position:absolute;left:0;top:0;width:24px;height:1080px;background:#E8833A"></div>
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:28px;color:#F2A66B;letter-spacing:4px">AIO 1기 · FINAL PROJECT · GUIDE</p>
|
||||||
|
<h1 style="font-size:112px;font-weight:900;line-height:1.1">WBS<br>잘 쓰는 법</h1>
|
||||||
|
<p style="font-size:36px;color:#C9D3E3;line-height:1.4">해야 할 일을 빠짐없이 쪼개고, 끝까지 관리하기</p>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<p style="font-size:28px;color:#14213D;background:#E8833A;padding:12px 24px;border-radius:8px">쪼개기 → 추정하기 → 배치하기 → 관리하기</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="what" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:48px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WHAT IS WBS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">WBS는 해야 할 일 전체의 지도입니다</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px;background:#14213D;border-radius:16px;padding:36px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:44px;font-weight:600;color:#F2A66B">W</p>
|
||||||
|
<h3 style="font-size:34px;font-weight:700;color:#F7F6F2">Work</h3>
|
||||||
|
<p style="font-size:26px;color:#C9D3E3;line-height:1.5">프로젝트가 만들어 내야 할 결과물과 그에 필요한 일</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px;background:#14213D;border-radius:16px;padding:36px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:44px;font-weight:600;color:#F2A66B">B</p>
|
||||||
|
<h3 style="font-size:34px;font-weight:700;color:#F7F6F2">Breakdown</h3>
|
||||||
|
<p style="font-size:26px;color:#C9D3E3;line-height:1.5">관리할 수 있는 크기가 될 때까지 쪼갠다</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px;background:#14213D;border-radius:16px;padding:36px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:44px;font-weight:600;color:#F2A66B">S</p>
|
||||||
|
<h3 style="font-size:34px;font-weight:700;color:#F7F6F2">Structure</h3>
|
||||||
|
<p style="font-size:26px;color:#C9D3E3;line-height:1.5">위에서 아래로 이어지는 계층 구조로 정리한다</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:32px;line-height:1.5;color:#14213D">WBS는 먼저 <b>“무엇을”</b>을 정합니다. 일정과 담당자는 그 위에 얹는 정보입니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">02 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="why" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WHY WBS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">WBS가 있으면 달라지는 네 가지</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:24px">
|
||||||
|
<div style="display:flex;gap:24px;align-items:flex-start;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:16px;padding:32px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:48px;height:48px" aria-label="Search"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.35-4.35"/></svg><div style="flex:1;display:flex;flex-direction:column;gap:8px"><h3 style="font-size:32px;font-weight:700">빠진 일이 보인다</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">테스트, 문서, 발표 준비처럼 잊기 쉬운 일을 미리 찾는다</p></div></div>
|
||||||
|
<div style="display:flex;gap:24px;align-items:flex-start;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:16px;padding:32px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:48px;height:48px" aria-label="Chart"><path d="M3 3v18h18"/><path d="M7 16v-4"/><path d="M12 16V8"/><path d="M17 16v-7"/></svg><div style="flex:1;display:flex;flex-direction:column;gap:8px"><h3 style="font-size:32px;font-weight:700">진행이 보인다</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">“거의 다 했어요” 대신 몇 개 중 몇 개가 끝났는지로 말한다</p></div></div>
|
||||||
|
<div style="display:flex;gap:24px;align-items:flex-start;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:16px;padding:32px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:48px;height:48px" aria-label="Users"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg><div style="flex:1;display:flex;flex-direction:column;gap:8px"><h3 style="font-size:32px;font-weight:700">공정하게 나눈다</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">누가 무엇을 맡았는지 분명해지고 개인 기여가 기록된다</p></div></div>
|
||||||
|
<div style="display:flex;gap:24px;align-items:flex-start;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:16px;padding:32px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:48px;height:48px" aria-label="Clock"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg><div style="flex:1;display:flex;flex-direction:column;gap:8px"><h3 style="font-size:32px;font-weight:700">기간을 추정할 수 있다</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">작게 쪼갠 일은 얼마나 걸릴지 예측하기 쉽다</p></div></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">03 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="compare" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WBS VS OTHERS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">할 일 목록, 간트 차트와 무엇이 다른가</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:27px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:22%;color:#F7F6F2">도구</th><th style="width:38%;color:#F7F6F2">답하는 질문</th><th style="width:40%;color:#F7F6F2">한계</th></tr>
|
||||||
|
<tr><td>할 일 목록</td><td>지금 뭘 해야 하지?</td><td>전체 범위와 구조가 안 보인다</td></tr>
|
||||||
|
<tr style="background:#FBE3CF"><td><b>WBS</b></td><td><b>무엇을 다 해야 끝나지?</b></td><td>날짜와 순서는 따로 얹어야 한다</td></tr>
|
||||||
|
<tr><td>간트 차트</td><td>언제, 어떤 순서로 하지?</td><td>WBS 없이 그리면 일이 빠진다</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>칸반 보드</td><td>지금 어디까지 왔지?</td><td>전체 계획 대비 진척은 약하다</td></tr>
|
||||||
|
</table>
|
||||||
|
<p style="font-size:30px;color:#4A5568;line-height:1.5">순서는 <b>WBS로 범위 확정 → 간트로 일정 배치 → 칸반으로 매일 진행 관리</b>입니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">04 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="rule100" style="background:#14213D;color:#F7F6F2;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#F2A66B;letter-spacing:2px">RULE #1</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">100% 규칙 — 빠짐없이, 겹침없이</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:48px;align-items:center">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:16px">
|
||||||
|
<p style="font-size:44px;font-weight:700;line-height:1.35">하위 항목을 모두 더하면 <span style="color:#F2A66B">정확히 상위 항목 전체</span>가 되어야 합니다.</p>
|
||||||
|
<ul style="font-size:28px;color:#C9D3E3;line-height:1.6">
|
||||||
|
<li>빠진 일이 있으면 → 계획에 없는 일이 나중에 터진다</li>
|
||||||
|
<li>겹치는 일이 있으면 → 두 사람이 같은 일을 하거나 아무도 안 한다</li>
|
||||||
|
<li>범위 밖의 일이 있으면 → 그 일은 WBS에서 지운다</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div style="width:520px;display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-size:28px;font-weight:700;text-align:center;background:#E8833A;color:#14213D;padding:18px;border-radius:10px">2. 백엔드 API = 100%</p>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px">
|
||||||
|
<p style="font-size:24px;text-align:center;background:#1F2E4F;padding:16px;border-radius:10px">2.1 API 설계</p>
|
||||||
|
<p style="font-size:24px;text-align:center;background:#1F2E4F;padding:16px;border-radius:10px">2.2 DB 스키마</p>
|
||||||
|
<p style="font-size:24px;text-align:center;background:#1F2E4F;padding:16px;border-radius:10px">2.3 인증 기능</p>
|
||||||
|
<p style="font-size:24px;text-align:center;background:#1F2E4F;padding:16px;border-radius:10px">2.4 대화 API</p>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:24px;color:#9AA8BF;text-align:center">네 개를 다 끝내면 2번이 끝난다</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#9AA8BF">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#9AA8BF;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">05 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="deliverable" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">RULE #2</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">위는 결과물(명사), 아래는 작업(동사)</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;border-top:8px solid #E8833A;border-radius:12px;padding:32px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">상위 레벨 = 결과물</h3>
|
||||||
|
<p style="font-size:26px;color:#4A5568;line-height:1.5">끝났을 때 손에 쥐는 것</p>
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:26px;color:#14213D;line-height:1.7">인증 기능<br>API 설계 문서<br>배포 환경</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;border-top:8px solid #2F5D8C;border-radius:12px;padding:32px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">최하위 레벨 = 작업</h3>
|
||||||
|
<p style="font-size:26px;color:#4A5568;line-height:1.5">그 결과물을 만들기 위해 하는 일</p>
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:26px;color:#14213D;line-height:1.7">JWT 발급 API 구현<br>엔드포인트 목록 작성<br>Dockerfile 작성</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:30px;color:#4A5568;line-height:1.5">“백엔드 공부하기”처럼 결과물이 없는 항목은 작업이 아닙니다. <b>무엇이 남는지</b>로 바꿔 쓰세요.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">06 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="tree" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">EXAMPLE · AI 상담 챗봇 서비스</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">계층 구조 예시</h2>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:28px;font-weight:700;color:#F7F6F2;background:#14213D;padding:16px 24px;border-radius:10px">LEVEL 1 · AI 상담 챗봇 서비스</p>
|
||||||
|
<div style="display:grid;grid-template-columns:repeat(6, 1fr);gap:12px">
|
||||||
|
<p style="font-size:24px;text-align:center;background:#FFFFFF;border:1px solid #C9CCD1;padding:14px 8px;border-radius:8px">1 기획</p>
|
||||||
|
<p style="font-size:24px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:14px 8px;border-radius:8px">2 백엔드 API</p>
|
||||||
|
<p style="font-size:24px;text-align:center;background:#FFFFFF;border:1px solid #C9CCD1;padding:14px 8px;border-radius:8px">3 AI 에이전트</p>
|
||||||
|
<p style="font-size:24px;text-align:center;background:#FFFFFF;border:1px solid #C9CCD1;padding:14px 8px;border-radius:8px">4 화면</p>
|
||||||
|
<p style="font-size:24px;text-align:center;background:#FFFFFF;border:1px solid #C9CCD1;padding:14px 8px;border-radius:8px">5 배포·테스트</p>
|
||||||
|
<p style="font-size:24px;text-align:center;background:#FBE3CF;border:1px solid #E8833A;padding:14px 8px;border-radius:8px">6 프로젝트 관리</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C">LEVEL 3 · 작업 패키지 (2번 아래)</p>
|
||||||
|
<p style="font-size:24px;background:#FFFFFF;padding:12px 18px;border-radius:8px">2.1 API 설계 문서</p>
|
||||||
|
<p style="font-size:24px;background:#FFFFFF;padding:12px 18px;border-radius:8px">2.2 DB 스키마</p>
|
||||||
|
<p style="font-size:24px;color:#F7F6F2;background:#2F5D8C;padding:12px 18px;border-radius:8px">2.3 인증 기능</p>
|
||||||
|
<p style="font-size:24px;background:#FFFFFF;padding:12px 18px;border-radius:8px">2.4 대화 API</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C">LEVEL 4 · 작업 (2.3 아래)</p>
|
||||||
|
<p style="font-size:24px;background:#FFFFFF;padding:12px 18px;border-radius:8px">2.3.1 회원가입 API 구현</p>
|
||||||
|
<p style="font-size:24px;background:#FFFFFF;padding:12px 18px;border-radius:8px">2.3.2 JWT 발급·검증 구현</p>
|
||||||
|
<p style="font-size:24px;background:#FFFFFF;padding:12px 18px;border-radius:8px">2.3.3 인증 테스트 작성</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">07 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="size" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">HOW SMALL</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">얼마나 잘게 쪼갤까</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:8px;background:#14213D;border-radius:16px;padding:36px">
|
||||||
|
<p style="font-size:72px;font-weight:900;color:#F2A66B;line-height:1.1">1~3일</p>
|
||||||
|
<p style="font-size:28px;color:#C9D3E3;line-height:1.5">한 작업의 권장 크기 — 하루 단위로 진행을 확인할 수 있게</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1.3;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;border-radius:16px;padding:36px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">이 질문에 모두 “예”면 그만 쪼갭니다</h3>
|
||||||
|
<ul style="font-size:26px;color:#14213D;line-height:1.6">
|
||||||
|
<li>한 사람이 맡을 수 있는가?</li>
|
||||||
|
<li>얼마나 걸릴지 감이 오는가?</li>
|
||||||
|
<li>끝났는지 누구나 확인할 수 있는가?</li>
|
||||||
|
<li>다른 사람에게 설명 없이 넘길 수 있는가?</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:20px">
|
||||||
|
<p style="flex:1;font-size:26px;color:#7A3A10;background:#FBE3CF;padding:16px 24px;border-radius:8px"><b>너무 크면</b> — “백엔드 개발” 같은 항목은 몇 주째 진행 중</p>
|
||||||
|
<p style="flex:1;font-size:26px;color:#14213D;background:#FFFFFF;border:1px solid #C9CCD1;padding:16px 24px;border-radius:8px"><b>너무 작으면</b> — 관리하는 데 일하는 시간보다 더 든다</p>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">08 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="naming" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">NAMING</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">작업 이름은 동사 + 대상 + 범위</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:27px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:38%;color:#F7F6F2">모호한 이름</th><th style="width:62%;color:#F7F6F2">바로 착수할 수 있는 이름</th></tr>
|
||||||
|
<tr><td>로그인</td><td>이메일 로그인 API 구현 (JWT 발급 포함)</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>DB 작업</td><td>사용자·대화 테이블 ERD 작성</td></tr>
|
||||||
|
<tr><td>프롬프트 개선</td><td>상담 에이전트 시스템 프롬프트 v2 작성 및 10개 질문 테스트</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>배포</td><td>백엔드 Docker 이미지 빌드 스크립트 작성</td></tr>
|
||||||
|
<tr><td>회의</td><td>주간 회고 진행 및 회의록 공유 (매주 금)</td></tr>
|
||||||
|
</table>
|
||||||
|
<p style="font-size:28px;color:#4A5568;line-height:1.5">이름만 보고 다른 팀원이 “무엇을, 어디까지” 할지 알 수 있어야 합니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">09 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="dod" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">DEFINITION OF DONE</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">“완료”의 뜻을 팀이 미리 합의합니다</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:32px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;border-radius:16px;padding:32px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">팀 공통 완료 기준 (예시)</h3>
|
||||||
|
<div style="display:flex;gap:14px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#2F5D8C;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:26px">코드가 main 브랜치에 머지됨</p></div>
|
||||||
|
<div style="display:flex;gap:14px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#2F5D8C;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:26px">다른 팀원 1명이 리뷰함</p></div>
|
||||||
|
<div style="display:flex;gap:14px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#2F5D8C;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:26px">테스트를 통과함</p></div>
|
||||||
|
<div style="display:flex;gap:14px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#2F5D8C;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:26px">관련 문서나 README가 갱신됨</p></div>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#14213D;border-radius:16px;padding:32px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700;color:#F2A66B">작업별 완료 기준</h3>
|
||||||
|
<p style="font-size:26px;color:#C9D3E3;line-height:1.5">2.3.2 JWT 발급·검증 구현</p>
|
||||||
|
<p style="font-size:26px;color:#F7F6F2;line-height:1.5">→ 로그인 시 토큰이 발급되고, 토큰 없는 요청은 401로 거부되며, 테스트 3개가 통과한다</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:28px;color:#4A5568;line-height:1.5">완료 기준이 없으면 “90% 했어요”가 몇 주씩 이어집니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">10 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="fields" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WBS FIELDS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">WBS 표에 들어갈 칸</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:24px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:8%;color:#F7F6F2">ID</th><th style="width:26%;color:#F7F6F2">작업</th><th style="width:16%;color:#F7F6F2">산출물</th><th style="width:9%;color:#F7F6F2">담당</th><th style="width:10%;color:#F7F6F2">예상</th><th style="width:12%;color:#F7F6F2">선행</th><th style="width:10%;color:#F7F6F2">기간</th><th style="width:9%;color:#F7F6F2">상태</th></tr>
|
||||||
|
<tr><td>2.2.1</td><td>사용자·대화 테이블 ERD 작성</td><td>ERD 이미지</td><td>A</td><td>1일</td><td>1.3</td><td>11/16</td><td>완료</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>2.3.1</td><td>회원가입 API 구현</td><td>PR</td><td>B</td><td>1.5일</td><td>2.2.1</td><td>11/17–18</td><td>진행</td></tr>
|
||||||
|
<tr><td>2.3.2</td><td>JWT 발급·검증 구현</td><td>PR</td><td>B</td><td>2일</td><td>2.3.1</td><td>11/18–19</td><td>할 일</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>2.3.3</td><td>인증 테스트 작성</td><td>테스트 코드</td><td>C</td><td>1일</td><td>2.3.2</td><td>11/20</td><td>할 일</td></tr>
|
||||||
|
</table>
|
||||||
|
<div style="display:flex;gap:20px">
|
||||||
|
<p style="flex:1;font-size:26px;color:#F7F6F2;background:#2F5D8C;padding:16px 24px;border-radius:8px"><b>필수</b> ID · 작업 · 담당 · 기간 · 상태</p>
|
||||||
|
<p style="flex:1;font-size:26px;color:#14213D;background:#FFFFFF;border:1px solid #C9CCD1;padding:16px 24px;border-radius:8px"><b>있으면 좋음</b> 산출물 · 예상 공수 · 선행 작업 · 실제 소요</p>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">11 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="estimate" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">ESTIMATION</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">기간은 세 번 물어보고 정합니다</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:20px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px"><p style="font-size:24px;color:#2F5D8C;font-weight:700">낙관 (O)</p><p style="font-size:26px;color:#4A5568;line-height:1.4">모든 게 잘 풀리면</p><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:44px;font-weight:600">1일</p></div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px"><p style="font-size:24px;color:#2F5D8C;font-weight:700">보통 (M)</p><p style="font-size:26px;color:#4A5568;line-height:1.4">평소대로라면</p><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:44px;font-weight:600">2일</p></div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px"><p style="font-size:24px;color:#2F5D8C;font-weight:700">비관 (P)</p><p style="font-size:26px;color:#4A5568;line-height:1.4">막히면</p><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:44px;font-weight:600">6일</p></div>
|
||||||
|
<div style="flex:1.3;display:flex;flex-direction:column;gap:8px;background:#14213D;border-radius:12px;padding:28px"><p style="font-size:24px;color:#F2A66B;font-weight:700">예상 = (O + 4M + P) ÷ 6</p><p style="font-size:26px;color:#C9D3E3;line-height:1.4">(1 + 8 + 6) ÷ 6</p><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:44px;font-weight:600;color:#F7F6F2">2.5일</p></div>
|
||||||
|
</div>
|
||||||
|
<ul style="font-size:28px;color:#14213D;line-height:1.6">
|
||||||
|
<li>추정은 실제로 그 일을 할 사람이 합니다</li>
|
||||||
|
<li>처음 써 보는 기술은 비관값을 넉넉하게 잡습니다</li>
|
||||||
|
<li>팀 전체 일정에는 따로 버퍼를 둡니다 (개별 작업에 숨기지 않기)</li>
|
||||||
|
</ul>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">12 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="dependency" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">DEPENDENCIES</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">순서와 의존성 — 가장 긴 길을 찾기</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:12px;align-items:center">
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:22px 10px;border-radius:10px">DB 스키마</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:44px;height:22px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:22px 10px;border-radius:10px">인증 API</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:44px;height:22px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:22px 10px;border-radius:10px">대화 API</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:44px;height:22px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:22px 10px;border-radius:10px">화면 연동</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:44px;height:22px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:22px 10px;border-radius:10px">통합 테스트</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:12px;align-items:center">
|
||||||
|
<p style="width:420px;font-size:26px;text-align:center;background:#FFFFFF;border:2px dashed #9AA8BF;padding:20px 10px;border-radius:10px">화면 디자인 (병렬 진행)</p>
|
||||||
|
<p style="flex:1;font-size:26px;color:#4A5568">← 백엔드를 기다리지 않고 동시에 할 수 있는 일</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#14213D;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700;color:#F2A66B">핵심 경로</h3><p style="font-size:26px;color:#C9D3E3;line-height:1.5">이어진 작업 중 가장 긴 줄. 여기가 늦으면 전체가 늦습니다</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">병렬 작업</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">모의 데이터·가짜 API로 의존성을 끊으면 동시에 진행할 수 있습니다</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">13 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="schedule" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">SCHEDULING</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">일정은 마감에서 거꾸로 얹습니다</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column">
|
||||||
|
<div style="display:flex;gap:32px;align-items:center;border-top:2px solid #14213D;padding:20px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:36px;font-weight:600;color:#B5541A;width:72px">1</p><p style="width:440px;font-size:30px;font-weight:700">고정된 날짜부터 표시</p><p style="flex:1;font-size:26px;color:#4A5568">산출물 마감 · 발표일 · 휴일 · 수업 없는 날</p></div>
|
||||||
|
<div style="display:flex;gap:32px;align-items:center;border-top:1px solid #C9CCD1;padding:20px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:36px;font-weight:600;color:#B5541A;width:72px">2</p><p style="width:440px;font-size:30px;font-weight:700">마감 앞에 검토 시간</p><p style="flex:1;font-size:26px;color:#4A5568">마감 하루 전은 팀 내부 리뷰와 수정</p></div>
|
||||||
|
<div style="display:flex;gap:32px;align-items:center;border-top:1px solid #C9CCD1;padding:20px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:36px;font-weight:600;color:#B5541A;width:72px">3</p><p style="width:440px;font-size:30px;font-weight:700">핵심 경로부터 배치</p><p style="flex:1;font-size:26px;color:#4A5568">의존성 순서대로, 병렬 작업은 빈자리에</p></div>
|
||||||
|
<div style="display:flex;gap:32px;align-items:center;border-top:1px solid #C9CCD1;padding:20px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:36px;font-weight:600;color:#B5541A;width:72px">4</p><p style="width:440px;font-size:30px;font-weight:700">마일스톤 정하기</p><p style="flex:1;font-size:26px;color:#4A5568">“무엇이 돌아가는가”로 정의 (예: 로그인 후 대화 가능)</p></div>
|
||||||
|
<div style="display:flex;gap:32px;align-items:center;border-top:1px solid #C9CCD1;border-bottom:1px solid #C9CCD1;padding:20px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:36px;font-weight:600;color:#B5541A;width:72px">5</p><p style="width:440px;font-size:30px;font-weight:700">버퍼 남기기</p><p style="flex:1;font-size:26px;color:#4A5568">발표 직전 주는 새 기능 없이 안정화와 리허설</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">14 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="assign" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">ASSIGNMENT</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">담당은 한 명, 부담은 고르게</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:24px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-top:6px solid #E8833A;border-radius:12px;padding:28px"><h3 style="font-size:32px;font-weight:700">담당 1명 + 검토 1명</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">“다 같이”는 아무도 책임지지 않는다는 뜻입니다</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-top:6px solid #E8833A;border-radius:12px;padding:28px"><h3 style="font-size:32px;font-weight:700">사람별 합계 확인</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">주별로 예상 공수를 더해 한 사람에게 몰리지 않게</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-top:6px solid #2F5D8C;border-radius:12px;padding:28px"><h3 style="font-size:32px;font-weight:700">강점과 성장을 섞기</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">잘하는 일 + 배우고 싶은 일을 함께 맡기</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-top:6px solid #2F5D8C;border-radius:12px;padding:28px"><h3 style="font-size:32px;font-weight:700">모두가 핵심 작업 하나씩</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">문서·관리만 맡는 사람이 없게 — 개인 기여의 근거</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">15 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="tools" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">TOOLS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">GitHub Projects로 WBS 운영하기</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:27px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:32%;color:#F7F6F2">WBS 요소</th><th style="width:68%;color:#F7F6F2">GitHub Projects에서</th></tr>
|
||||||
|
<tr><td>작업</td><td>이슈 1개 = 작업 1개</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>WBS ID · 단계</td><td>라벨 또는 사용자 정의 필드</td></tr>
|
||||||
|
<tr><td>담당 · 상태</td><td>Assignee · Status 필드</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>기간</td><td>시작일 · 종료일 필드 → Roadmap 뷰</td></tr>
|
||||||
|
<tr><td>마일스톤</td><td>Milestone</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>완료 증거</td><td>이슈에 연결된 PR</td></tr>
|
||||||
|
</table>
|
||||||
|
<p style="font-size:28px;color:#4A5568;line-height:1.5">같은 데이터를 <b>Table</b>(WBS) · <b>Roadmap</b>(일정) · <b>Board</b>(칸반) 뷰로 바꿔 볼 수 있습니다. 스프레드시트로 시작해도 괜찮습니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">16 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="living" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">KEEP IT ALIVE</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">WBS는 한 번 쓰고 끝나는 문서가 아닙니다</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:12px;align-items:center">
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;background:#FFFFFF;border:1px solid #C9CCD1;padding:20px 8px;border-radius:10px">할 일</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#2F5D8C"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;background:#FFFFFF;border:1px solid #C9CCD1;padding:20px 8px;border-radius:10px">진행 중</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#2F5D8C"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;background:#FFFFFF;border:1px solid #C9CCD1;padding:20px 8px;border-radius:10px">검토 중</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#2F5D8C"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:20px 8px;border-radius:10px">완료</p>
|
||||||
|
<p style="width:200px;font-size:26px;text-align:center;color:#7A3A10;background:#FBE3CF;padding:20px 8px;border-radius:10px">막힘</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">매일</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">스탠드업에서 상태 갱신, 막힘은 바로 공유</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">매주</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">계획 대비 실제 비교, 다음 주 작업 잘게 쪼개기</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">바뀔 때</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">범위·일정 변경은 이유와 함께 기록</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">17 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="mistakes" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">COMMON MISTAKES</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">흔한 실수와 처방</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:26px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:44%;color:#F7F6F2">실수</th><th style="width:56%;color:#F7F6F2">처방</th></tr>
|
||||||
|
<tr><td>날짜부터 그린다</td><td>결과물로 먼저 쪼개고 일정은 나중에</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>“백엔드 개발” 같은 거대 작업</td><td>1~3일 단위로 다시 쪼개기</td></tr>
|
||||||
|
<tr><td>회의·문서·발표 준비가 없다</td><td>‘프로젝트 관리’ 묶음을 따로 만들기</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>담당자가 “전원”</td><td>담당 1명 + 검토 1명</td></tr>
|
||||||
|
<tr><td>테스트·버그 수정 시간이 없다</td><td>기능마다 테스트 작업 넣고 버퍼 따로 두기</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>처음 만들고 방치</td><td>매일 상태 갱신, 매주 계획 대비 실제 점검</td></tr>
|
||||||
|
</table>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">18 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="checklist" style="background:#E8833A;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#14213D;letter-spacing:2px">SELF CHECK</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:900;line-height:1.15">WBS 셀프 체크리스트</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:14px 24px">
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">하위를 다 끝내면 상위가 끝난다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">모든 작업에 담당자가 1명이다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">겹치는 작업이 없다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">한 사람에게 일이 몰리지 않았다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">작업이 1~3일 크기다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">마감 앞에 검토 시간이 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">작업 이름만으로 할 일이 보인다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">핵심 경로를 알고 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">테스트·문서·발표 준비가 들어 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">버퍼가 따로 잡혀 있다</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:26px;font-weight:500;line-height:1.4">마지막 확인: 팀원 한 명이 갑자기 빠져도 누가 무엇을 이어받을지 보이는가?</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#14213D">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#14213D;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">19 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="closing" style="background:#14213D;color:#F7F6F2;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;justify-content:center;gap:48px">
|
||||||
|
<h2 style="font-size:88px;font-weight:900;line-height:1.15">잘 쪼갠 일은<br>반은 끝난 일입니다</h2>
|
||||||
|
<div style="display:flex;gap:16px;flex-wrap:wrap">
|
||||||
|
<p style="font-size:28px;color:#14213D;background:#E8833A;padding:12px 24px;border-radius:8px;font-weight:700">빠짐없이 쪼개기</p>
|
||||||
|
<p style="font-size:28px;color:#F7F6F2;border:2px solid #4A5D80;padding:12px 24px;border-radius:8px">현실적으로 추정하기</p>
|
||||||
|
<p style="font-size:28px;color:#F7F6F2;border:2px solid #4A5D80;padding:12px 24px;border-radius:8px">거꾸로 배치하기</p>
|
||||||
|
<p style="font-size:28px;color:#F7F6F2;border:2px solid #4A5D80;padding:12px 24px;border-radius:8px">매일 갱신하기</p>
|
||||||
|
</div>
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:32px;font-weight:600;color:#F2A66B">Q & A</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#9AA8BF">AIO 1기 최종 프로젝트 · WBS 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#9AA8BF;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">20 / 20</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div>
|
||||||
|
<div class="progress"></div>
|
||||||
|
<div class="nav" aria-label="슬라이드 이동">
|
||||||
|
<button id="prev" title="이전 (←)" aria-label="이전 슬라이드">‹</button>
|
||||||
|
<span id="count"></span>
|
||||||
|
<button id="next" title="다음 (→)" aria-label="다음 슬라이드">›</button>
|
||||||
|
<button id="fs" title="전체 화면 (F)" aria-label="전체 화면">⛶</button>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
const frames = [...document.querySelectorAll('.frame')];
|
||||||
|
const n = frames.length;
|
||||||
|
let cur = 0;
|
||||||
|
function fit() {
|
||||||
|
const f = frames[cur];
|
||||||
|
f.querySelector('.slide').style.transform = 'scale(' + (f.clientWidth / 1920) + ')';
|
||||||
|
}
|
||||||
|
function go(i) {
|
||||||
|
cur = Math.max(0, Math.min(n - 1, i));
|
||||||
|
frames.forEach((f, k) => f.classList.toggle('active', k === cur));
|
||||||
|
document.getElementById('count').textContent = (cur + 1) + ' / ' + n;
|
||||||
|
document.querySelector('.progress').style.width = ((cur + 1) / n * 100) + '%';
|
||||||
|
history.replaceState(null, '', '#' + (cur + 1));
|
||||||
|
fit();
|
||||||
|
}
|
||||||
|
addEventListener('keydown', e => {
|
||||||
|
if (e.altKey || e.ctrlKey || e.metaKey) return;
|
||||||
|
const k = e.key;
|
||||||
|
if (['ArrowRight', 'ArrowDown', 'PageDown', ' ', 'Enter'].includes(k)) { e.preventDefault(); go(cur + (e.shiftKey && k === ' ' ? -1 : 1)); }
|
||||||
|
else if (['ArrowLeft', 'ArrowUp', 'PageUp', 'Backspace'].includes(k)) { e.preventDefault(); go(cur - 1); }
|
||||||
|
else if (k === 'Home') { e.preventDefault(); go(0); }
|
||||||
|
else if (k === 'End') { e.preventDefault(); go(n - 1); }
|
||||||
|
else if (k === 'f' || k === 'F') toggleFs();
|
||||||
|
});
|
||||||
|
function toggleFs() {
|
||||||
|
if (document.fullscreenElement) document.exitFullscreen();
|
||||||
|
else document.documentElement.requestFullscreen && document.documentElement.requestFullscreen();
|
||||||
|
}
|
||||||
|
document.getElementById('prev').onclick = () => go(cur - 1);
|
||||||
|
document.getElementById('next').onclick = () => go(cur + 1);
|
||||||
|
document.getElementById('fs').onclick = toggleFs;
|
||||||
|
let tx = null;
|
||||||
|
addEventListener('touchstart', e => { tx = e.touches[0].clientX; }, { passive: true });
|
||||||
|
addEventListener('touchend', e => {
|
||||||
|
if (tx === null) return;
|
||||||
|
const dx = e.changedTouches[0].clientX - tx; tx = null;
|
||||||
|
if (Math.abs(dx) > 50) go(cur + (dx < 0 ? 1 : -1));
|
||||||
|
});
|
||||||
|
let hideT;
|
||||||
|
addEventListener('mousemove', () => {
|
||||||
|
document.body.classList.add('moved'); clearTimeout(hideT);
|
||||||
|
hideT = setTimeout(() => document.body.classList.remove('moved'), 1500);
|
||||||
|
});
|
||||||
|
addEventListener('resize', fit);
|
||||||
|
addEventListener('hashchange', () => go((parseInt(location.hash.slice(1)) || 1) - 1));
|
||||||
|
go((parseInt(location.hash.slice(1)) || 1) - 1);
|
||||||
|
addEventListener('beforeprint', () => document.querySelectorAll('.slide').forEach(s => s.style.transform = 'none'));
|
||||||
|
addEventListener('afterprint', () => { frames.forEach(f => f.querySelector('.slide').style.transform = ''); fit(); });
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
@@ -0,0 +1,558 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="ko">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>기획서 잘 쓰는 법</title>
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700;900&family=JetBrains+Mono:wght@400;600&display=swap">
|
||||||
|
<style>
|
||||||
|
@page { size: 1920px 1080px; margin: 0; }
|
||||||
|
* { box-sizing: border-box; margin: 0; }
|
||||||
|
html, body { background: #1B1E24; height: 100%; overflow: hidden; }
|
||||||
|
body { display: flex; align-items: center; justify-content: center; }
|
||||||
|
.frame { width: min(100vw, calc(100vh * 16 / 9)); aspect-ratio: 16 / 9; position: relative; overflow: hidden;
|
||||||
|
display: none; }
|
||||||
|
.frame.active { display: block; }
|
||||||
|
.nav { position: fixed; right: 16px; bottom: 12px; display: flex; gap: 8px; align-items: center;
|
||||||
|
font: 14px 'JetBrains Mono', 'Noto Sans CJK KR', monospace; color: #C9D3E3; opacity: .25; transition: opacity .2s; }
|
||||||
|
.nav:hover, body.moved .nav { opacity: .9; }
|
||||||
|
.nav button { background: #2B2F36; color: #F7F6F2; border: 1px solid #4A5D80; border-radius: 6px;
|
||||||
|
width: 36px; height: 32px; font-size: 16px; cursor: pointer; }
|
||||||
|
.nav button:hover { background: #E8833A; color: #14213D; }
|
||||||
|
.progress { position: fixed; left: 0; bottom: 0; height: 4px; background: #E8833A; transition: width .2s; }
|
||||||
|
.slide { width: 1920px; height: 1080px; transform-origin: 0 0; position: absolute; left: 0; top: 0; }
|
||||||
|
.slide > section { width: 1920px; height: 1080px; position: relative; overflow: hidden;
|
||||||
|
font-family: 'Noto Sans KR', 'Noto Sans CJK KR', Arial, sans-serif; }
|
||||||
|
section [style*="JetBrains"] { }
|
||||||
|
h1, h2, h3, p, li, td, th { font-family: inherit; }
|
||||||
|
ul, ol { padding-left: 1.3em; }
|
||||||
|
table { border-collapse: collapse; width: 100%; }
|
||||||
|
th, td { padding: 0.35em 0.6em; text-align: left; border-bottom: 1px solid #E2E0D8; vertical-align: top; }
|
||||||
|
@media print {
|
||||||
|
html, body { background: none; padding: 0; gap: 0; display: block; height: auto; overflow: visible; }
|
||||||
|
.nav, .progress { display: none; }
|
||||||
|
.frame { display: block !important; width: 1920px; height: 1080px; break-after: page; }
|
||||||
|
.slide { transform: none !important; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="frame"><div class="slide"><section id="cover" style="background:#14213D;color:#F7F6F2;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px;display:flex;flex-direction:column;justify-content:center;gap:40px">
|
||||||
|
<div style="position:absolute;left:0;top:0;width:24px;height:1080px;background:#E8833A"></div>
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:28px;color:#F2A66B;letter-spacing:4px">AIO 1기 · FINAL PROJECT · GUIDE</p>
|
||||||
|
<h1 style="font-size:112px;font-weight:900;line-height:1.1">기획서<br>잘 쓰는 법</h1>
|
||||||
|
<p style="font-size:36px;color:#C9D3E3;line-height:1.4">읽는 사람의 질문에 미리 답하는 문서 만들기</p>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<p style="font-size:28px;color:#14213D;background:#E8833A;padding:12px 24px;border-radius:8px">문제 → 사용자 → 범위 → 설계 → 검증</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="what" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:48px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WHAT IS IT</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">기획서는 결정을 돕는 문서입니다</h2>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:44px;font-weight:700;line-height:1.35;color:#14213D">읽는 사람이 <span style="color:#B5541A">“이걸 왜, 무엇을, 어떻게, 언제까지 만들고, 성공은 어떻게 판단하나?”</span>를 한 번에 판단할 수 있어야 합니다.</p>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">설득 문서</h3>
|
||||||
|
<p style="font-size:26px;color:#4A5568;line-height:1.5">이 프로젝트가 할 만한 가치가 있다는 근거</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">팀의 설계도</h3>
|
||||||
|
<p style="font-size:26px;color:#4A5568;line-height:1.5">무엇을 만들고 무엇을 안 만들지에 대한 합의</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">판단의 기준</h3>
|
||||||
|
<p style="font-size:26px;color:#4A5568;line-height:1.5">나중에 범위·우선순위를 바꿀 때 돌아올 곳</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">02 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="readers" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WHO READS IT</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">읽는 사람은 세 명입니다</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#14213D;border-radius:16px;padding:36px">
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#F2A66B;width:44px;height:44px" aria-label="Verified"><path d="M12 2l2.4 2.1 3.2-.3.9 3.1 2.8 1.6-1.2 3 1.2 3-2.8 1.6-.9 3.1-3.2-.3L12 22l-2.4-2.1-3.2.3-.9-3.1-2.8-1.6 1.2-3-1.2-3 2.8-1.6.9-3.1 3.2.3z"/><path d="M8.5 12l2.5 2.5 4.5-5"/></svg><h3 style="font-size:34px;font-weight:700;color:#F7F6F2">평가자</h3></div>
|
||||||
|
<p style="font-size:24px;color:#9AA8BF">강사 · 멘토 · 심사위원</p>
|
||||||
|
<ul style="font-size:26px;color:#C9D3E3;line-height:1.6">
|
||||||
|
<li>문제가 진짜인가?</li>
|
||||||
|
<li>해법이 논리적인가?</li>
|
||||||
|
<li>기간 안에 가능한가?</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:16px;padding:36px">
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:44px;height:44px" aria-label="Users"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg><h3 style="font-size:34px;font-weight:700">팀원</h3></div>
|
||||||
|
<p style="font-size:24px;color:#6B7280">함께 만드는 사람</p>
|
||||||
|
<ul style="font-size:26px;color:#14213D;line-height:1.6">
|
||||||
|
<li>내가 만들 것은 무엇인가?</li>
|
||||||
|
<li>어디까지가 완료인가?</li>
|
||||||
|
<li>언제까지 해야 하나?</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:16px;padding:36px">
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:44px;height:44px" aria-label="Clock"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg><h3 style="font-size:34px;font-weight:700">미래의 우리</h3></div>
|
||||||
|
<p style="font-size:24px;color:#6B7280">5주 뒤, 면접장에서</p>
|
||||||
|
<ul style="font-size:26px;color:#14213D;line-height:1.6">
|
||||||
|
<li>그때 왜 이렇게 정했지?</li>
|
||||||
|
<li>무엇을 일부러 뺐지?</li>
|
||||||
|
<li>이 프로젝트를 어떻게 설명하지?</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:28px;color:#4A5568;line-height:1.4">세 사람의 질문 중 하나라도 답이 없으면, 그 부분이 기획서의 빈칸입니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">03 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="traits" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">GOOD PROPOSALS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">좋은 기획서의 다섯 가지 특징</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column">
|
||||||
|
<div style="display:flex;gap:40px;align-items:center;border-top:2px solid #14213D;padding:22px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:40px;font-weight:600;color:#B5541A;width:88px">01</p><p style="width:360px;font-size:34px;font-weight:700">문제에서 출발한다</p><p style="flex:1;font-size:28px;color:#4A5568">기술이 아니라 누군가의 불편에서 시작</p></div>
|
||||||
|
<div style="display:flex;gap:40px;align-items:center;border-top:1px solid #C9CCD1;padding:22px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:40px;font-weight:600;color:#B5541A;width:88px">02</p><p style="width:360px;font-size:34px;font-weight:700">구체적이다</p><p style="flex:1;font-size:28px;color:#4A5568">누가 · 언제 · 무엇을이 이름과 숫자로 보인다</p></div>
|
||||||
|
<div style="display:flex;gap:40px;align-items:center;border-top:1px solid #C9CCD1;padding:22px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:40px;font-weight:600;color:#B5541A;width:88px">03</p><p style="width:360px;font-size:34px;font-weight:700">한 줄로 이어진다</p><p style="flex:1;font-size:28px;color:#4A5568">문제 → 해법 → 기능 → 일정이 서로 근거가 된다</p></div>
|
||||||
|
<div style="display:flex;gap:40px;align-items:center;border-top:1px solid #C9CCD1;padding:22px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:40px;font-weight:600;color:#B5541A;width:88px">04</p><p style="width:360px;font-size:34px;font-weight:700">확인할 수 있다</p><p style="flex:1;font-size:28px;color:#4A5568">완료와 성공을 무엇으로 판단할지 적혀 있다</p></div>
|
||||||
|
<div style="display:flex;gap:40px;align-items:center;border-top:1px solid #C9CCD1;border-bottom:1px solid #C9CCD1;padding:22px 0px"><p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:40px;font-weight:600;color:#B5541A;width:88px">05</p><p style="width:360px;font-size:34px;font-weight:700">현실적이다</p><p style="flex:1;font-size:28px;color:#4A5568">인원 · 기간 · 데이터로 가능한 범위만 약속한다</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">04 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="mistakes" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">COMMON MISTAKES</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">흔한 실수와 고쳐 쓴 문장</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:25px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:18%;color:#F7F6F2">실수</th><th style="width:36%;color:#F7F6F2">이렇게 쓰면 약하다</th><th style="width:46%;color:#F7F6F2">이렇게 고친다</th></tr>
|
||||||
|
<tr><td>기술부터 시작</td><td>LangGraph로 멀티 에이전트를 구현한다</td><td>장애 대응에 [N시간]이 걸리는 운영자의 수작업을 줄인다</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>모호한 목표</td><td>AI로 업무를 효율화한다</td><td>일정 충돌 확인 시간을 [N분]에서 [M분]으로 줄인다</td></tr>
|
||||||
|
<tr><td>기능 나열</td><td>검색, 요약, 분석, 보고서, 알림…</td><td>사용자 한 명이 끝까지 가는 시나리오 1개로 기능을 묶는다</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>전부 다 하기</td><td>Must 기능 15개</td><td>Must 3~5개 · 나머지는 Should·Could로</td></tr>
|
||||||
|
<tr><td>근거 없는 주장</td><td>많은 사람이 불편을 겪고 있다</td><td>출처가 있는 자료나 인터뷰 [N명] 결과를 붙인다</td></tr>
|
||||||
|
</table>
|
||||||
|
<p style="font-size:24px;color:#6B7280">대괄호 [ ]는 팀이 조사해서 채울 자리입니다 — 숫자를 지어내지 마세요</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">05 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="structure" style="background:#14213D;color:#F7F6F2;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:48px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#F2A66B;letter-spacing:2px">STRUCTURE</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">기획서의 뼈대는 다섯 개의 질문</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:stretch">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#E8833A;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:28px;font-weight:600;color:#14213D">WHY</p>
|
||||||
|
<h3 style="font-size:32px;font-weight:700;color:#14213D">왜</h3>
|
||||||
|
<p style="font-size:24px;color:#14213D;line-height:1.5">배경 · 문제 · 타깃 사용자</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#1F2E4F;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:28px;font-weight:600;color:#F2A66B">WHAT</p>
|
||||||
|
<h3 style="font-size:32px;font-weight:700">무엇을</h3>
|
||||||
|
<p style="font-size:24px;color:#C9D3E3;line-height:1.5">솔루션 · 시나리오 · 기능 · 요구사항</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#1F2E4F;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:28px;font-weight:600;color:#F2A66B">HOW</p>
|
||||||
|
<h3 style="font-size:32px;font-weight:700">어떻게</h3>
|
||||||
|
<p style="font-size:24px;color:#C9D3E3;line-height:1.5">아키텍처 · 기술 스택 · 데이터</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#1F2E4F;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:28px;font-weight:600;color:#F2A66B">WHEN · WHO</p>
|
||||||
|
<h3 style="font-size:32px;font-weight:700">언제 · 누가</h3>
|
||||||
|
<p style="font-size:24px;color:#C9D3E3;line-height:1.5">일정 · 마일스톤 · 역할</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#1F2E4F;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:28px;font-weight:600;color:#F2A66B">HOW WELL</p>
|
||||||
|
<h3 style="font-size:32px;font-weight:700">얼마나</h3>
|
||||||
|
<p style="font-size:24px;color:#C9D3E3;line-height:1.5">성공 지표 · 리스크와 대응</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:30px;color:#C9D3E3;line-height:1.5">‘왜’에 가장 많은 시간을 쓰세요. ‘왜’가 약하면 나머지가 아무리 화려해도 설득력이 없습니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#9AA8BF">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#9AA8BF;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">06 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="problem" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">WHY · PROBLEM</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">문제를 한 문장으로 진술하기</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px;background:#14213D;border-radius:16px;padding:36px 40px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#F2A66B">문제 진술 공식</p>
|
||||||
|
<p style="font-size:36px;font-weight:700;color:#F7F6F2;line-height:1.45">[누가] [어떤 상황에서] [무엇 때문에] [어떤 손해]를 겪는다</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#FFFFFF;border-radius:12px;padding:28px">
|
||||||
|
<h3 style="font-size:30px;font-weight:700">예시</h3>
|
||||||
|
<p style="font-size:26px;color:#4A5568;line-height:1.55">소규모 개발팀의 운영 담당자는 야간 장애가 나면 로그를 일일이 뒤져 원인을 찾느라 복구까지 [N시간]이 걸리고, 그동안 서비스가 멈춘다.</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#FFFFFF;border-radius:12px;padding:28px">
|
||||||
|
<h3 style="font-size:30px;font-weight:700">‘왜?’를 다섯 번</h3>
|
||||||
|
<p style="font-size:26px;color:#4A5568;line-height:1.55">눈에 보이는 불편에서 “왜 그런가?”를 반복해 근본 원인까지 내려가면, 해결해야 할 진짜 문제가 보입니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">07 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="persona" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">WHY · USER</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">사용자를 한 사람으로 그리기 — 페르소나</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:32px">
|
||||||
|
<div style="flex:1.1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;border-top:8px solid #2F5D8C;border-radius:12px;padding:32px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C">PERSONA CARD · 예시</p>
|
||||||
|
<h3 style="font-size:34px;font-weight:700">김운영 (32) · 스타트업 인프라 담당</h3>
|
||||||
|
<p style="font-size:26px;color:#14213D;line-height:1.5"><b>목표</b> — 장애를 빨리 끝내고 재발을 막고 싶다</p>
|
||||||
|
<p style="font-size:26px;color:#14213D;line-height:1.5"><b>불편</b> — 혼자서 여러 서버를 보고, 원인 찾기가 오래 걸린다</p>
|
||||||
|
<p style="font-size:26px;color:#14213D;line-height:1.5"><b>지금 쓰는 도구</b> — 모니터링 알림, 로그 검색, 메신저</p>
|
||||||
|
<p style="font-size:26px;color:#14213D;line-height:1.5"><b>성공의 모습</b> — 알림을 받으면 원인과 조치가 이미 정리되어 있다</p>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:20px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">왜 한 사람으로?</h3>
|
||||||
|
<ul style="font-size:28px;color:#14213D;line-height:1.6">
|
||||||
|
<li>“모든 사용자”를 위한 서비스는 아무도 만족시키지 못한다</li>
|
||||||
|
<li>기능을 넣을지 말지 “김운영에게 필요한가?”로 판단</li>
|
||||||
|
<li>팀 전원이 같은 사람을 떠올리며 만든다</li>
|
||||||
|
</ul>
|
||||||
|
<p style="font-size:24px;color:#6B7280">대표 페르소나 1명 + 보조 1명이면 충분합니다</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">08 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="scenario" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">WHAT · SCENARIO</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">Before / After 시나리오로 보여주기</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-size:28px;font-weight:700;color:#5B6472">BEFORE · 지금</p>
|
||||||
|
<div style="display:flex;gap:12px;align-items:center">
|
||||||
|
<p style="flex:1;font-size:24px;background:#FFFFFF;border:1px solid #C9CCD1;padding:18px 20px;border-radius:8px">새벽 장애 알림</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#9AA8BF"/></svg>
|
||||||
|
<p style="flex:1;font-size:24px;background:#FFFFFF;border:1px solid #C9CCD1;padding:18px 20px;border-radius:8px">로그 직접 검색</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#9AA8BF"/></svg>
|
||||||
|
<p style="flex:1;font-size:24px;background:#FFFFFF;border:1px solid #C9CCD1;padding:18px 20px;border-radius:8px">원인 추측 · 재시도</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#9AA8BF"/></svg>
|
||||||
|
<p style="flex:1;font-size:24px;background:#FFFFFF;border:1px solid #C9CCD1;padding:18px 20px;border-radius:8px">[N시간] 뒤 복구</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-size:28px;font-weight:700;color:#2F5D8C">AFTER · 우리 서비스</p>
|
||||||
|
<div style="display:flex;gap:12px;align-items:center">
|
||||||
|
<p style="flex:1;font-size:24px;color:#F7F6F2;background:#2F5D8C;padding:18px 20px;border-radius:8px">이상 감지</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:24px;color:#F7F6F2;background:#2F5D8C;padding:18px 20px;border-radius:8px">진단 에이전트 분석</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:24px;color:#F7F6F2;background:#2F5D8C;padding:18px 20px;border-radius:8px">자동 복구 실행</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:40px;height:20px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:24px;color:#F7F6F2;background:#2F5D8C;padding:18px 20px;border-radius:8px">결과 보고만 확인</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:28px;color:#4A5568;line-height:1.4">시나리오 한 줄이 곧 <b>시연 대본</b>이 됩니다. 발표 데모에서 이 흐름을 그대로 보여주세요.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">09 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="solution" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">WHAT · DIFFERENTIATION</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">기존 방식과 비교해 차별점 보여주기</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:26px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:22%;color:#F7F6F2">비교 기준</th><th style="width:26%;color:#F7F6F2">수작업</th><th style="width:26%;color:#F7F6F2">기존 도구 [이름]</th><th style="width:26%;color:#F7F6F2">우리 서비스</th></tr>
|
||||||
|
<tr><td>원인 파악</td><td>사람이 로그 검색</td><td>알림만 제공</td><td>에이전트가 진단</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>조치</td><td>수동 실행</td><td>수동 실행</td><td>자동 복구 + 승인</td></tr>
|
||||||
|
<tr><td>오류 시 대응</td><td>사람이 재시도</td><td>없음</td><td>자기 성찰 후 재시도</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>과정 확인</td><td>기록 없음</td><td>일부 로그</td><td>사고 과정 대시보드</td></tr>
|
||||||
|
</table>
|
||||||
|
<p style="font-size:28px;color:#4A5568;line-height:1.4">비교 기준은 <b>사용자가 신경 쓰는 것</b>으로 고르세요. 기술 이름이 아니라 결과의 차이를 적습니다.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">10 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="priority" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WHAT · SCOPE</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">기능에 우선순위 매기기 — MoSCoW</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:20px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px;background:#14213D;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:32px;font-weight:600;color:#F2A66B">MUST</p>
|
||||||
|
<h3 style="font-size:28px;font-weight:700;color:#F7F6F2">없으면 실패</h3>
|
||||||
|
<p style="font-size:24px;color:#C9D3E3;line-height:1.5">핵심 시나리오가 끝까지 돌아가는 데 꼭 필요한 것 · 3~5개</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:32px;font-weight:600;color:#B5541A">SHOULD</p>
|
||||||
|
<h3 style="font-size:28px;font-weight:700">있으면 좋음</h3>
|
||||||
|
<p style="font-size:24px;color:#4A5568;line-height:1.5">가치는 크지만 없어도 시연은 가능한 것</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:32px;font-weight:600;color:#2F5D8C">COULD</p>
|
||||||
|
<h3 style="font-size:28px;font-weight:700">여유 있으면</h3>
|
||||||
|
<p style="font-size:24px;color:#4A5568;line-height:1.5">일정이 남으면 추가할 것</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px;background:#FFFFFF;border:1px dashed #9AA8BF;border-radius:12px;padding:28px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:32px;font-weight:600;color:#5B6472">WON’T</p>
|
||||||
|
<h3 style="font-size:28px;font-weight:700">이번엔 안 함</h3>
|
||||||
|
<p style="font-size:24px;color:#4A5568;line-height:1.5">일부러 뺀 것 — 적어 두면 범위 논쟁이 줄어듭니다</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:20px">
|
||||||
|
<p style="flex:1;font-size:26px;color:#F7F6F2;background:#2F5D8C;padding:16px 24px;border-radius:8px">시나리오에 안 나오는 기능 → Could 이하</p>
|
||||||
|
<p style="flex:1;font-size:26px;color:#7A3A10;background:#FBE3CF;padding:16px 24px;border-radius:8px">Must가 5개를 넘으면 범위가 과하다는 신호</p>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">11 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="requirements" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WHAT · REQUIREMENTS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">요구사항은 확인할 수 있게 씁니다</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:26px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:42%;color:#F7F6F2">확인할 수 없는 문장</th><th style="width:58%;color:#F7F6F2">확인할 수 있는 문장</th></tr>
|
||||||
|
<tr><td>빠르게 응답한다</td><td>첫 응답 토큰이 [N초] 안에 화면에 표시된다</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>안전하게 처리한다</td><td>로그인하지 않은 요청은 401로 거부한다</td></tr>
|
||||||
|
<tr><td>오류에 강하다</td><td>외부 API 실패 시 [N회] 재시도 후 대체 응답을 준다</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>사용하기 쉽다</td><td>처음 쓰는 사용자가 안내 없이 [핵심 작업]을 끝낸다</td></tr>
|
||||||
|
</table>
|
||||||
|
<div style="display:flex;gap:20px">
|
||||||
|
<p style="flex:1;font-size:24px;color:#14213D;background:#FFFFFF;border:1px solid #E2E0D8;padding:16px 20px;border-radius:8px"><b>주어</b> — 시스템이 / 사용자가</p>
|
||||||
|
<p style="flex:1;font-size:24px;color:#14213D;background:#FFFFFF;border:1px solid #E2E0D8;padding:16px 20px;border-radius:8px"><b>조건</b> — 언제 · 어떤 입력에서</p>
|
||||||
|
<p style="flex:1;font-size:24px;color:#14213D;background:#FFFFFF;border:1px solid #E2E0D8;padding:16px 20px;border-radius:8px"><b>기준</b> — 숫자 · 상태 · 결과</p>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">12 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="diagram" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">HOW · ARCHITECTURE</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">구성도는 한 장으로, 흐름이 보이게</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:14px;align-items:center">
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;background:#FFFFFF;border:2px solid #14213D;padding:22px 12px;border-radius:10px">사용자</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;background:#FFFFFF;border:2px solid #14213D;padding:22px 12px;border-radius:10px">화면 (UI)</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;background:#FFFFFF;border:2px solid #14213D;padding:22px 12px;border-radius:10px">API 서버</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;color:#F7F6F2;background:#2F5D8C;padding:24px 12px;border-radius:10px">에이전트</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;text-align:center;background:#FFFFFF;border:2px dashed #5B6472;padding:22px 12px;border-radius:10px">DB · 외부 API</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px 48px">
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:36px;height:36px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:28px">왼쪽에서 오른쪽으로, 요청이 흐르는 방향대로</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:36px;height:36px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:28px">화살표 옆에 오가는 데이터 이름 적기</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:36px;height:36px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:28px">외부 서비스는 점선 등으로 구분</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:36px;height:36px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:28px">박스마다 쓰는 기술 이름 한 줄</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:36px;height:36px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:28px">색과 선 모양의 범례 달기</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#B5541A;width:36px;height:36px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:28px">박스는 10개 안팎까지</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">13 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="metrics" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">HOW WELL · METRICS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">성공을 무엇으로 판단할지 미리 정하기</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:24px">
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;border-top:6px solid #E8833A;border-radius:12px;padding:32px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">사용자 가치 지표</h3>
|
||||||
|
<ul style="font-size:26px;color:#4A5568;line-height:1.6">
|
||||||
|
<li>작업 처리 시간 (Before → After)</li>
|
||||||
|
<li>사람이 개입한 횟수</li>
|
||||||
|
<li>사용자 만족도 · 재사용 의향</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;border-top:6px solid #2F5D8C;border-radius:12px;padding:32px">
|
||||||
|
<h3 style="font-size:32px;font-weight:700">시스템 품질 지표</h3>
|
||||||
|
<ul style="font-size:26px;color:#4A5568;line-height:1.6">
|
||||||
|
<li>응답 지연 시간</li>
|
||||||
|
<li>자동 복구 성공률 · 평균 복구 시간</li>
|
||||||
|
<li>보안 테스트 차단 결과</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#14213D;border-radius:12px;padding:28px 32px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#F2A66B">좋은 지표의 조건</p>
|
||||||
|
<p style="font-size:30px;color:#F7F6F2;line-height:1.5">측정 방법이 정해져 있고 · 기준값과 목표값이 있고 · 시연이나 로그로 보여줄 수 있다</p>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">14 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="schedule" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">WHEN · WHO</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">일정은 마감에서 거꾸로 세웁니다</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:12px;align-items:center">
|
||||||
|
<p style="flex:1;font-size:26px;color:#F7F6F2;background:#14213D;padding:20px;border-radius:10px;text-align:center">최종 발표</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;background:#FFFFFF;border:1px solid #C9CCD1;padding:20px;border-radius:10px;text-align:center">리허설 · 버퍼</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;background:#FFFFFF;border:1px solid #C9CCD1;padding:20px;border-radius:10px;text-align:center">통합 테스트</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;background:#FFFFFF;border:1px solid #C9CCD1;padding:20px;border-radius:10px;text-align:center">기능 구현</p>
|
||||||
|
<svg viewBox="0 0 10 5" preserveAspectRatio="none" style="flex:none;width:48px;height:24px" aria-hidden="true"><polygon points="0,1.5 6,1.5 6,0 10,2.5 6,5 6,3.5 0,3.5" fill="#E8833A"/></svg>
|
||||||
|
<p style="flex:1;font-size:26px;color:#14213D;background:#E8833A;padding:20px;border-radius:10px;text-align:center">오늘</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:24px 28px"><h3 style="font-size:30px;font-weight:700">마일스톤마다 결과물</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">“무엇이 돌아가는가”로 정의</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:24px 28px"><h3 style="font-size:30px;font-weight:700">작업은 1~3일 단위</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">더 크면 쪼개야 진행이 보입니다</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:24px 28px"><h3 style="font-size:30px;font-weight:700">담당자는 한 명</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">“다 같이”는 아무도 안 한다는 뜻</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:8px;background:#FFFFFF;border:1px solid #E2E0D8;border-radius:12px;padding:24px 28px"><h3 style="font-size:30px;font-weight:700">버퍼를 남긴다</h3><p style="font-size:26px;color:#4A5568;line-height:1.5">예상 못 한 문제는 반드시 생깁니다</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">15 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="risks" style="background:#F7F6F2;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#B5541A;letter-spacing:2px">HOW WELL · RISKS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">리스크는 미리 적어 두면 관리가 됩니다</h2>
|
||||||
|
</div>
|
||||||
|
<table style="font-size:26px;color:#14213D;background:#FFFFFF">
|
||||||
|
<tr style="background:#14213D"><th style="width:28%;color:#F7F6F2">리스크</th><th style="width:16%;color:#F7F6F2">가능성</th><th style="width:16%;color:#F7F6F2">영향</th><th style="width:40%;color:#F7F6F2">대응 계획</th></tr>
|
||||||
|
<tr><td>외부 API 비용·호출 제한</td><td>중간</td><td>높음</td><td>캐시 · 모의 응답 · 사용량 모니터링</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>필요한 데이터를 못 구함</td><td>중간</td><td>높음</td><td>공개 데이터 · 합성 데이터로 대체</td></tr>
|
||||||
|
<tr><td>새 기술 학습이 오래 걸림</td><td>높음</td><td>중간</td><td>첫 주에 작은 기술 검증(PoC) 먼저</td></tr>
|
||||||
|
<tr style="background:#F5F7FA"><td>팀원 일정 공백</td><td>낮음</td><td>중간</td><td>보조 담당자 지정 · 매일 기록 공유</td></tr>
|
||||||
|
<tr><td>시연 중 오류</td><td>중간</td><td>높음</td><td>시연 영상 백업 · 고정된 시연 데이터</td></tr>
|
||||||
|
</table>
|
||||||
|
<p style="font-size:24px;color:#6B7280">가능성·영향은 예시 판단입니다 — 팀 상황에 맞게 다시 평가하세요</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#6B7280">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#6B7280;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">16 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="writing" style="background:#EEF1F5;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#2F5D8C;letter-spacing:2px">WRITING TIPS</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:700;line-height:1.15">읽히는 문서를 만드는 여섯 가지 습관</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">두괄식</h3><p style="font-size:24px;color:#4A5568;line-height:1.5">결론을 먼저, 근거는 그다음</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">한 장 한 메시지</h3><p style="font-size:24px;color:#4A5568;line-height:1.5">제목만 읽어도 흐름이 이어지게</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">숫자와 그림</h3><p style="font-size:24px;color:#4A5568;line-height:1.5">설명 세 줄보다 표 하나, 그림 하나</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">용어 통일</h3><p style="font-size:24px;color:#4A5568;line-height:1.5">같은 것은 끝까지 같은 이름으로</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">출처 표시</h3><p style="font-size:24px;color:#4A5568;line-height:1.5">인용한 자료와 수치에는 출처를</p></div>
|
||||||
|
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;border-radius:12px;padding:28px"><h3 style="font-size:30px;font-weight:700">가정은 가정이라고</h3><p style="font-size:24px;color:#4A5568;line-height:1.5">확인 못 한 내용은 ‘가정’으로 명시</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:28px;color:#4A5568;line-height:1.4">AI 도구로 초안을 만들었다면, 사실과 수치는 반드시 직접 확인하고 우리 팀의 말로 다시 쓰세요.</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#5B6472">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#5B6472;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">17 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="checklist" style="background:#E8833A;color:#14213D;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||||
|
<div style="display:flex;flex-direction:column;gap:12px">
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:24px;color:#14213D;letter-spacing:2px">SELF CHECK</p>
|
||||||
|
<h2 style="font-size:64px;font-weight:900;line-height:1.15">제출 전 셀프 체크리스트</h2>
|
||||||
|
</div>
|
||||||
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:14px 24px">
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">문제를 한 문장으로 말할 수 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">Must 기능이 5개 이하다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">타깃 사용자가 구체적인 한 사람이다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">요구사항마다 확인 기준이 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">수치와 주장에 근거나 출처가 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">구성도 한 장으로 흐름이 보인다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">Before / After 시나리오가 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">성공 지표와 측정 방법이 있다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">기존 방식과의 차이가 표로 보인다</p></div>
|
||||||
|
<div style="display:flex;gap:16px;align-items:center;background:#F7F6F2;border-radius:10px;padding:16px 22px"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="flex:none;color:#14213D;width:32px;height:32px" aria-label="Check"><path d="M20 6L9 17l-5-5"/></svg><p style="font-size:25px">일정·담당자·리스크 대응이 있다</p></div>
|
||||||
|
</div>
|
||||||
|
<p style="font-size:26px;font-weight:500;line-height:1.4">마지막 확인: 팀 밖의 사람에게 5분 설명했을 때, 질문 없이 이해했는가?</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#14213D">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#14213D;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">18 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div><div class="frame"><div class="slide"><section id="closing" style="background:#14213D;color:#F7F6F2;font-family:'Noto Sans KR', Arial, sans-serif;padding:128px 128px 160px;display:flex;flex-direction:column;justify-content:center;gap:48px">
|
||||||
|
<h2 style="font-size:88px;font-weight:900;line-height:1.15">좋은 기획서는<br>읽는 사람의 질문에<br>미리 답합니다</h2>
|
||||||
|
<div style="display:flex;gap:16px;flex-wrap:wrap">
|
||||||
|
<p style="font-size:28px;color:#14213D;background:#E8833A;padding:12px 24px;border-radius:8px;font-weight:700">왜</p>
|
||||||
|
<p style="font-size:28px;color:#F7F6F2;border:2px solid #4A5D80;padding:12px 24px;border-radius:8px">무엇을</p>
|
||||||
|
<p style="font-size:28px;color:#F7F6F2;border:2px solid #4A5D80;padding:12px 24px;border-radius:8px">어떻게</p>
|
||||||
|
<p style="font-size:28px;color:#F7F6F2;border:2px solid #4A5D80;padding:12px 24px;border-radius:8px">언제 · 누가</p>
|
||||||
|
<p style="font-size:28px;color:#F7F6F2;border:2px solid #4A5D80;padding:12px 24px;border-radius:8px">얼마나</p>
|
||||||
|
</div>
|
||||||
|
<p style="font-family:'JetBrains Mono', 'Courier New', monospace;font-size:32px;font-weight:600;color:#F2A66B">Q & A</p>
|
||||||
|
<p style="position:absolute;left:128px;bottom:64px;width:1200px;font-size:24px;color:#9AA8BF">AIO 1기 최종 프로젝트 · 기획서 잘 쓰는 법</p>
|
||||||
|
<p style="position:absolute;right:128px;bottom:64px;width:200px;font-size:24px;color:#9AA8BF;text-align:right;font-family:'JetBrains Mono', 'Courier New', monospace">19 / 19</p>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div></div>
|
||||||
|
<div class="progress"></div>
|
||||||
|
<div class="nav" aria-label="슬라이드 이동">
|
||||||
|
<button id="prev" title="이전 (←)" aria-label="이전 슬라이드">‹</button>
|
||||||
|
<span id="count"></span>
|
||||||
|
<button id="next" title="다음 (→)" aria-label="다음 슬라이드">›</button>
|
||||||
|
<button id="fs" title="전체 화면 (F)" aria-label="전체 화면">⛶</button>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
const frames = [...document.querySelectorAll('.frame')];
|
||||||
|
const n = frames.length;
|
||||||
|
let cur = 0;
|
||||||
|
function fit() {
|
||||||
|
const f = frames[cur];
|
||||||
|
f.querySelector('.slide').style.transform = 'scale(' + (f.clientWidth / 1920) + ')';
|
||||||
|
}
|
||||||
|
function go(i) {
|
||||||
|
cur = Math.max(0, Math.min(n - 1, i));
|
||||||
|
frames.forEach((f, k) => f.classList.toggle('active', k === cur));
|
||||||
|
document.getElementById('count').textContent = (cur + 1) + ' / ' + n;
|
||||||
|
document.querySelector('.progress').style.width = ((cur + 1) / n * 100) + '%';
|
||||||
|
history.replaceState(null, '', '#' + (cur + 1));
|
||||||
|
fit();
|
||||||
|
}
|
||||||
|
addEventListener('keydown', e => {
|
||||||
|
if (e.altKey || e.ctrlKey || e.metaKey) return;
|
||||||
|
const k = e.key;
|
||||||
|
if (['ArrowRight', 'ArrowDown', 'PageDown', ' ', 'Enter'].includes(k)) { e.preventDefault(); go(cur + (e.shiftKey && k === ' ' ? -1 : 1)); }
|
||||||
|
else if (['ArrowLeft', 'ArrowUp', 'PageUp', 'Backspace'].includes(k)) { e.preventDefault(); go(cur - 1); }
|
||||||
|
else if (k === 'Home') { e.preventDefault(); go(0); }
|
||||||
|
else if (k === 'End') { e.preventDefault(); go(n - 1); }
|
||||||
|
else if (k === 'f' || k === 'F') toggleFs();
|
||||||
|
});
|
||||||
|
function toggleFs() {
|
||||||
|
if (document.fullscreenElement) document.exitFullscreen();
|
||||||
|
else document.documentElement.requestFullscreen && document.documentElement.requestFullscreen();
|
||||||
|
}
|
||||||
|
document.getElementById('prev').onclick = () => go(cur - 1);
|
||||||
|
document.getElementById('next').onclick = () => go(cur + 1);
|
||||||
|
document.getElementById('fs').onclick = toggleFs;
|
||||||
|
let tx = null;
|
||||||
|
addEventListener('touchstart', e => { tx = e.touches[0].clientX; }, { passive: true });
|
||||||
|
addEventListener('touchend', e => {
|
||||||
|
if (tx === null) return;
|
||||||
|
const dx = e.changedTouches[0].clientX - tx; tx = null;
|
||||||
|
if (Math.abs(dx) > 50) go(cur + (dx < 0 ? 1 : -1));
|
||||||
|
});
|
||||||
|
let hideT;
|
||||||
|
addEventListener('mousemove', () => {
|
||||||
|
document.body.classList.add('moved'); clearTimeout(hideT);
|
||||||
|
hideT = setTimeout(() => document.body.classList.remove('moved'), 1500);
|
||||||
|
});
|
||||||
|
addEventListener('resize', fit);
|
||||||
|
addEventListener('hashchange', () => go((parseInt(location.hash.slice(1)) || 1) - 1));
|
||||||
|
go((parseInt(location.hash.slice(1)) || 1) - 1);
|
||||||
|
addEventListener('beforeprint', () => document.querySelectorAll('.slide').forEach(s => s.style.transform = 'none'));
|
||||||
|
addEventListener('afterprint', () => { frames.forEach(f => f.querySelector('.slide').style.transform = ''); fit(); });
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
Reference in new issue
Block a user