Files
aio-01d4-stu/StuDoc/에이전트시대의_MSA.html
T

492 lines
143 KiB
HTML
Raw Normal View History

<!doctype html><html lang="ko"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>에이전트 시대의 MSA</title>
<link rel="preconnect" href="https://fonts.googleapis.com"><link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700;900&display=swap" rel="stylesheet">
<style>
:root{--navy:#0B1F3A;--ink:#0F172A;--teal:#0D9488;--teal-l:#5EEAD4;--amber:#F59E0B;--slate:#64748B;--card:#EEF3F8;--mutedd:#B6C3D6;--bg:#1a2433}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;background:var(--bg);font-family:"Noto Sans KR","Noto Sans CJK KR",sans-serif;color:var(--ink)}
#stage{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;overflow:hidden}
.slide{position:absolute;width:1280px;height:720px;display:none;overflow:hidden;transform-origin:center center}
.slide.on{display:block}
.slide.light{background:#fff}.slide.dark{background:var(--navy);color:#fff}
.inner{position:absolute;inset:38px 64px 56px}
footer{position:absolute;left:64px;bottom:20px;font-size:13px;color:var(--slate)}
.pg{position:absolute;right:64px;bottom:20px;font-size:13px;color:var(--slate)}.dark .pg{color:var(--mutedd)}
.notes{display:none}
h2{font-size:34px;font-weight:700;color:var(--navy);text-align:center;height:56px;line-height:56px}
.lead{font-size:18px;color:var(--slate);margin:6px 0 22px}
.t-steps h2,.t-code h2{margin-bottom:22px}.t-analogy h2{margin-bottom:28px}
h3{font-size:20px;font-weight:700;color:var(--navy)}
p{font-size:18px;line-height:1.5}.sm{font-size:15px}.muted{color:var(--slate)}.muted-d{color:var(--mutedd)}.teal{color:var(--teal)}
.card{background:var(--card);border-radius:14px;padding:22px}
.ic{display:inline-flex;align-items:center;justify-content:center;flex:none}.ic svg{width:100%;height:100%}
.circ{width:56px;height:56px;border-radius:50%;background:var(--teal);color:#fff;padding:14px}
.circ.lg{width:70px;height:70px;padding:17px}.circ.xl{width:112px;height:112px;padding:28px}.circ.sm{width:36px;height:36px;padding:9px}
.circ.amber{background:var(--amber)}.circ.navy{background:var(--navy)}
.pill{display:inline-block;border-radius:99px;padding:4px 14px;font-size:14px;font-weight:700;color:#fff;background:var(--teal);white-space:nowrap}
.pill.amber{background:var(--amber)}.pill.slate{background:var(--slate)}
.row-sb{display:flex;align-items:center;justify-content:space-between;gap:10px}
.grid{display:grid;gap:24px}.g4{grid-template-columns:repeat(4,1fr);grid-auto-rows:204px}.g3{grid-template-columns:repeat(3,1fr);height:430px}
.g2{grid-template-columns:repeat(2,1fr);grid-auto-rows:200px}.g2.tight{grid-auto-rows:128px;gap:16px 24px}
.tile h3{margin-top:22px}.tile p{margin-top:4px}.tile.center{text-align:center}.tile.center .ic{margin:0 auto}.tile.center h3{margin-top:16px}
.num{color:var(--slate);font-size:15px}
.vcard h3.big{font-size:24px;margin:26px 0 12px}
.hcard{display:flex;gap:22px;align-items:center}.hcard>div{flex:1}.hcard p{margin-top:8px}
.sm-card{padding:16px 22px}.sm-card p{font-size:16px;margin-top:4px}
.title-l{position:absolute;left:24px;top:110px;width:640px}
.kicker{color:var(--teal-l);font-weight:700;font-size:17px}
h1{font-size:64px;font-weight:900;line-height:1.2;margin:10px 0}
.sub{font-size:26px;line-height:1.45}.meta{color:var(--mutedd);font-size:17px;margin-top:60px}
.net{position:absolute;right:30px;top:60px;width:380px;height:340px}.nodes{position:absolute;right:30px;top:60px;width:380px;height:340px}
.node{position:absolute;width:110px;height:110px;margin:-55px;border-radius:50%;background:var(--teal);color:#fff;padding:28px;display:flex}
.node.amber{background:var(--amber)}
.sec{position:absolute;left:40px;top:120px;width:760px}.no{font-size:92px;font-weight:900;color:var(--teal-l);line-height:1}
.ghost{position:absolute;right:40px;top:150px;width:360px;height:360px;color:var(--teal-l);opacity:.18}
.sm-ghost{width:280px;height:280px;top:40px}
.ana{display:flex;align-items:center;gap:0}.side{flex:1;height:370px;padding:26px 30px}
.side h3{font-size:23px;margin:10px 0 16px}.side ul{padding-left:22px}.side li{font-size:18px;line-height:1.5;margin-bottom:10px}
.approx{width:56px;height:56px;margin:0 -12px;z-index:1;border-radius:50%;background:#fff;border:2px solid var(--teal);color:var(--teal);font-size:26px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.take{margin-top:22px;background:rgba(13,148,136,.12);color:var(--teal);font-weight:700;font-size:20px;border-radius:12px;padding:14px 26px}
.flow{display:flex;align-items:stretch;gap:0;height:350px}.step{flex:1;text-align:center;display:flex;flex-direction:column;align-items:center;padding:24px 16px}
.step h3{margin:16px 0 10px;font-size:19px}.step p{font-size:17px}.step p.sm{font-size:15.5px}
.arrow{color:var(--teal);font-size:26px;display:flex;align-items:center;padding:0 10px}
.note{margin-top:22px;background:rgba(245,158,11,.16);border-radius:12px;padding:14px 26px;font-size:17px}
table{width:100%;border-collapse:collapse;font-size:18px}th{background:var(--teal);color:#fff;text-align:left;padding:14px 14px}
td{padding:14px;border-bottom:1px solid #D5DEE8}tbody tr:nth-child(odd){background:var(--card)}td:first-child{color:var(--teal);font-weight:700}
.stepwrap{display:flex;gap:26px;height:500px}.panel{width:340px;flex:none;background:var(--navy);border-radius:14px;color:#fff;padding:26px 30px;display:flex;flex-direction:column}
.steplbl{color:var(--teal-l);font-size:18px;text-align:center}.panel .ic{margin:22px auto 40px}.panel small{color:var(--amber);font-weight:700;font-size:15px}.panel p{margin-top:6px}
.items{list-style:none;flex:1;display:flex;flex-direction:column;gap:12px}.items li{flex:1;display:flex;align-items:center;gap:20px;padding:12px 24px}
.items .n{width:46px;height:46px;border-radius:50%;background:var(--teal);color:#fff;font-weight:700;font-size:19px;display:flex;align-items:center;justify-content:center;flex:none}
.items p{font-size:16px;margin-top:2px}
.codewrap{display:flex;gap:30px;height:430px}.checks{list-style:none;width:380px;flex:none;display:flex;flex-direction:column;justify-content:space-around}
.checks li{display:flex;gap:16px;align-items:flex-start}.checks p{font-size:16px}
pre{flex:1;background:var(--navy);color:#E2E8F0;border-radius:14px;padding:22px 26px;font:15px/1.6 ui-monospace,"Courier New",monospace;overflow:auto;white-space:pre}
.close{position:absolute;left:40px;top:80px;width:780px}.close .sub{font-size:23px;margin:10px 0 50px}
.checks.d{width:auto}.checks.d li{align-items:center;margin-bottom:22px;font-size:20px}
.circ.slate{background:var(--slate)}.circ.rose,.pill.rose{background:#E11D48}.circ.teal{background:var(--teal)}.pill.teal{background:var(--teal)}
.approx.vs{font-size:17px}
.title-l h1{font-size:54px}.title-l .meta{margin-top:40px}
.node .bot{position:absolute;right:-14px;top:-14px;width:50px;height:50px;border-radius:50%;background:var(--amber);padding:12px;display:flex}
.arch{display:flex;gap:26px;height:390px}.abox{display:flex;flex-direction:column;gap:12px}.mono{width:420px}.msa{flex:1}
.ux{background:var(--amber);color:#fff;font-weight:700;text-align:center;border-radius:10px;padding:10px;font-size:16px}
.mods{display:flex;gap:12px;flex:1}.mods div{flex:1;background:var(--teal);color:#fff;font-weight:700;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:17px}
.db{background:var(--navy);color:#fff;font-weight:700;border-radius:50%/22px;display:flex;align-items:center;justify-content:center;font-size:15px;height:58px;width:130px}
.db.big{width:auto;height:64px}
.amber-t{color:var(--amber);font-size:14px}
.msarow{display:flex;gap:14px;flex:1}.gw{width:110px;background:var(--amber);color:#fff;font-weight:700;border-radius:10px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:16px}
.svcs{flex:1;display:flex;flex-direction:column;justify-content:space-around}.svcrow{display:flex;align-items:center;gap:14px}
.arr{color:var(--slate);font-size:22px}.svc{background:var(--teal);color:#fff;font-weight:700;border-radius:10px;padding:16px 0;width:190px;text-align:center;font-size:16px}
.circ.sm.amber{width:46px;height:46px;padding:11px}
pre.prose{font:16px/1.65 "Noto Sans KR","Noto Sans CJK KR",sans-serif;white-space:pre-wrap}
pre.dense{font-size:13.5px;line-height:1.5}
#bar{position:fixed;left:0;bottom:0;height:4px;background:var(--teal);transition:width .2s}
#hud{position:fixed;right:14px;bottom:12px;display:flex;gap:8px;z-index:9}
#hud button{background:rgba(255,255,255,.12);color:#fff;border:0;border-radius:8px;padding:8px 12px;font:600 14px "Noto Sans KR",sans-serif;cursor:pointer}
#hud button:hover{background:var(--teal)}
#noteview{position:fixed;left:0;right:0;bottom:0;max-height:30%;overflow:auto;background:#0b1220ee;color:#e2e8f0;padding:14px 24px;font-size:16px;display:none;z-index:8}
body.shownotes #noteview{display:block}
@media print{@page{size:1280px 720px;margin:0}html,body{background:#fff}#stage{position:static;display:block}
.slide{display:block!important;position:relative;transform:none!important;page-break-after:always;break-after:page}#hud,#bar,#noteview{display:none!important}
*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
</style></head><body>
<main id="stage"><section class="slide dark t-title" data-i="0" aria-label="슬라이드 1">
<div class="inner"><div class="title-l"><p class="kicker">마이크로서비스 아키텍처 · 2026 개정판</p><h1>에이전트 시대의<br>마이크로서비스</h1>
<p class="sub">바이브 코딩과 코딩 에이전트로 다시 쓰는 MSA</p><p class="meta">이즈잇소프트 채문창 · 2022 원본 → 2026 개정</p></div>
<svg class="net" viewBox="0 0 380 400"><g stroke="#0D9488" stroke-width="3" stroke-dasharray="8 7">
<line x1="60" y1="200" x2="300" y2="60"/><line x1="60" y1="200" x2="300" y2="200"/><line x1="60" y1="200" x2="300" y2="340"/></g></svg>
<div class="nodes"><div class="node" style="left:60px;top:200px"><span class="ic "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"></path></svg></span></div><div class="node" style="left:300px;top:60px"><span class="ic "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path></svg></span><span class="bot"><span class="ic "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span></span></div><div class="node" style="left:300px;top:200px"><span class="ic "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"></path></svg></span><span class="bot"><span class="ic "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span></span></div><div class="node" style="left:300px;top:340px"><span class="ic "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.51
<span class="pg">1</span>
<aside class="notes">2022년에 만든 MSA 강의를 코딩 에이전트가 보편화된 2026년 기준으로 다시 썼습니다. 원칙은 그대로 두고, '누가 코드를 쓰는가'가 바뀌면서 달라진 비용 구조와 실무 방법을 다룹니다.</aside></section>
<section class="slide light t-compare" data-i="1" aria-label="슬라이드 2">
<div class="inner"><h2>2022년 이후, 무엇이 바뀌었나</h2><div class="ana">
<div class="card side"><div class="row-sb"><span class="pill slate">2022 원본</span><span class="ic circ lg slate"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"></path></svg></span></div>
<h3>사람이 코드를 쓴다</h3><ul><li>서비스 하나 = 개발팀 하나</li><li>병목은 구현 속도와 인력</li><li>MSA는 큰 조직의 전유물</li></ul></div><div class="approx">→</div>
<div class="card side"><div class="row-sb"><span class="pill ">2026 지금</span><span class="ic circ lg "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span></div>
<h3>에이전트가 코드를 쓴다</h3><ul><li>서비스 하나 = 사람 1명 + 에이전트 N</li><li>병목은 명세 · 검증 · 운영</li><li>1인 개발자도 MSA를 만들 수 있다</li></ul></div></div>
<div class="take">MSA의 원칙은 그대로, 바뀐 것은 '누가 · 얼마나 빨리' 만드느냐입니다</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">2</span>
<aside class="notes">핵심 메시지: 코드 작성 비용은 거의 0에 가까워졌지만, 분산 시스템의 운영 비용과 설계 실수의 비용은 그대로입니다. 오히려 잘못된 설계도 빨리 만들어집니다.</aside></section>
<section class="slide light t-agenda" data-i="2" aria-label="슬라이드 3">
<div class="inner"><h2>오늘의 순서</h2><p class="lead">2022 원본의 흐름을 유지하고, 각 장을 에이전트 관점으로 개정했습니다</p><div class="grid g4"><div class="card tile">
<div class="row-sb"><span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"></path></svg></span><b class="num">01</b></div>
<h3>MSA 다시 보기</h3><p class="muted sm">모놀리스 · 정의 · 장점 재평가</p></div><div class="card tile">
<div class="row-sb"><span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span><b class="num">02</b></div>
<h3>코딩 에이전트</h3><p class="muted sm">바이브 코딩과 에이전트의 원리</p></div><div class="card tile">
<div class="row-sb"><span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"></path></svg></span><b class="num">03</b></div>
<h3>에이전트로 설계</h3><p class="muted sm">경계 찾기 · 계약 우선</p></div><div class="card tile">
<div class="row-sb"><span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"></path></svg></span><b class="num">04</b></div>
<h3>에이전트로 구현</h3><p class="muted sm">구현요소 6가지 개정</p></div><div class="card tile">
<div class="row-sb"><span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z"></path></svg></span><b class="num">05</b></div>
<h3>문제점과 해결책</h3><p class="muted sm">원본 8가지 + 새 함정</p></div><div class="card tile">
<div class="row-sb"><span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z"></path></svg></span><b class="num">06</b></div>
<h3>팀 운영</h3><p class="muted sm">사람 1 + 에이전트 N</p></div><div class="card tile">
<div class="row-sb"><span class="ic circ amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"></path></svg></span><b class="num">07</b></div>
<h3>실습</h3><p class="muted sm">주문 시스템 3개 서비스</p></div><div class="card tile">
<div class="row-sb"><span class="ic circ amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z"></path></svg></span><b class="num">08</b></div>
<h3>정리 · 과제</h3><p class="muted sm">2022 → 2026 한 장 요약</p></div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">3</span>
</section>
<section class="slide dark t-section" data-i="3" aria-label="슬라이드 4">
<div class="inner"><div class="sec"><div class="no">01</div><h1>MSA 다시 보기</h1><p class="sub muted-d">변하지 않은 원칙과 달라진 비용</p></div><span class="ic ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"></path></svg></span></div>
<span class="pg">4</span>
</section>
<section class="slide light t-arch" data-i="4" aria-label="슬라이드 5">
<div class="inner"><h2>모놀리스 vs MSA — 그리고 서비스마다 에이전트</h2><p class="lead">원본의 사용자 · 상품 · 주문 예제를 그대로 가져왔습니다</p><div class="arch">
<div class="card abox mono"><span class="pill slate">모놀리스</span>
<div class="ux">UX · 프론트엔드</div><div class="mods"><div>사용자</div><div>상품</div><div>주문</div></div>
<div class="db big">공유 데이터베이스 1개</div></div>
<div class="card abox msa"><div class="row-sb"><span class="pill">MSA</span><b class="amber-t">에이전트</b></div>
<div class="msarow"><div class="gw">API<br>Gateway</div><div class="svcs"><div class="svcrow"><span class="arr">➜</span><div class="svc">사용자 서비스</div><div class="db">사용자 DB</div><span class="ic circ sm amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span></div><div class="svcrow"><span class="arr">➜</span><div class="svc">상품 서비스</div><div class="db">상품 DB</div><span class="ic circ sm amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span></div><div class="svcrow"><span class="arr">➜</span><div class="svc">주문 서비스</div><div class="db">주문 DB</div><span class="ic circ sm amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span></div></div></div></div>
</div><div class="note">서비스 경계 = 데이터 소유 경계 = 에이전트 한 세션이 맡는 작업 범위</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">5</span>
<aside class="notes">원본 5~6쪽 그림의 개정판입니다. 오른쪽 각 서비스 옆의 로봇 아이콘이 핵심: 서비스가 작고 경계가 분명할수록 에이전트가 전체를 이해하고 정확히 수정합니다.</aside></section>
<section class="slide light t-table" data-i="5" aria-label="슬라이드 6">
<div class="inner"><h2>MSA 정의 — 2022 원문과 2026 보완</h2><p class="lead">원칙은 한 줄도 버리지 않았습니다. 에이전트 시대에 맞는 해석만 덧붙였습니다</p><table style="font-size:16.900000000000002px"><colgroup><col style="width:17.77777777777778%"><col style="width:37.77777777777778%"><col style="width:44.44444444444444%"></colgroup>
<thead><tr><th>원칙</th><th>2022 원문</th><th>2026 보완</th></tr></thead>
<tbody><tr><td>작은 서비스</td><td>작은 서비스의 결합으로 하나의 앱</td><td>에이전트 한 세션이 통째로 이해할 크기</td></tr><tr><td>독립 배포</td><td>완전 자동화된 개발 · 배포</td><td>에이전트 PR을 CI가 자동 검증 후 배포</td></tr><tr><td>중앙 관리 최소</td><td>최소한의 중앙 관리 체계</td><td>중앙엔 계약(API 스키마)과 규칙 파일만</td></tr><tr><td>폴리글랏</td><td>멀티 언어 · 멀티 저장소</td><td>언어 장벽은 낮아짐, 리뷰 · 운영 부담은 그대로</td></tr><tr><td>독립 데이터</td><td>서비스별 데이터 저장소</td><td>변하지 않음 — 가장 중요한 원칙</td></tr></tbody></table></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">6</span>
</section>
<section class="slide light t-cards" data-i="6" aria-label="슬라이드 7">
<div class="inner"><h2>MSA 장점, 에이전트 시대에 다시 매기기</h2><p class="lead">원본 8쪽의 장점 목록을 세 가지로 다시 분류했습니다</p><div class="grid g3">
<div class="card vcard"><div class="row-sb"><span class="ic circ lg teal"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"></path></svg></span><span class="pill teal">강화</span></div><h3 class="big">더 강해진 장점</h3><p>작은 코드베이스 = 에이전트 정확도 상승.<br>서비스별로 에이전트를 병렬로 돌려 개발 속도가 배로 늘어남.</p>
</div>
<div class="card vcard"><div class="row-sb"><span class="ic circ lg slate"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"></path></svg></span><span class="pill slate">불변</span></div><h3 class="big">그대로인 비용</h3><p>네트워크 호출 지연, 분산 데이터 정합성, 배포 · 모니터링 대상 증가.<br>에이전트가 줄여주지 않음.</p>
</div>
<div class="card vcard"><div class="row-sb"><span class="ic circ lg rose"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"></path></svg></span><span class="pill rose">주의</span></div><h3 class="big">새로 생긴 위험</h3><p>만들기가 너무 쉬워 서비스를 남발.<br>10분 만에 '분산 모놀리스'가 완성될 수 있음.</p>
</div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">7</span>
</section>
<section class="slide light t-flow" data-i="7" aria-label="슬라이드 8">
<div class="inner"><h2>그래서 처음부터 MSA? — 모놀리스 먼저</h2><p class="lead">에이전트 덕분에 리팩터링 비용이 낮아져 '나중에 쪼개기'가 쉬워졌습니다</p><div class="flow"><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"></path></svg></span>
<h3>모듈러 모놀리스</h3><p class="">한 저장소 · 한 배포, 폴더로 도메인 분리</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"></path></svg></span>
<h3>경계 검증</h3><p class="">모듈 간 호출은 공개 인터페이스로만</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z"></path></svg></span>
<h3>분리 신호 감지</h3><p class="">부하 · 배포 주기 · 팀이 달라지는 모듈</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"></path></svg></span>
<h3>필요한 것만 분리</h3><p class="">에이전트가 모듈을 서비스로 추출</p></div></div><div class="note">1인 창업 · 초기 서비스는 모듈러 모놀리스로 충분한 경우가 대부분입니다 (Martin Fowler, MonolithFirst)</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">8</span>
</section>
<section class="slide light t-flow" data-i="8" aria-label="슬라이드 9">
<div class="inner"><h2>SoA · ESB에서 에이전트 인터페이스까지</h2><p class="lead">원본 10~11쪽의 역사에 한 칸을 더했습니다</p><div class="flow"><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z"></path></svg></span>
<h3>SOA · ESB</h3><p class="">2000년대, 중앙 버스와 분산 트랜잭션 — 무거움</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"></path></svg></span>
<h3>API Gateway</h3><p class="">2010년대 MSA, 입구 하나 · 서비스는 독립</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z"></path></svg></span>
<h3>서비스 메시</h3><p class="">쿠버네티스 위 사이드카로 통신 · 보안 · 관측</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z"></path></svg></span>
<h3>MCP 인터페이스</h3><p class="">사람뿐 아니라 AI 에이전트가 서비스를 호출</p></div></div><div class="note">교훈은 같습니다: 똑똑한 중앙(ESB)이 아니라 '똑똑한 끝점, 단순한 파이프'</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">9</span>
</section>
<section class="slide dark t-section" data-i="9" aria-label="슬라이드 10">
<div class="inner"><div class="sec"><div class="no">02</div><h1>코딩 에이전트 이해</h1><p class="sub muted-d">노드 안을 들여다보면 단순한 반복 루프</p></div><span class="ic ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span></div>
<span class="pg">10</span>
</section>
<section class="slide light t-compare" data-i="10" aria-label="슬라이드 11">
<div class="inner"><h2>바이브 코딩 vs 에이전트 기반 엔지니어링</h2><div class="ana">
<div class="card side"><div class="row-sb"><span class="pill slate">바이브 코딩</span><span class="ic circ lg slate"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z"></path></svg></span></div>
<h3>말로 만들고 결과만 본다</h3><ul><li>자연어로 요청, 실행되면 수락</li><li>코드를 다 읽지 않아도 된다</li><li>프로토타입 · 1회성 도구에 강함</li></ul></div><div class="approx vs">vs</div>
<div class="card side"><div class="row-sb"><span class="pill ">에이전트 엔지니어링</span><span class="ic circ lg "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z"></path></svg></span></div>
<h3>명세와 테스트로 지휘한다</h3><ul><li>계약 · 테스트 · 규칙 파일로 지시</li><li>변경 내용(diff)을 사람이 리뷰</li><li>운영되는 서비스에 필수</li></ul></div></div>
<div class="take">MSA를 느낌으로 만들면 분산 모놀리스가 됩니다 — 프로토타입은 바이브로, 서비스는 엔지니어링으로</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">11</span>
</section>
<section class="slide light t-flow" data-i="11" aria-label="슬라이드 12">
<div class="inner"><h2>코딩 에이전트 노드 안 들여다보기</h2><p class="lead">에이전트 = LLM + 도구(파일 · 셸 · git) + 끝날 때까지 도는 반복 루프</p><div class="flow"><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"></path></svg></span>
<h3>규칙 읽기</h3><p class="sm">요청 + AGENTS.md · 명세</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"></path></svg></span>
<h3>코드 탐색</h3><p class="sm">관련 파일을 찾아 읽음</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"></path></svg></span>
<h3>계획</h3><p class="sm">수정할 파일과 순서 결정</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"></path></svg></span>
<h3>수정 · 실행</h3><p class="sm">코드 변경, 테스트 실행</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z"></path></svg></span>
<h3>검증 · 반복</h3><p class="sm">실패하면 원인 분석 후 재시도</p></div></div><div class="note">그래서 테스트가 없으면 에이전트는 '성공'을 판단할 근거가 없습니다 — 테스트가 곧 지시서</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">12</span>
<aside class="notes">과정 철학인 '노드 안을 들여다본다'와 연결: 에이전트는 마법이 아니라 도구 호출을 반복하는 루프입니다. 루프의 종료 조건(테스트 통과)을 사람이 설계해야 합니다.</aside></section>
<section class="slide light t-cards" data-i="12" aria-label="슬라이드 13">
<div class="inner"><h2>도구 지형 한눈에</h2><p class="lead">도구 이름은 계속 바뀝니다. 유형으로 기억하세요</p><div class="grid g2">
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"></path></svg></span><div><div class="row-sb"><h3>터미널 에이전트</h3><span class="pill amber">수업 실습</span></div><p>claude · codex · agy — 저장소에서 직접 읽고, 실행하고, 고침</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"></path></svg></span><div><div class="row-sb"><h3>IDE 에이전트</h3><span class="pill amber">편집기</span></div><p>에디터 안에서 자동완성 · 대화 · 다중 파일 편집</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z"></path></svg></span><div><div class="row-sb"><h3>원격 에이전트</h3><span class="pill amber">비동기</span></div><p>이슈를 맡기면 클라우드에서 작업 후 PR로 돌려줌</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z"></path></svg></span><div><div class="row-sb"><h3>확장 표준</h3><span class="pill amber">연결</span></div><p>MCP(도구 연결), AGENTS.md · 스킬(규칙과 절차)</p></div>
</div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">13</span>
</section>
<section class="slide light t-code" data-i="13" aria-label="슬라이드 14">
<div class="inner"><h2>컨텍스트 엔지니어링 — 규칙 파일 배치</h2><div class="codewrap"><ul class="checks">
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>루트 AGENTS.md</h3><p class="muted">전 서비스 공통 규칙 · 금지사항</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>서비스별 AGENTS.md</h3><p class="muted">도메인 · 계약 위치 · 실행 명령</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>contracts/ 폴더</h3><p class="muted">OpenAPI · 이벤트 스키마 = 단일 진실</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>docs/adr/</h3><p class="muted">결정 이유를 남겨 에이전트도 따름</p></div></li></ul>
<pre class=""><code>shop/
├─ AGENTS.md # common rules
├─ CLAUDE.md # -&gt; see AGENTS.md
├─ contracts/
│ ├─ user.openapi.yaml
│ ├─ order.openapi.yaml
│ └─ events.asyncapi.yaml
├─ docs/adr/0001-db-per-service.md
└─ services/
├─ user/ AGENTS.md app/ tests/
├─ product/AGENTS.md app/ tests/
└─ order/ AGENTS.md app/ tests/</code></pre></div><div class="note">에이전트는 매 세션 기억이 없습니다 — 규칙 파일이 곧 에이전트의 장기 기억입니다</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">14</span>
</section>
<section class="slide dark t-section" data-i="14" aria-label="슬라이드 15">
<div class="inner"><div class="sec"><div class="no">03</div><h1>에이전트와 함께 설계하기</h1><p class="sub muted-d">설계는 사람이 결정하고, 에이전트는 초안과 검토를 돕는다</p></div><span class="ic ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"></path></svg></span></div>
<span class="pg">15</span>
</section>
<section class="slide light t-steps" data-i="15" aria-label="슬라이드 16">
<div class="inner"><h2>서비스 경계 찾기 — 에이전트와 이벤트 스토밍</h2><div class="stepwrap"><div class="panel"><b class="steplbl">BOUNDED CONTEXT</b><span class="ic circ xl"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"></path></svg></span>
<small>원본 20쪽 개정</small><p>같은 '고객'도 영업팀 · 배송팀 · 회계팀이 보는 모습이 다르다</p></div><ol class="items">
<li class="card"><span class="n">1</span><div><h3>도메인 이야기 수집</h3><p class="muted">요구사항 · 인터뷰 메모를 에이전트에게 제공</p></div></li>
<li class="card"><span class="n">2</span><div><h3>도메인 이벤트 뽑기</h3><p class="muted">'주문됨', '결제됨', '재고 부족' 같은 과거형 사건 목록 초안</p></div></li>
<li class="card"><span class="n">3</span><div><h3>컨텍스트 맵 초안</h3><p class="muted">이벤트를 묶어 후보 서비스와 소유 데이터를 제안받음</p></div></li>
<li class="card"><span class="n">4</span><div><h3>사람이 결정 · ADR 기록</h3><p class="muted">경계는 비즈니스 판단 — 결정 이유를 docs/adr 에 남김</p></div></li></ol></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">16</span>
</section>
<section class="slide light t-code" data-i="16" aria-label="슬라이드 17">
<div class="inner"><h2>프롬프트 예시 — 경계 초안 받기</h2><div class="codewrap"><ul class="checks">
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>역할과 산출물 형식 지정</h3><p class="muted">표 · 목록 등 검토하기 쉬운 형태로</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>결정은 요청하지 않기</h3><p class="muted">후보와 장단점만, 선택은 사람이</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>반대 의견도 요청</h3><p class="muted">'모놀리스로 충분한가?'를 꼭 묻기</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>결과는 ADR 초안으로</h3><p class="muted">합의한 내용만 저장소에 커밋</p></div></li></ul>
<pre class="prose"><code>너는 DDD에 익숙한 아키텍트야.
docs/requirements.md 를 읽고 다음을 만들어 줘.
1. 도메인 이벤트 목록 (과거형, 발생 주체 포함)
2. 이벤트를 묶은 바운디드 컨텍스트 후보 2~3안
3. 각 안의 서비스별 소유 데이터와 동기/비동기 호출
4. 각 안의 장단점, 그리고
'모듈러 모놀리스로 충분한 이유'가 있다면 그것도
코드는 아직 작성하지 마. 표로 정리해.</code></pre></div><div class="note">설계 단계에서 코드 생성을 막아야 에이전트가 '빨리 만들기'로 넘어가지 않습니다</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">17</span>
</section>
<section class="slide light t-flow" data-i="17" aria-label="슬라이드 18">
<div class="inner"><h2>계약 우선 — 인터페이스 불일치의 해법</h2><p class="lead">원본 23쪽 문제의 답 — 계약은 사람이 승인하고, 구현은 에이전트가 맡는다</p><div class="flow"><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"></path></svg></span>
<h3>명세 작성</h3><p class="sm">OpenAPI · AsyncAPI 초안</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z"></path></svg></span>
<h3>사람이 승인</h3><p class="sm">필드 · 오류 코드 · 버전 규칙 확정</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"></path></svg></span>
<h3>코드 생성</h3><p class="sm">에이전트가 서버 스텁 · 클라이언트 생성</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 480 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z"></path></svg></span>
<h3>계약 테스트</h3><p class="sm">CI에서 계약 위반 시 머지 차단</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z"></path></svg></span>
<h3>구현 · 배포</h3><p class="sm">서비스별로 독립 진행</p></div></div><div class="note">규칙: 계약 파일 변경은 반드시 별도 PR + 사람 리뷰. 에이전트가 계약을 '맞춰서' 고치지 못하게</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">18</span>
</section>
<section class="slide dark t-section" data-i="18" aria-label="슬라이드 19">
<div class="inner"><div class="sec"><div class="no">04</div><h1>에이전트로 구현하기</h1><p class="sub muted-d">원본 12~18쪽 구현요소 6가지의 2026 개정</p></div><span class="ic ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"></path></svg></span></div>
<span class="pg">19</span>
</section>
<section class="slide light t-table" data-i="19" aria-label="슬라이드 20">
<div class="inner"><h2>구현요소 6가지, 2026 실무 선택</h2><p class="lead">왼쪽은 원본 그대로, 오른쪽 두 칸이 개정 내용입니다</p><table style="font-size:15.600000000000001px"><colgroup><col style="width:22.22222222222222%"><col style="width:38.88888888888889%"><col style="width:38.88888888888889%"></colgroup>
<thead><tr><th>2022 구현요소</th><th>2026 실무 선택</th><th>에이전트 활용 포인트</th></tr></thead>
<tbody><tr><td>데이터 분산관리</td><td>서비스별 DB, Outbox, Saga</td><td>스키마 · 마이그레이션 · Saga 테스트 작성</td></tr><tr><td>RESTful / 비동기</td><td>REST · gRPC + Kafka · NATS · Redis Streams</td><td>계약에서 클라이언트 · 컨슈머 생성</td></tr><tr><td>폴리글랏</td><td>Python · Go · TypeScript 중 선택</td><td>언어 장벽 ↓ — 단, 리뷰 가능한 언어로 제한</td></tr><tr><td>DevOps</td><td>GitOps, CI가 에이전트 PR 검증</td><td>Dockerfile · 파이프라인 초안 작성</td></tr><tr><td>클라우드</td><td>컨테이너 + k8s / k3s (온프레미스 포함)</td><td>매니페스트 생성, 리소스 설정 점검</td></tr><tr><td>Design for Failure</td><td>타임아웃 · 재시도 · 서킷브레이커 · 멱등성</td><td>장애 주입 테스트, 트레이스 분석</td></tr></tbody></table></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">20</span>
</section>
<section class="slide light t-flow" data-i="20" aria-label="슬라이드 21">
<div class="inner"><h2>데이터 분산관리 — 분산 트랜잭션 대신 Saga</h2><p class="lead">원본 13쪽 'Not 분산 트랜잭션'을 구현하는 표준 패턴</p><div class="flow"><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"></path></svg></span>
<h3>주문 생성</h3><p class="">주문 서비스: 상태 PENDING, 이벤트 발행</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"></path></svg></span>
<h3>재고 예약</h3><p class="">상품 서비스: 재고 차감, '예약됨' 발행</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z"></path></svg></span>
<h3>결제</h3><p class="">결제 실패 시 '결제 실패' 이벤트 발행</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"></path></svg></span>
<h3>보상 트랜잭션</h3><p class="">재고 복원 → 주문 CANCELLED</p></div></div><div class="note">Outbox 패턴: DB 저장과 이벤트 발행을 한 트랜잭션에 묶어 '저장됐는데 이벤트 유실'을 막음</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">21</span>
<aside class="notes">에이전트에게 Saga를 시킬 때는 성공 경로가 아니라 '실패 시나리오 테스트를 먼저 써 줘'라고 요청하는 것이 핵심입니다.</aside></section>
<section class="slide light t-code" data-i="21" aria-label="슬라이드 22">
<div class="inner"><h2>비동기 이벤트 — 주문 서비스 예시</h2><div class="codewrap"><ul class="checks">
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>FastAPI + Redis Streams</h3><p class="muted">실습 환경에서 가장 가벼운 조합</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>이벤트 이름은 과거형</h3><p class="muted">order.created, stock.reserved</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>멱등성 키 필수</h3><p class="muted">같은 이벤트가 두 번 와도 한 번만 처리</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>스키마는 contracts/</h3><p class="muted">에이전트는 계약을 읽고 구현</p></div></li></ul>
<pre class=" dense"><code># services/order/app/main.py
import json, uuid, redis
from fastapi import FastAPI, Header
app = FastAPI()
r = redis.Redis(host="redis")
@app.post("/orders")
def create(body: dict,
key: str = Header(alias="Idempotency-Key")):
if not r.set(f"idem:{key}", 1, nx=True, ex=86400):
return {"status": "duplicate"}
oid = str(uuid.uuid4())
# save PENDING order + outbox row
evt = json.dumps({"id": oid, **body})
r.xadd("order.created", {"data": evt})
return {"id": oid, "status": "PENDING"}</code></pre></div><div class="note">이 코드도 에이전트가 계약 파일을 읽고 생성한 초안 — 사람은 멱등성 · 오류 처리를 리뷰합니다</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">22</span>
</section>
<section class="slide light t-code" data-i="22" aria-label="슬라이드 23">
<div class="inner"><h2>서비스마다 에이전트 — git worktree 병렬 개발</h2><div class="codewrap"><ul class="checks">
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>서비스별 작업 폴더 분리</h3><p class="muted">에이전트끼리 파일 충돌 없음</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>tmux 창 하나에 에이전트 하나</h3><p class="muted">1일차에 구축한 환경 그대로</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>각자 브랜치 → PR</h3><p class="muted">lazygit 으로 diff 리뷰 후 머지</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>계약은 main 에서만 변경</h3><p class="muted">worktree 에서 계약 수정 금지</p></div></li></ul>
<pre class=""><code># one worktree per service
$ git worktree add ../shop-user -b feat/user
$ git worktree add ../shop-product -b feat/product
$ git worktree add ../shop-order -b feat/order
# tmux: 3 panes, 3 agents
$ tmux new -s msa
pane 1) cd ../shop-user &amp;&amp; claude
pane 2) cd ../shop-product &amp;&amp; codex
pane 3) cd ../shop-order &amp;&amp; claude
# review &amp; merge
$ lazygit</code></pre></div><div class="note">사람의 역할은 '동시에 세 명의 개발자에게 일을 나눠 주고 리뷰하는 팀장'입니다</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">23</span>
</section>
<section class="slide light t-cards" data-i="23" aria-label="슬라이드 24">
<div class="inner"><h2>Design for Failure + 관측성</h2><p class="lead">원본 18쪽 — 실패를 전제로 설계하고, 실패를 '보이게' 만든다</p><div class="grid g2">
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z"></path></svg></span><div><div class="row-sb"><h3>타임아웃 · 재시도</h3><span class="pill amber">기본</span></div><p>모든 외부 호출에 타임아웃, 재시도는 지수 백오프로</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"></path></svg></span><div><div class="row-sb"><h3>서킷 브레이커</h3><span class="pill amber">차단</span></div><p>계속 실패하는 서비스는 잠시 끊어 장애 전파를 막음</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"></path></svg></span><div><div class="row-sb"><h3>멱등성</h3><span class="pill amber">중복 방지</span></div><p>재시도와 중복 이벤트에도 결과가 한 번만 반영되게</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"></path></svg></span><div><div class="row-sb"><h3>OpenTelemetry</h3><span class="pill amber">추적</span></div><p>요청 하나의 전 구간 트레이스 — 에이전트에게 보여주면 원인을 함께 찾음</p></div>
</div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">24</span>
</section>
<section class="slide light t-flow" data-i="24" aria-label="슬라이드 25">
<div class="inner"><h2>서비스를 에이전트에게 열기 — MCP</h2><p class="lead">API Gateway가 사람용 입구라면, MCP 서버는 AI 에이전트용 입구입니다</p><div class="flow"><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"></path></svg></span>
<h3>AI 에이전트</h3><p class="">'어제 취소된 주문 보여줘'</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z"></path></svg></span>
<h3>MCP 서버</h3><p class="">도구: get_orders, get_stock (읽기 전용부터)</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"></path></svg></span>
<h3>API Gateway</h3><p class="">인증 · 권한 · 호출량 제한</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"></path></svg></span>
<h3>주문 · 상품 서비스</h3><p class="">기존 API 그대로 응답</p></div></div><div class="note">쓰기 도구(주문 취소 · 환불)는 사람 승인 단계를 둡니다 — 원본의 '최소 권한' 원칙 그대로</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">25</span>
</section>
<section class="slide dark t-section" data-i="25" aria-label="슬라이드 26">
<div class="inner"><div class="sec"><div class="no">05</div><h1>문제점과 해결책 2026</h1><p class="sub muted-d">원본 19~27쪽 8가지 문제의 개정판</p></div><span class="ic ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z"></path></svg></span></div>
<span class="pg">26</span>
</section>
<section class="slide light t-table" data-i="26" aria-label="슬라이드 27">
<div class="inner"><h2>문제점과 해결책 ① 설계 · 운영</h2><p class="lead">2022년 해결책은 여전히 유효합니다. 에이전트가 실행 비용을 낮춰 줄 뿐입니다</p><table style="font-size:16.900000000000002px"><colgroup><col style="width:21.11111111111111%"><col style="width:31.11111111111111%"><col style="width:47.77777777777777%"></colgroup>
<thead><tr><th>문제</th><th>2022 해결책</th><th>2026 에이전트 활용</th></tr></thead>
<tbody><tr><td>서비스 범위 설정</td><td>Bounded Context, DDD</td><td>에이전트와 이벤트 스토밍, 결정은 사람이</td></tr><tr><td>레거시와 공존</td><td>SoA 연동, API G/W</td><td>스트랭글러 피그: 기능 단위 이전 + 회귀 테스트</td></tr><tr><td>운영 오버헤드</td><td>DevOps 배포 자동화</td><td>서비스 템플릿 + 에이전트가 CI/CD · IaC 생성</td></tr><tr><td>인터페이스 불일치</td><td>팀 간 커뮤니케이션</td><td>계약 우선 + CI에서 계약 테스트 강제</td></tr></tbody></table></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">27</span>
</section>
<section class="slide light t-table" data-i="27" aria-label="슬라이드 28">
<div class="inner"><h2>문제점과 해결책 ② 코드 · 데이터 · 테스트</h2><p class="lead">에이전트가 가장 크게 도움이 되는 영역은 '테스트 작성'입니다</p><table style="font-size:16.900000000000002px"><colgroup><col style="width:21.11111111111111%"><col style="width:31.11111111111111%"><col style="width:47.77777777777777%"></colgroup>
<thead><tr><th>문제</th><th>2022 해결책</th><th>2026 에이전트 활용</th></tr></thead>
<tbody><tr><td>코드 중복</td><td>단일 언어 · 프레임워크</td><td>공통 템플릿 · 스킬로 '같은 방식'의 중복 관리</td></tr><tr><td>데이터 중복</td><td>전체 시스템 관점 고려</td><td>소유 서비스 명시, 이벤트 · CDC로 동기화</td></tr><tr><td>분산 복잡성</td><td>Actor Model, Reactive</td><td>이벤트 기반 + 분산 트레이싱을 에이전트가 분석</td></tr><tr><td>테스트의 어려움</td><td>(상호 테스트 어려움)</td><td>계약 · 통합 테스트를 에이전트가 작성, 시나리오는 사람이</td></tr></tbody></table></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">28</span>
</section>
<section class="slide light t-checklist" data-i="28" aria-label="슬라이드 29">
<div class="inner"><h2>새로 생긴 문제 — 바이브 코딩의 함정</h2><p class="lead">2022년에는 없던 위험입니다. 모두 실제로 자주 일어납니다</p><div class="grid g2 tight"><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z"></path></svg></span><div><h3>분산 모놀리스 양산</h3><p class="muted">서비스는 많은데 동기 호출로 줄줄이 묶임 → 경계부터 재검토</p></div></div><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"></path></svg></span><div><h3>존재하지 않는 API · 패키지</h3><p class="muted">에이전트가 지어낸 이름 → 잠금 파일 · 의존성 검사 필수</p></div></div><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"></path></svg></span><div><h3>비밀키 유출</h3><p class="muted">코드 · 로그에 토큰 하드코딩 → 시크릿 스캔을 CI에</p></div></div><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 480 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z"></path></svg></span><div><h3>테스트를 고쳐서 통과</h3><p class="muted">구현 대신 테스트를 수정 → 테스트 파일 변경은 별도 리뷰</p></div></div><div class="card hcard sm-card">
<span class="ic circ amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"></path></svg></span><div><h3>서비스마다 다른 규칙</h3><p class="muted">세션마다 스타일이 표류 → 공통 AGENTS.md · 린터로 고정</p></div></div><div class="card hcard sm-card">
<span class="ic circ amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"></path></svg></span><div><h3>리뷰 병목</h3><p class="muted">생성 속도 &gt; 리뷰 속도 → 작은 PR, 자동 검사 먼저</p></div></div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">29</span>
</section>
<section class="slide dark t-section" data-i="29" aria-label="슬라이드 30">
<div class="inner"><div class="sec"><div class="no">06</div><h1>개발 팀 운영</h1><p class="sub muted-d">원본 28~32쪽 — 팀의 정의가 바뀌었다</p></div><span class="ic ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z"></path></svg></span></div>
<span class="pg">30</span>
</section>
<section class="slide light t-compare" data-i="30" aria-label="슬라이드 31">
<div class="inner"><h2>팀 구성의 변화</h2><div class="ana">
<div class="card side"><div class="row-sb"><span class="pill slate">2022 팀</span><span class="ic circ lg slate"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"></path></svg></span></div>
<h3>사람 5~9명이 한 서비스</h3><ul><li>피자 두 판 규모의 팀</li><li>기획 · 개발 · 테스트 · 운영 분업</li><li>사람 수가 곧 개발 속도</li></ul></div><div class="approx">→</div>
<div class="card side"><div class="row-sb"><span class="pill ">2026 팀</span><span class="ic circ lg "><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"></path></svg></span></div>
<h3>사람 1 + 에이전트 N</h3><ul><li>사람은 설계 · 리뷰 · 운영 책임</li><li>에이전트는 구현 · 테스트 · 문서</li><li>리뷰 역량이 곧 개발 속도</li></ul></div></div>
<div class="take">책임은 위임할 수 없습니다 — 에이전트가 쓴 코드도 머지한 사람의 코드입니다</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">31</span>
</section>
<section class="slide light t-cards" data-i="31" aria-label="슬라이드 32">
<div class="inner"><h2>원본 팀 운영 원칙 4가지, 2026 버전</h2><p class="lead">지식노동자를 위한 원칙은 에이전트를 다루는 사람에게도 그대로 적용됩니다</p><div class="grid g2">
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z"></path></svg></span><div><div class="row-sb"><h3>최적화된 팀 규모</h3><span class="pill amber">29쪽</span></div><p>작은 팀 → 사람 1~2명이 서비스 하나와 에이전트들을 소유</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z"></path></svg></span><div><div class="row-sb"><h3>독립적인 팀 운영</h3><span class="pill amber">30쪽</span></div><p>서비스별 AGENTS.md로 자율, 공통 가드레일로 일관성</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"></path></svg></span><div><div class="row-sb"><h3>아키텍처 선택 자율</h3><span class="pill amber">31쪽</span></div><p>선택은 자유, 단 ADR로 이유를 남겨 에이전트도 따르게</p></div>
</div>
<div class="card hcard"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z"></path></svg></span><div><div class="row-sb"><h3>상향식 개발</h3><span class="pill amber">32쪽</span></div><p>명세 주도(spec-driven) + 작은 반복, 큰 계획 일괄 생성 금지</p></div>
</div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">32</span>
</section>
<section class="slide light t-checklist" data-i="32" aria-label="슬라이드 33">
<div class="inner"><h2>에이전트 가드레일 — 맡기기 전에 정할 것</h2><p class="lead">권한은 작게 시작해서 신뢰가 쌓이면 넓힙니다</p><div class="grid g2 tight"><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z"></path></svg></span><div><h3>샌드박스 · 허용 명령</h3><p class="muted">작업 폴더 밖 접근 금지, 위험 명령은 승인 후 실행</p></div></div><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z"></path></svg></span><div><h3>main 직접 push 금지</h3><p class="muted">모든 변경은 브랜치 → PR → CI → 사람 리뷰</p></div></div><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"></path></svg></span><div><h3>비밀은 환경변수로</h3><p class="muted">.env 는 git 제외, 운영 키는 에이전트에게 주지 않음</p></div></div><div class="card hcard sm-card">
<span class="ic circ"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z"></path></svg></span><div><h3>사람 승인 작업</h3><p class="muted">DB 마이그레이션 · 배포 · 데이터 삭제 · 계약 변경</p></div></div><div class="card hcard sm-card">
<span class="ic circ amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"></path></svg></span><div><h3>비용 한도</h3><p class="muted">API 사용량 · 실행 시간 상한, 무한 루프 방지</p></div></div><div class="card hcard sm-card">
<span class="ic circ amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"></path></svg></span><div><h3>기록 남기기</h3><p class="muted">에이전트 세션 로그 · PR 설명에 근거를 남김</p></div></div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">33</span>
</section>
<section class="slide dark t-section" data-i="33" aria-label="슬라이드 34">
<div class="inner"><div class="sec"><div class="no">07</div><h1>실습: 주문 시스템 MSA</h1><p class="sub muted-d">사용자 · 상품 · 주문을 에이전트 3개로</p></div><span class="ic ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"></path></svg></span></div>
<span class="pg">34</span>
</section>
<section class="slide light t-flow" data-i="34" aria-label="슬라이드 35">
<div class="inner"><h2>실습 아키텍처</h2><p class="lead">docker compose 하나로 로컬에서 전부 실행합니다</p><div class="flow"><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"></path></svg></span>
<h3>게이트웨이</h3><p class="sm">프록시 · 인증 헤더 검사</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"></path></svg></span>
<h3>사용자</h3><p class="sm">user 서비스<br>회원 · 로그인<br>users.db</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"></path></svg></span>
<h3>상품</h3><p class="sm">product 서비스<br>상품 · 재고<br>products.db</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"></path></svg></span>
<h3>주문</h3><p class="sm">order 서비스<br>주문 · Saga<br>orders.db</p></div><div class="arrow">➜</div><div class="card step"><span class="ic circ lg amber"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"></path></svg></span>
<h3>이벤트 버스</h3><p class="sm">Redis Streams<br>서비스 간 이벤트 전달</p></div></div><div class="note">서비스마다 자기 DB(SQLite)를 가지며, 다른 서비스 DB에 직접 접근하면 실습 감점</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">35</span>
</section>
<section class="slide light t-steps" data-i="35" aria-label="슬라이드 36">
<div class="inner"><h2>실습 진행 순서</h2><div class="stepwrap"><div class="panel"><b class="steplbl">LAB</b><span class="ic circ xl"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"></path></svg></span>
<small>진행 방식</small><p>1인 팀장이 에이전트 개발자 세 명을 지휘하는 하루</p></div><ol class="items">
<li class="card"><span class="n">1</span><div><h3>명세 · 계약 확정 (사람, 40분)</h3><p class="muted">요구사항 → 이벤트 스토밍 → contracts/ 와 루트 AGENTS.md 작성</p></div></li>
<li class="card"><span class="n">2</span><div><h3>병렬 구현 (에이전트, 60분)</h3><p class="muted">worktree 3개 + tmux, 서비스별 에이전트에게 계약 기반 구현 지시</p></div></li>
<li class="card"><span class="n">3</span><div><h3>통합 · 계약 테스트 (40분)</h3><p class="muted">docker compose up, 주문 → 재고 예약 → 완료 흐름 확인</p></div></li>
<li class="card"><span class="n">4</span><div><h3>장애 주입 (20분)</h3><p class="muted">product 서비스를 멈추고 주문이 보상 처리되는지 확인</p></div></li></ol></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">36</span>
</section>
<section class="slide light t-code" data-i="36" aria-label="슬라이드 37">
<div class="inner"><h2>서비스 에이전트에게 주는 첫 지시</h2><div class="codewrap"><ul class="checks">
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>읽을 파일을 명시</h3><p class="muted">AGENTS.md · 계약 · 요구사항</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>테스트 먼저</h3><p class="muted">실패하는 테스트 → 구현 순서</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>범위 제한</h3><p class="muted">자기 서비스 폴더만 수정</p></div></li>
<li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><div><h3>완료 조건 명시</h3><p class="muted">pytest 통과 + 실행 방법 보고</p></div></li></ul>
<pre class="prose"><code>services/order/AGENTS.md 와 contracts/order.openapi.yaml,
contracts/events.asyncapi.yaml 을 먼저 읽어.
1. 계약의 모든 엔드포인트에 대한 pytest 를 먼저 작성해.
재고 부족 · 결제 실패 · 중복 요청 시나리오를 포함해.
2. 테스트가 실패하는 것을 확인한 뒤 구현해.
3. services/order/ 밖의 파일과 contracts/ 는 수정하지 마.
계약이 이상하면 수정하지 말고 나에게 보고해.
4. 끝나면 pytest 결과와 실행 방법을 요약해 줘.</code></pre></div><div class="note">좋은 지시 = 읽을 것 + 순서 + 금지 범위 + 완료 조건</div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">37</span>
</section>
<section class="slide light t-summary" data-i="37" aria-label="슬라이드 38">
<div class="inner"><h2>2022 → 2026 한 장 요약</h2><p class="lead">왼쪽은 원본의 개념, 아래는 2026년의 실천 방법</p><div class="grid g4"><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"></path></svg></span>
<h3>모놀리스 vs MSA</h3><p class="teal sm"><b>모듈러 모놀리스 먼저</b></p></div><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"></path></svg></span>
<h3>서비스 경계</h3><p class="teal sm"><b>에이전트와 이벤트 스토밍</b></p></div><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"></path></svg></span>
<h3>인터페이스</h3><p class="teal sm"><b>계약 우선 + 계약 테스트</b></p></div><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"></path></svg></span>
<h3>분산 데이터</h3><p class="teal sm"><b>Saga + Outbox</b></p></div><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z"></path></svg></span>
<h3>DevOps</h3><p class="teal sm"><b>CI가 에이전트 PR 검증</b></p></div><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"></path></svg></span>
<h3>장애 대비</h3><p class="teal sm"><b>재시도 · 멱등성 · 추적</b></p></div><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"></path></svg></span>
<h3>작은 팀</h3><p class="teal sm"><b>사람 1 + 에이전트 N</b></p></div><div class="card tile center"><span class="ic circ lg"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"></path></svg></span>
<h3>팀의 지식</h3><p class="teal sm"><b>AGENTS.md · ADR</b></p></div></div></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">38</span>
</section>
<section class="slide light t-table" data-i="38" aria-label="슬라이드 39">
<div class="inner"><h2>참고 자료</h2><p class="lead">원본 참고자료에 2026년 기준 자료를 추가했습니다</p><table style="font-size:15.600000000000001px"><colgroup><col style="width:44.44444444444444%"><col style="width:55.55555555555556%"></colgroup>
<thead><tr><th>자료</th><th>주소</th></tr></thead>
<tbody><tr><td>Martin Fowler — Microservices</td><td>martinfowler.com/articles/microservices.html</td></tr><tr><td>Martin Fowler — MonolithFirst</td><td>martinfowler.com/bliki/MonolithFirst.html</td></tr><tr><td>Chris Richardson — Saga · Outbox 패턴</td><td>microservices.io</td></tr><tr><td>AGENTS.md — 에이전트 규칙 파일</td><td>agents.md</td></tr><tr><td>Model Context Protocol (MCP)</td><td>modelcontextprotocol.io</td></tr><tr><td>OpenTelemetry — 분산 추적</td><td>opentelemetry.io</td></tr><tr><td>(원본 참고) 조대협의 블로그</td><td>bcho.tistory.com/948</td></tr></tbody></table></div>
<footer>에이전트 시대의 MSA</footer><span class="pg">39</span>
</section>
<section class="slide dark t-closing" data-i="39" aria-label="슬라이드 40">
<div class="inner"><span class="ic ghost sm-ghost"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z"></path></svg></span><div class="close"><h1>과제와 Q&amp;A</h1><p class="sub">실습한 주문 시스템을 저장소에 올리고, 아래 세 가지를 제출하세요</p>
<ul class="checks d"><li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><span class="muted-d">contracts/ · 루트와 서비스별 AGENTS.md · ADR 1건 이상</span></li><li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><span class="muted-d">장애 주입 결과: product 중지 시 주문이 CANCELLED 되는 로그 또는 트레이스</span></li><li><span class="ic circ sm"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" color="currentColor" style="color:currentColor" height="64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"></path></svg></span><span class="muted-d">회고 한 단락: 에이전트에게 맡긴 일과 내가 직접 결정한 일의 구분</span></li></ul></div></div>
<span class="pg">40</span>
</section></main>
<div id="bar"></div><div id="noteview"></div>
<div id="hud"><button id="prev" aria-label="이전">◀</button><button id="nt">노트</button><button id="fs">전체화면</button><button id="pr">PDF 저장</button><button id="next" aria-label="다음">▶</button></div>
<script>
const S=[...document.querySelectorAll('.slide')];let i=0;
function fit(){const k=Math.min(innerWidth/1280,innerHeight/720);S.forEach(s=>s.style.transform='scale('+k+')')}
function go(n){i=Math.max(0,Math.min(S.length-1,n));S.forEach((s,j)=>s.classList.toggle('on',j===i));
document.getElementById('bar').style.width=((i+1)/S.length*100)+'%';const nt=S[i].querySelector('.notes');
document.getElementById('noteview').textContent=nt?nt.textContent:'(강사 노트 없음)';try{history.replaceState(null,'','#'+(i+1))}catch(e){}}
addEventListener('resize',fit);
addEventListener('keydown',e=>{if(['ArrowRight','PageDown',' ','Enter'].includes(e.key)){e.preventDefault();go(i+1)}
else if(['ArrowLeft','PageUp','Backspace'].includes(e.key)){e.preventDefault();go(i-1)}else if(e.key==='Home')go(0);else if(e.key==='End')go(S.length-1);
else if(e.key==='n')document.body.classList.toggle('shownotes');else if(e.key==='f')toggleFs()});
let tx=null;addEventListener('touchstart',e=>tx=e.touches[0].clientX);addEventListener('touchend',e=>{if(tx===null)return;const dx=e.changedTouches[0].clientX-tx;if(Math.abs(dx)>40)go(i+(dx<0?1:-1));tx=null});
function toggleFs(){document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen()}
prev.onclick=()=>go(i-1);next.onclick=()=>go(i+1);nt.onclick=()=>document.body.classList.toggle('shownotes');fs.onclick=toggleFs;pr.onclick=()=>print();
fit();go((parseInt(location.hash.slice(1))||1)-1);
</script></body></html>