Files

518 lines
55 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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 &amp; 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>