init: 폴더구조 설계 및 인프라 설계
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-27T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="01-overall" id="overall">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="grp-outside" value="클러스터 외부" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#57606A;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="240" height="700" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-cluster" value="K3s 클러스터" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FBFCFD;strokeColor=#1F6FEB;strokeWidth=2;dashed=0;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1F6FEB;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="300" y="120" width="1260" height="700" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-edge" value="Edge: 인증·인가 (kube-system + mnt)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="180" width="620" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-data" value="Data (mnt)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#10B981;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#047857;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="180" width="300" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-secret" value="Secrets: Vault → VSO → K8s Secret (mnt)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#7C3AED;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="500" width="900" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="kc-side-grp" value="OIDC Issuer" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#D97706;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="500" width="300" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="user-icon" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="220" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="user-lbl" value="사용자
브라우저" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="284" width="140" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="op-icon" value="" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="600" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="op-lbl" value="운영자
Vault CLI / kubectl" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="664" width="200" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="traefik-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://www.vectorlogo.zone/logos/traefikio/traefikio-icon.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="380" y="244" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="traefik-lbl" value="Traefik
Ingress (kube-system)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="328" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="244" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="oauth2-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/pod.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="244" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="oauth2-lbl" value="oauth2-proxy
ForwardAuth (mnt)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="328" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num2" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="244" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="kc-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://raw.githubusercontent.com/cncf/artwork/master/projects/keycloak/icon/color/keycloak-icon-color.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="1330" y="538" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="kc-lbl" value="Keycloak
realm: platform" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1290" y="622" width="160" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="app-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://www.vectorlogo.zone/logos/springio/springio-icon.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="244" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="app-lbl" value="auth-server
Spring Boot · CA · MDC" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="328" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num3" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1070" y="244" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="pg-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://www.vectorlogo.zone/logos/postgresql/postgresql-icon.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="1268" y="244" width="68" height="68" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pg-lbl" value="Postgres
schema: auth" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1244" y="316" width="120" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num4" value="④" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#047857;fontColor=#047857;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1318" y="244" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="minio-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://raw.githubusercontent.com/minio/minio/master/.github/logo.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="1444" y="244" width="68" height="68" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="minio-lbl" value="MinIO
Tenant" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1420" y="316" width="120" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="vault-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://www.vectorlogo.zone/logos/vaultproject/vaultproject-icon.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="568" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="vault-lbl" value="Vault
file · single-node · manual unseal" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="335" y="652" width="200" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num5" value="⑤" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="455" y="568" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="vso-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://www.vectorlogo.zone/logos/hashicorp/hashicorp-icon.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="568" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="vso-lbl" value="VSO Operator
CRD reconcile 60s" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="652" width="140" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="sec-icon" value="" style="shape=image;html=1;labelBackgroundColor=#FFFFFF;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/secret.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="568" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sec-lbl" value="K8s Secret
VaultStaticSecret 7+" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="870" y="652" width="140" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-user-traefik" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontSize=12;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="user-icon" target="traefik-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-user-traefik-lbl" value="HTTPS" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#24292F;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="270" width="60" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-traefik-oauth" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=3;fontSize=11;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="traefik-icon" target="oauth2-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-traefik-oauth-lbl" value="ForwardAuth (인증된 요청만)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="468" y="274" width="184" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-oauth-app" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=3;fontSize=11;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="oauth2-icon" target="app-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-oauth-app-lbl" value="JWT (Authorization: Bearer)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="745" y="274" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-app-pg" style="endArrow=classic;html=1;strokeColor=#10B981;strokeWidth=3;fontSize=11;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="app-icon" target="pg-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-app-pg-lbl" value="JPA" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#047857;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1175" y="270" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-app-minio" style="endArrow=classic;html=1;strokeColor=#10B981;strokeWidth=2;fontSize=11;fontFamily=Pretendard,Helvetica;dashed=1;exitX=0.7;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="app-icon" target="minio-icon">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="1066" y="395" />
|
||||
<mxPoint x="1478" y="395" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e-app-minio-lbl" value="S3 SDK" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#047857;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1370" y="386" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-app-kc" style="endArrow=classic;startArrow=none;html=1;strokeColor=#D97706;strokeWidth=2;fontSize=10;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0.7;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="app-icon" target="kc-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-app-kc-lbl" value="JWKS (issuer-uri)" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="430" width="120" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-op-vault" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontSize=12;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="op-icon" target="vault-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-op-vault-lbl" value="vault kv put" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#24292F;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="598" width="90" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-vault-vso" style="endArrow=classic;html=1;strokeColor=#7C3AED;strokeWidth=3;fontSize=11;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="vault-icon" target="vso-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-vault-vso-lbl" value="KV read" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="510" y="598" width="60" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-vso-sec" style="endArrow=classic;html=1;strokeColor=#7C3AED;strokeWidth=3;fontSize=11;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="vso-icon" target="sec-icon">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-vso-sec-lbl" value="reconcile" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="775" y="598" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-sec-app" style="endArrow=classic;html=1;strokeColor=#7C3AED;strokeWidth=3;fontSize=11;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="sec-icon" target="app-icon">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="940" y="284" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e-sec-app-lbl" value="envFrom (K8s Secret)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="450" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,149 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-28T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="02-auth-flow" id="auth">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="grp-edge" value="Edge: Traefik + oauth2-proxy" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="180" width="700" height="280" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-app" value="Application" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="180" width="280" height="280" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-kc" value="OIDC Issuer" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#D97706;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="540" width="640" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="user" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="270" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="user-lbl" value="브라우저" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="340" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="traefik" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/traefikio/traefikio-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="380" y="270" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="traefik-lbl" value="Traefik" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="350" y="340" width="120" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="262" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="oauth" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/pod.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="270" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="oauth-lbl" value="oauth2-proxy
ForwardAuth" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="580" y="340" width="140" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num2" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="262" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="app" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/springio/springio-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="270" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="app-lbl" value="auth-server
ResourceServer" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1040" y="340" width="140" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num3" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="262" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="kc" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/cncf/artwork/master/projects/keycloak/icon/color/keycloak-icon-color.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="610" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="kc-lbl" value="Keycloak · realm: platform" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="680" width="260" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e0" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="user" target="traefik">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e0-lbl" value="HTTPS" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#24292F;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="290" width="60" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e1" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="traefik" target="oauth">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e1-lbl" value="ForwardAuth" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="290" width="80" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e2" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="oauth" target="app">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e2-lbl" value="JWT (Authorization: Bearer)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="730" y="290" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e3a" style="endArrow=classic;html=1;strokeColor=#D97706;strokeWidth=2;fontFamily=Pretendard,Helvetica;dashed=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.3;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="oauth" target="kc">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e3a-lbl" value="A. 미인증 → 302 redirect → 로그인 → 세션 발급" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="490" width="320" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e3b" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=2;fontFamily=Pretendard,Helvetica;dashed=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.7;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="app" target="kc">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e3b-lbl" value="B. OIDC 메타데이터 + JWKS fetch (issuer-uri)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="490" width="180" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="rs-panel" value="ResourceServer 검증" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="180" width="240" height="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r1" value="issuer-uri" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="220" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r1d" value="환경변수 자동 적용" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="240" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r2" value="JWKS" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="270" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r2d" value="키 자동 fetch · 회전 시 재fetch" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="290" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r3" value="JwtAuthenticationConverter" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="320" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r3d" value="realm role → Spring Authority" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="340" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r4" value="인가 규칙" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="370" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="rs-r4d" value="/api/v1/auth/me → role=user" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="390" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="io-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFBEB;strokeColor=#D97706;strokeWidth=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="744" width="1520" height="56" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="io-in-lbl" value="Input (브라우저가 보내는 것)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=20;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="744" width="320" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="io-in-text" value="GET /api/v1/auth/me · 세션 쿠키 (있을 수도, 없을 수도)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="766" width="700" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="io-arrow" value="→" style="text;html=1;align=center;verticalAlign=middle;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="754" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="io-out-lbl" value="Output (App 안에서 보이는 것)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=20;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="744" width="320" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="io-out-text" value="Authorization: Bearer <JWT> 헤더 + 사용자 정보·권한이 채워진 요청 객체 (Spring SecurityContext)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#24292F;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="766" width="760" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,116 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-28T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="03-app-ca" id="ca">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="m-bootstrap" value="bootstrap (composition root · main · SecurityFilterChain)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;dashed=0;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="120" width="980" height="600" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="m-presentation" value="presentation" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE4E6;strokeColor=#BE123C;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;fontColor=#BE123C;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="180" width="430" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-presentation-rep" value="ApiResult<T>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=monospace;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="216" width="390" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-presentation-sub" value="REST controller · ExceptionHandler · ErrorCode 매핑" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="248" width="390" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="m-infrastructure" value="infrastructure" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#047857;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;fontColor=#047857;" vertex="1" parent="1">
|
||||
<mxGeometry x="570" y="180" width="430" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-infrastructure-rep" value="JpaUserRepositoryAdapter" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=monospace;fontColor=#064E3B;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="216" width="390" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-infrastructure-sub" value="JPA · Flyway 마이그레이션 · 외부 시스템 어댑터" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#064E3B;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="248" width="390" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="m-application" value="application (use cases · ports)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#5B21B6;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="180" y="380" width="780" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-application-rep" value="BusinessException · AuthErrorCode" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=monospace;fontColor=#3B0764;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="416" width="740" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-application-sub" value="Use Case 오케스트레이션 · 트랜잭션 경계 · audit 이벤트 발행" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="448" width="740" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="m-domain" value="domain (Spring/Hibernate/JPA/servlet 의존 0)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=top;spacingLeft=12;spacingTop=8;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="580" width="580" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-domain-rep" value="User · DomainException" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=monospace;fontColor=#78350F;" vertex="1" parent="1">
|
||||
<mxGeometry x="300" y="616" width="540" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="m-domain-sub" value="순수 비즈니스 모델 · 도메인 규칙 · 외부 의존성 0" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#78350F;" vertex="1" parent="1">
|
||||
<mxGeometry x="300" y="648" width="540" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="dep1" style="endArrow=classic;html=1;strokeColor=#DC2626;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.3;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="m-presentation" target="m-application">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dep2" style="endArrow=classic;html=1;strokeColor=#DC2626;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.7;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="m-infrastructure" target="m-application">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dep3" style="endArrow=classic;html=1;strokeColor=#DC2626;strokeWidth=5;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="m-application" target="m-domain">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dep-lbl" value="의존은 항상 안쪽으로" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#DC2626;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="528" width="160" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="archunit-title" value="ArchUnit 핵심 4 규칙" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1F6FEB;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="120" width="480" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="archunit-sub" value="LayerDependencyArchitectureTest · 자동 검증" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="148" width="480" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ar-h0" value="대상" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="180" width="160" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar-h1" value="금지하는 것" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="180" width="320" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ar-r1c0" value="domain" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#78350F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="216" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar-r1c1" value="Spring · Hibernate · JPA · servlet" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=monospace;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="216" width="320" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ar-r2c0" value="application" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="276" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar-r2c1" value="presentation · infrastructure · Spring web" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=monospace;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="276" width="320" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ar-r3c0" value="presentation" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFE4E6;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="336" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar-r3c1" value="domain · infrastructure" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=monospace;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="336" width="320" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ar-r4c0" value="presentation" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFE4E6;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="396" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ar-r4c1" value="SecurityContext · Authentication 직접 접근" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=monospace;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="396" width="320" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="archunit-note" value="나머지 4 규칙: ApiResult SLF4J 금지 · infrastructure @Transactional 금지 등" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#57606A;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="468" width="480" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="legend" value="bootstrap 박스가 다른 4 모듈을 감싸는 외곽 — composition root 만이 모든 모듈을 알아도 됨" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1F6FEB;strokeWidth=1;dashed=1;fontSize=12;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="540" width="480" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,105 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-28T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="04-data" id="data">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="grp-app" value="Application" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="160" width="320" height="540" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-data" value="Data: Postgres + MinIO" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#10B981;strokeWidth=1;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#047857;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="160" width="660" height="540" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="app" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/springio/springio-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="240" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="app-lbl" value="auth-server" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="330" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="app-sub" value="JpaUserRepositoryAdapter" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="354" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="reg" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/deploy.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="490" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="reg-lbl" value="docker-registry" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="580" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="reg-sub" value="registry:2.8.3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="604" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="reg-novol" value="자기 PV 0 · MinIO 위임" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="140" y="630" width="200" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="pg" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/postgresql/postgresql-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="240" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#047857;fontColor=#047857;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1000" y="240" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pg-lbl" value="Postgres" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="328" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pg-sub" value="schema: auth
5 마이그레이션 (V1~V5)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="350" width="160" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="minio" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/minio/minio/master/.github/logo.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1280" y="490" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num2" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#047857;fontColor=#047857;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="490" width="26" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="minio-lbl" value="MinIO Tenant (MinIO Operator)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="578" width="240" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="minio-sub" value="buckets: auth · docker-registry" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="600" width="240" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-app-pg" style="endArrow=classic;html=1;strokeColor=#10B981;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="app" target="pg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-app-pg-lbl" value="JPA · SQL" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#047857;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="270" width="100" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-reg-minio" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=5;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="reg" target="minio">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-reg-minio-lbl" value="S3 backend (REGISTRY_STORAGE=s3)" style="text;html=1;align=center;verticalAlign=middle;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="518" width="280" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="note" value="이미지 push / containerd image pull 은 별도 슬라이드 (S08-B)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="700" width="320" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="io-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFBEB;strokeColor=#D97706;strokeWidth=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="744" width="1520" height="56" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="io-in-lbl" value="Input (앱 / 운영자가 호출하는 것)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=20;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="744" width="320" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="io-in-text" value="userRepository.save(user) · docker push registry.project.com/auth-server:0.1.0" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="766" width="700" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="io-arrow" value="→" style="text;html=1;align=center;verticalAlign=middle;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="754" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="io-out-lbl" value="Output (영속화된 결과)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=20;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="744" width="320" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="io-out-text" value="Postgres row (auth.users 테이블) · MinIO object (bucket=docker-registry, key=blobs/sha256:...)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="766" width="760" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,222 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-28T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="05-flyway" id="flyway">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="grp-before" value="Before" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="120" width="720" height="440" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-after" value="After" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="120" width="720" height="440" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-sql" value="SQL
(V1~V5)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="200" width="100" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-jar" value="migration-jar
(라이브러리)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="200" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-docker" value="Docker 이미지
(자체 빌드)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="200" width="130" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-reg" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/deploy.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="590" y="196" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-reg-lbl" value="docker-registry" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="565" y="260" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-job" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/job.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="370" y="380" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-job-lbl" value="K8s Job
flyway migrate" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="340" y="444" width="120" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-pg" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/postgresql/postgresql-icon.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="380" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pg-lbl" value="Postgres" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="580" y="444" width="100" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-e1" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-sql" target="b-jar">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-e1-lbl" value="포함" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="220" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-e2" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-jar" target="b-docker">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-e2-lbl" value="빌드" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="360" y="220" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-e3" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-docker" target="b-reg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-e3-lbl" value="push" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="220" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-e4" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.2;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-reg" target="b-job">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-e4-lbl" value="Job 이 image pull" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="320" width="120" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-e5" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-job" target="b-pg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-e5-lbl" value="migrate" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="475" y="400" width="60" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-cycle" value="⚠ SQL 1줄 변경 → 라이브러리 빌드 → 이미지 빌드 → push → 태그 갱신" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="500" width="640" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-git" value="Git
(SQL 파일)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="860" y="200" width="100" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-cm" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/cm.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="200" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-cm-lbl" value="ConfigMap
migration-flyway-sql" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="264" width="140" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-job" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/job.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="1230" y="200" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-job-lbl" value="K8s Job
flyway migrate" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="264" width="120" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-pg" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/postgresql/postgresql-icon.svg;imageAspect=1;verticalLabelPosition=bottom;verticalAlign=top;" vertex="1" parent="1">
|
||||
<mxGeometry x="1430" y="200" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-pg-lbl" value="Postgres" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1410" y="264" width="100" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-img" value="flyway:10.20.1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="380" width="160" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-img-lbl" value="공식 이미지 (자체 빌드 X)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontStyle=2;fontColor=#15803D;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="430" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-e1" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="a-git" target="a-cm">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-e1-lbl" value="apply -k" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="965" y="220" width="70" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-e2" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="a-cm" target="a-job">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-e2-lbl" value="mount /flyway/sql" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1095" y="220" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-e3" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="a-job" target="a-pg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-e3-lbl" value="migrate" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1335" y="220" width="60" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-e4" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="a-img" target="a-job">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-e4-lbl" value="image:" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1230" y="318" width="60" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-cycle" value="✓ SQL 1줄 변경 → kubectl apply -k 끝" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBF7D0;strokeColor=#15803D;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="860" y="500" width="640" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-title" value="비교" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="585" width="200" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-h0" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="615" width="380" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-h1" value="Before" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="615" width="380" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-h2" value="After" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="615" width="380" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-h3" value="결과" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="615" width="340" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r1c0" value="이미지 빌드 사이클" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="651" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r1c1" value="매번 발생 (자체 Dockerfile)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="651" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r1c2" value="0회 (공식 이미지)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="651" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r1c3" value="배포 시간 ↓" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="651" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r2c0" value="registry 인프라 의존" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="683" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r2c1" value="필수 (push/pull 안 되면 마이그레이션 X)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="683" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r2c2" value="없음" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="683" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r2c3" value="장애 영향 면 ↓" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="683" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r3c0" value="변경 추적" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="715" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r3c1" value="SQL 파일 + 이미지 태그 두 군데" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="715" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r3c2" value="Git diff 한 곳" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="715" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r3c3" value="PR 리뷰 정확도 ↑" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="715" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r4c0" value="용량 한계" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="747" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r4c1" value="없음 (이미지)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="747" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r4c2" value="ConfigMap 1MiB (현재 ~2KB)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="747" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r4c3" value="임계 도달 시 전환" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="747" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,244 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-28T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="06-vault" id="vault">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="grp-before" value="Before — Vault Injector (사이드카)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="120" width="720" height="440" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-after" value="After — VSO Operator" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#5B21B6;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="120" width="720" height="440" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-vault" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/vaultproject/vaultproject-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="290" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-vault-lbl" value="Vault" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="360" width="100" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-edge-lbl" value="login + KV read" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="184" width="100" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-pod1" value="Pod 1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=top;spacingLeft=8;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="380" y="190" width="240" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pod1-side" value="vault-agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="215" width="100" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pod1-app" value="app" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="525" y="215" width="80" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-pod2" value="Pod 2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=top;spacingLeft=8;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="380" y="285" width="240" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pod2-side" value="vault-agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="310" width="100" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pod2-app" value="app" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="525" y="310" width="80" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-pod3" value="Pod 3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=top;spacingLeft=8;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="380" y="380" width="240" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pod3-side" value="vault-agent" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="405" width="100" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pod3-app" value="app" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="525" y="405" width="80" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-xn" value="× N" style="text;html=1;align=center;verticalAlign=middle;fontSize=18;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;strokeColor=#B91C1C;rounded=1;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="650" y="290" width="80" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-xn-lbl" value="Pod 마다" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;" vertex="1" parent="1">
|
||||
<mxGeometry x="650" y="354" width="80" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-e1" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="b-vault" target="b-pod1-side">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="340" y="320" />
|
||||
<mxPoint x="340" y="233" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="b-e2" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-vault" target="b-pod2-side">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="340" y="320" />
|
||||
<mxPoint x="340" y="328" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="b-e3" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;curved=1;" edge="1" parent="1" source="b-vault" target="b-pod3-side">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="340" y="320" />
|
||||
<mxPoint x="340" y="423" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-e4" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-pod1-side" target="b-pod1-app">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-e5" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-pod2-side" target="b-pod2-app">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-e6" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-pod3-side" target="b-pod3-app">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-render-lbl" value="render → /vault/secrets/*" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="470" width="200" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-render-arrow" style="endArrow=none;html=1;strokeColor=#B91C1C;strokeWidth=1;dashed=1;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="200" y="479" />
|
||||
<mxPoint x="490" y="370" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-warn" value="⚠ 사이드카 × N — 메모리 ≥ 50Mi/Pod, lifecycle/probe/log 따로 관리" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="500" width="640" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-vault" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/vaultproject/vaultproject-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="860" y="290" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-vault-lbl" value="Vault" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="360" width="100" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-vso" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/hashicorp/hashicorp-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="290" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-vso-lbl" value="VSO Operator" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="360" width="120" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-secret" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/secret.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1160" y="290" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-secret-lbl" value="K8s Secret" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1130" y="360" width="120" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-pod" value="Pod (auth-server)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=top;spacingLeft=8;spacingTop=4;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1330" y="200" width="190" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-pod-app" value="app (사이드카 0)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1345" y="230" width="160" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-pod-env" value="envFrom:
 - secretRef:
 name: keycloak-db" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1E1E1E;strokeColor=#5B21B6;strokeWidth=1;fontSize=10;fontFamily=monospace;align=left;verticalAlign=middle;fontColor=#A5F3FC;spacingLeft=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1345" y="290" width="160" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-pod-note" value="K8s Secret 1개" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1345" y="380" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-e1" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="a-vault" target="a-vso">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-e1-lbl" value="KV read" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="935" y="310" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-e2" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="a-vso" target="a-secret">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-e2-lbl" value="reconcile 60s" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="312" width="80" height="16" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-e3" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="a-secret" target="a-pod-env">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="a-e3-lbl" value="envFrom" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1245" y="310" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-good" value="✓ 사이드카 0 · Controller drift 자동 복구 · Pod 는 Vault 를 모름" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDD6FE;strokeColor=#5B21B6;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="860" y="500" width="640" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-title" value="비교" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="585" width="200" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-h0" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="615" width="380" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-h1" value="Before (Injector)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="615" width="380" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-h2" value="After (VSO)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="615" width="380" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-h3" value="결과" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="615" width="340" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r1c0" value="Pod 당 비용" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="651" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r1c1" value="사이드카 1개 (메모리 ≥ 50Mi)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="651" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r1c2" value="0 (envFrom 만)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="651" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r1c3" value="리소스 ↓" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="651" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r2c0" value="K8s 네이티브" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="683" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r2c1" value="Pod 어노테이션 기반" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="683" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r2c2" value="CRD (VaultStaticSecret 등)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="683" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r2c3" value="GitOps drift 검증 가능" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="683" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r3c0" value="값 회전" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="715" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r3c1" value="Vault 변경 → Pod 재시작 필요" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="715" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r3c2" value="Vault 변경 → 60s 내 Secret 자동 갱신" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="715" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r3c3" value="운영 자동화" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="715" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cmp-r4c0" value="시크릿 노출 면" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=left;verticalAlign=middle;spacingLeft=12;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="747" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r4c1" value="Pod 메모리 (사이드카가 보유)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="747" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r4c2" value="etcd 에 K8s Secret (base64)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="747" width="380" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cmp-r4c3" value="etcd encryption 필수 (다음 슬라이드)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="747" width="340" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,114 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram name="07-traefik" id="traefik">
|
||||
<mxGraphModel dx="965" dy="915" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="grp-ext" value="외부" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#57606A;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="120" width="160" height="440" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="grp-ks" value="kube-system" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="220" y="120" width="1080" height="440" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="grp-mnt" value="mnt" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="1320" y="120" width="240" height="440" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="user" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" parent="1" vertex="1">
|
||||
<mxGeometry x="90" y="290" width="60" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="user-lbl" value="브라우저 · docker push" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="354" width="160" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="traefik" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/traefikio/traefikio-icon.svg;imageAspect=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="240" y="290" width="60" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="traefik-lbl" value="Traefik router" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="200" y="354" width="140" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="m1" value="보안 헤더 4종
(XSS · Frame · NoSniff · Referrer)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#FB923C;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" parent="1" vertex="1">
|
||||
<mxGeometry x="430" y="290" width="240" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="m1-lbl" value="security-headers" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#57606A;" parent="1" vertex="1">
|
||||
<mxGeometry x="430" y="354" width="240" height="18" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="538" y="270" width="24" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="m1-note" value="keycloak 전용 변형: frameDeny 제외 (admin 콘솔 iframe 허용)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9A6700;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="376" width="340" height="16" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="branch-pt" value="" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FB923C;strokeColor=#C2410C;strokeWidth=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="844" y="312" width="16" height="16" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="branch-lbl" value="ingress 별 분기" style="text;html=1;align=left;verticalAlign=middle;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" parent="1" vertex="1">
|
||||
<mxGeometry x="866" y="338" width="100" height="18" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="m4" value="BasicAuth
(registry 전용)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#7C3AED;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" parent="1" vertex="1">
|
||||
<mxGeometry x="940" y="430" width="180" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="m4-lbl" value="basic-auth" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#57606A;" parent="1" vertex="1">
|
||||
<mxGeometry x="940" y="494" width="180" height="18" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="m4-tag" value="R" style="ellipse;whiteSpace=wrap;html=1;fillColor=#7C3AED;strokeColor=#5B21B6;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1018" y="410" width="24" height="24" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="auth-svr" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/springio/springio-icon.svg;imageAspect=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1380" y="290" width="60" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="auth-svr-lbl" value="auth-server" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1340" y="354" width="140" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg-svr" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/deploy.svg;imageAspect=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1380" y="430" width="60" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg-svr-lbl" value="docker-registry" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1340" y="494" width="140" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e0" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="user" target="traefik" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e0-lbl" value="HTTP" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#24292F;fillColor=#FFFFFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="306" width="60" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e1" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="traefik" target="m1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e3" style="endArrow=none;html=1;strokeColor=#FB923C;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="m1" target="branch-pt" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e-main-lbl" value="auth-server / oauth2-proxy ingress" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="1060" y="298" width="220" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e-branch" style="endArrow=classic;html=1;strokeColor=#7C3AED;strokeWidth=3;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="branch-pt" target="m4" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="852" y="460"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="e-branch-lbl" value="docker-registry ingress" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="690" y="450" width="160" height="20" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e-m4-reg" style="endArrow=classic;html=1;strokeColor=#7C3AED;strokeWidth=3;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="m4" target="reg-svr" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="legend" value="① 메인 흐름 (모든 ingress) R registry ingress 전용 분기" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" parent="1" vertex="1">
|
||||
<mxGeometry x="180" y="572" width="1120" height="22" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="yaml-bg" value="annotation 으로 미들웨어 체인 선언 (docker-registry ingress 예시)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1E1E1E;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#A5F3FC;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="610" width="1520" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="yaml-text" value="metadata:
 annotations:
 traefik.ingress.kubernetes.io/router.middlewares: kube-system-security-headers@kubernetescrd, mnt-docker-registry-basic-auth@kubernetescrd
 traefik.ingress.kubernetes.io/router.entrypoints: web" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#A5F3FC;spacingLeft=20;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="640" width="1520" height="70" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="e-main" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="branch-pt" target="auth-svr" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="1340" y="320"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,150 @@
|
||||
<mxfile host="app.diagrams.net">
|
||||
<diagram name="1. 정상 pull" id="pull-1">
|
||||
<mxGraphModel dx="1422" dy="800" grid="0" page="1" pageWidth="1280" pageHeight="720">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="Pull 경로 — 정상 모양" style="text;align=center;fontSize=36;fontStyle=1;fontColor=#1f1f1f" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="80" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="kb" value="kubelet" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="330" width="160" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="cd" value="containerd" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="330" width="160" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="tr" value="Traefik" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="330" width="160" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg" value="Registry" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="750" y="330" width="160" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="minio" value="MinIO" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="330" width="160" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="kb" target="cd"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="cd" target="tr"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a3" style="endArrow=classic;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="tr" target="reg"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a4" style="endArrow=classic;startArrow=classic;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="reg" target="minio"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="sub" value="다음 슬라이드 — 이 흐름의 3가지 함정" style="text;align=center;fontSize=22;fontColor=#666666" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="500" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
<diagram name="2. 함정1 — hosts.toml" id="pull-2">
|
||||
<mxGraphModel dx="1422" dy="800" grid="0" page="1" pageWidth="1280" pageHeight="720">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="함정 1 — K3s 가 만든 hosts.toml 이 HTTPS 강제" style="text;align=center;fontSize=28;fontStyle=1;fontColor=#cc0000" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="60" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="src" value="registries.yaml endpoint: http://..." style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="240" width="280" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="k3s" value="K3s 자동 변환" style="rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=18;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="270" width="240" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="out" value="hosts.toml (자동 생성)" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontStyle=1;align=center;verticalAlign=top;spacingTop=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="220" width="320" height="160" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="code" value="server = "https://registry/v2" [host."http://registry/v2"]" style="rounded=0;fillColor=#1f1f1f;strokeColor=#000000;fontSize=14;fontColor=#ffffff;fontFamily=Courier New;align=left;verticalAlign=middle;spacingLeft=10;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="860" y="280" width="280" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=3;strokeColor=#666666" edge="1" parent="1" source="src" target="k3s"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=3;strokeColor=#666666" edge="1" parent="1" source="k3s" target="out"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="msg" value="HTTP 로 적어도 server 가 HTTPS 로 박힌다 → containerd 가 fallback 못 함" style="text;align=center;fontSize=20;fontColor=#cc0000;fontStyle=1" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="510" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="fix" value="해결: registries.yaml 제거 → 자동 생성 안 함 → hosts.toml 직접 작성" style="text;align=center;fontSize=20;fontColor=#006600;fontStyle=1" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="570" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
<diagram name="3. 함정2 — BasicAuth" id="pull-3">
|
||||
<mxGraphModel dx="1422" dy="800" grid="0" page="1" pageWidth="1280" pageHeight="720">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="함정 2 — 자격증명 두 경로 중 하나만 막혀도 401" style="text;align=center;fontSize=28;fontStyle=1;fontColor=#cc0000" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="60" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="cd" value="containerd" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="540" width="200" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="pa" value="(a) imagePullSecrets → kubelet → CRI" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="180" y="240" width="340" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="pb" value="(b) hosts.toml 의 [host.*.auth] 노드 단에서 자동" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="240" width="340" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="pa" target="cd"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="pb" target="cd"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="msg" value="(a) 만 쓰면 ServiceAccount/Pod patch 누락 시 fail (b) 가 더 안정 — 노드 OS 가 직접 기억" style="text;align=center;fontSize=20;fontStyle=1;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="430" width="1160" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
<diagram name="4. 함정3 — 노드별" id="pull-4">
|
||||
<mxGraphModel dx="1422" dy="800" grid="0" page="1" pageWidth="1280" pageHeight="720">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="함정 3 — hosts.toml 은 node 별, scheduling 은 예측 불가" style="text;align=center;fontSize=28;fontStyle=1;fontColor=#cc0000" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="60" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="pod" value="Pod" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="560" y="200" width="160" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="nx" value="node X hosts.toml ✓" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="400" width="240" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="ny" value="node Y hosts.toml ✗" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="400" width="240" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="nz" value="node Z hosts.toml ✗" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="880" y="400" width="240" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=2;strokeColor=#666666;dashed=1" edge="1" parent="1" source="pod" target="nx"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=2;strokeColor=#cc0000" edge="1" parent="1" source="pod" target="ny"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a3" style="endArrow=classic;strokeWidth=2;strokeColor=#666666;dashed=1" edge="1" parent="1" source="pod" target="nz"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="msg" value="3대 중 1대만 설정 → 67% 확률로 ImagePullBackOff" style="text;align=center;fontSize=20;fontColor=#cc0000;fontStyle=1" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="560" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
|
||||
<diagram name="5. 해결" id="pull-5">
|
||||
<mxGraphModel dx="1422" dy="800" grid="0" page="1" pageWidth="1280" pageHeight="720">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="해결 — registries.yaml 제거 + hosts.toml 직접" style="text;align=center;fontSize=32;fontStyle=1;fontColor=#006600" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="80" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="del" value="registries.yaml" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=22;fontStyle=1;align=center;verticalAlign=middle;strokeWidth=2" vertex="1" parent="1">
|
||||
<mxGeometry x="180" y="240" width="320" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="delx" value="✖ 제거" style="text;align=center;fontSize=32;fontStyle=1;fontColor=#cc0000" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="260" width="240" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="keep" value="hosts.toml (직접 작성)" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=22;fontStyle=1;align=center;verticalAlign=top;spacingTop=12;strokeWidth=2;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="220" width="400" height="280" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="code" value="server = "http://registry.project.com" [host."http://registry.project.com"] capabilities = ["pull","resolve","push"] [host."...".auth] username = "testuser" password = "..."" style="rounded=0;fillColor=#1f1f1f;strokeColor=#000000;fontSize=14;fontColor=#ffffff;fontFamily=Courier New;align=left;verticalAlign=top;spacingLeft=12;spacingTop=10;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="720" y="280" width="360" height="200" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="msg" value="자동 변환 끄고, 노드 3대에 동일하게 직접" style="text;align=center;fontSize=22;fontColor=#006600;fontStyle=1" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="560" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,89 @@
|
||||
<mxfile host="app.diagrams.net">
|
||||
<diagram name="Registry Pull" id="pull-flow">
|
||||
<mxGraphModel dx="1422" dy="800" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="Registry Pull 흐름 — K3s 노드 containerd 에서 image 를 받기까지" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#1f1f1f" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="20" width="1400" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="flow-bg" value="" style="rounded=0;fillColor=#f5f9ff;strokeColor=#005599;strokeWidth=2;dashed=1;opacity=70" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="80" width="900" height="880" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="flow-header" value="정상 Pull 경로 (Pod 가 새 이미지 필요 → 노드 캐시까지)" style="text;align=center;fontSize=18;fontStyle=1;fontColor=#005599;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="95" width="860" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p1" value="① K8s API server Pod 생성/재시작 → scheduler 가 node X 에 배정 (spec.image = registry.project.com/.../auth-server:tag)" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="150" width="500" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p2" value="② kubelet (node X) CRI 호출: containerd 에게 "이 이미지 pull 해줘" imagePullSecrets 의 dockerconfigjson 도 같이 전달" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="260" width="500" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p3" value="③ containerd 의 image resolver /var/lib/rancher/k3s/agent/etc/containerd/certs.d/ <hostname>/hosts.toml 을 보고 endpoint 결정" style="rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="370" width="500" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p4" value="④ HTTP GET /v2/<name>/manifests/<tag> Authorization: Basic ... (hosts.toml 의 auth 또는 imagePullSecret)" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="480" width="500" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p5" value="⑤ Traefik Ingress BasicAuth middleware 통과 → Registry Pod 로 routing" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="590" width="500" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p6" value="⑥ Registry Pod REGISTRY_STORAGE_REDIRECT_DISABLE=true Registry 가 MinIO 와 직접 통신 → blob 데이터 응답에 그대로 흘림" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="690" width="500" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p7" value="⑦ node X 의 containerd image store 에 캐시 → 컨테이너 시작" style="rounded=1;fillColor=#d5e8d4;strokeColor=#006600;strokeWidth=3;fontSize=13;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="820" width="500" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="p-arrow-1" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="p1" target="p2"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="p-arrow-2" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="p2" target="p3"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="p-arrow-3" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="p3" target="p4"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="p-arrow-4" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="p4" target="p5"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="p-arrow-5" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="p5" target="p6"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="p-arrow-6" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#006600" edge="1" parent="1" source="p6" target="p7"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="trap-bg" value="" style="rounded=0;fillColor=#fff5f5;strokeColor=#cc0000;strokeWidth=2;dashed=1;opacity=70" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="80" width="600" height="880" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trap-header" value="이 경로의 함정 3가지" style="text;align=center;fontSize=18;fontStyle=1;fontColor=#cc0000;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="990" y="95" width="560" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="trap1" value="⚠ 함정 1 — K3s 자동 hosts.toml 생성 (③ 단계) registries.yaml 이 존재하면 K3s 가 hosts.toml 을 매번 재생성 (사용자 작성을 덮어씀)" style="rounded=1;fillColor=#fbe5d6;strokeColor=#d79b00;fontSize=12;fontStyle=1;verticalAlign=middle;align=left;spacingLeft=10;spacingTop=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="990" y="150" width="560" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trap1-code" value="server = "https://registry.project.com/v2" ← HTTPS 강제 [host."http://registry.project.com/v2"] ← /v2 path 박힘" style="rounded=0;fillColor=#1f1f1f;strokeColor=#000000;fontSize=11;fontColor=#ffffff;fontStyle=0;fontFamily=Courier New;verticalAlign=middle;align=left;spacingLeft=10;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="250" width="520" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="trap1-effect" value="origin (server) 이 HTTP registry 와 mismatch → containerd 가 호출 자체 안 함 → "not found" 해결: registries.yaml 제거 + hosts.toml 직접 작성 (server = http://... 명시)" style="rounded=1;fillColor=#fbe5d6;strokeColor=#d79b00;fontSize=12;verticalAlign=middle;align=left;spacingLeft=10;spacingTop=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="990" y="310" width="560" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="trap2" value="⚠ 함정 2 — BasicAuth 자격증명 전달 경로 (④ 단계) registry 자체엔 auth 없음. Traefik middleware 가 강제. containerd 에 자격증명 도달 경로 두 가지: (a) imagePullSecrets → kubelet → containerd CRI (b) hosts.toml 의 [host.*.auth] (노드 단에서 자동) 둘 중 하나라도 안 박히면 401 → "not found" 표시 실전: (b) 가 더 안정적 — imagePullSecrets 누락 면역" style="rounded=1;fillColor=#fbe5d6;strokeColor=#d79b00;fontSize=12;verticalAlign=middle;align=left;spacingLeft=10;spacingTop=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="990" y="430" width="560" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="trap3" value="⚠ 함정 3 — hosts.toml 은 노드별 (③ 단계) Pod 가 어느 node 에 scheduling 될지 모름 node X 에만 설정하고 node Y 는 default 라면 Pod 가 node Y 에 떠서 fail K3s 의 server node 도 default schedulable 이므로 control-plane 까지 모든 노드에 동일하게 적용 필요 dev: 노드 3대 모두 hosts.toml 일치 운영: Ansible / cloud-init 으로 source-of-truth 관리" style="rounded=1;fillColor=#fbe5d6;strokeColor=#d79b00;fontSize=12;verticalAlign=middle;align=left;spacingLeft=10;spacingTop=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="990" y="670" width="560" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="trap1-link" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#d79b00;dashed=1;exitX=0;exitY=0.5;entryX=1;entryY=0.5" edge="1" parent="1" source="trap1" target="p3"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="trap2-link" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#d79b00;dashed=1;exitX=0;exitY=0.5;entryX=1;entryY=0.5" edge="1" parent="1" source="trap2" target="p4"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="trap3-link" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#d79b00;dashed=1;exitX=0;exitY=0.5;entryX=1;entryY=0.5" edge="1" parent="1" source="trap3" target="p3"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="legend" value="🟦 정상 컴포넌트 🟨 주의 지점 (설정 의존) 🟩 해결 / 결과 🟧 함정 — 점선이 가리키는 단계에서 발생" style="rounded=1;fillColor=#fafafa;strokeColor=#999999;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="970" width="1280" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,218 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram name="1. 문제" id="push-1">
|
||||
<mxGraphModel dx="454" dy="915" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1280" pageHeight="720" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="docker push 가 끝나지 않는다" style="text;align=center;fontSize=40;fontStyle=1;fontColor=#1f1f1f" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="100" width="1000" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="dev" value="🖥
Developer PC" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=22;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="340" width="240" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg" value="📦
Registry" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=22;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="520" y="340" width="240" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="minio" value="🗄
MinIO" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=22;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="880" y="340" width="240" height="120" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="x1" value="✖" style="text;align=center;fontSize=64;fontColor=#cc0000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="420" y="360" width="80" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="x2" value="✖" style="text;align=center;fontSize=64;fontColor=#cc0000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="780" y="360" width="80" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="sub" value="원인 두 개가 겹쳤다 — 다음 슬라이드부터 하나씩" style="text;align=center;fontSize=22;fontColor=#666666" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="560" width="1000" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="2. 원인1 — port-forward" id="push-2">
|
||||
<mxGraphModel dx="666" dy="915" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1280" pageHeight="720" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="원인 1 — port-forward 의 단일 SPDY 가 multi-stream 못 버틴다" style="text;align=center;fontSize=28;fontStyle=1;fontColor=#1f1f1f" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="60" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="dev" value="🖥 docker push" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="200" width="240" height="320" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="lA" value="layer A" style="rounded=1;fillColor=#ffffff;strokeColor=#6c8ebf;fontSize=16;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="280" width="200" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="lB" value="layer B" style="rounded=1;fillColor=#ffffff;strokeColor=#6c8ebf;fontSize=16;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="350" width="200" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="lC" value="layer C" style="rounded=1;fillColor=#ffffff;strokeColor=#6c8ebf;fontSize=16;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="420" width="200" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="pf" value="kubectl port-forward

단일 SPDY tunnel" style="rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="540" y="290" width="280" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg" value="📦 Registry" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="960" y="310" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=3;strokeColor=#cc0000" parent="1" source="lA" target="pf" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=3;strokeColor=#cc0000" parent="1" source="lB" target="pf" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a3" style="endArrow=classic;strokeWidth=3;strokeColor=#cc0000" parent="1" source="lC" target="pf" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a4" style="endArrow=classic;strokeWidth=2;strokeColor=#cc0000;dashed=1" parent="1" source="pf" target="reg" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="msg" value="병렬 3개 → 단일 tunnel → connection reset / timeout" style="text;align=center;fontSize=22;fontColor=#cc0000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="580" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="3. 원인2 — S3 redirect" id="push-3">
|
||||
<mxGraphModel dx="666" dy="915" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1280" pageHeight="720" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="원인 2 — Registry 가 client 를 cluster 내부 URL 로 redirect 한다" style="text;align=center;fontSize=28;fontStyle=1;fontColor=#1f1f1f" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="60" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="dev" value="🖥 Developer PC" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="260" width="240" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg" value="📦 Registry" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="520" y="260" width="240" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="loc" value="302 Redirect
Location: https://minio.mnt.svc.cluster.local/...
?X-Amz-Signature=..." style="rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=16;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="900" y="240" width="280" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=3;strokeColor=#666666" parent="1" source="dev" target="reg" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=3;strokeColor=#666666" parent="1" source="reg" target="loc" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="back" value="Dev PC 가 그 URL 받음" style="text;align=center;fontSize=18;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="800" y="430" width="400" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a3" style="endArrow=classic;strokeWidth=3;strokeColor=#cc0000;dashed=1" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1040" y="380" as="sourcePoint"/>
|
||||
<mxPoint x="260" y="460" as="targetPoint"/>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fail" value="❌ minio.mnt.svc.cluster.local
외부에서 해석 불가" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="480" width="320" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="msg" value="cluster 내부 DNS 라서 client 가 못 따라간다" style="text;align=center;fontSize=22;fontColor=#cc0000;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="610" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="4. 우회1 — OCI tar" id="push-4">
|
||||
<mxGraphModel dx="965" dy="915" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1280" pageHeight="720" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="우회 1 — docker daemon 안 거치고 OCI tar 로 빌드" style="text;align=center;fontSize=28;fontStyle=1;fontColor=#1f1f1f" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="60" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="bx" value="docker buildx --output type=oci" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="240" width="320" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="tar" value="📄 /tmp/img.tar

manifest + blobs" style="rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=20;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="520" y="240" width="240" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="curl" value="curl PUT

1 blob = 1 stream" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=20;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="840" y="240" width="320" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=3;strokeColor=#666666" parent="1" source="bx" target="tar" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=3;strokeColor=#666666" parent="1" source="tar" target="curl" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="seq" value="blob1 → blob2 → blob3 → manifest
(순차)" style="text;align=center;fontSize=22;fontColor=#006600;fontStyle=1;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="500" y="420" width="600" height="80" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="msg" value="multi-stream 자체를 안 쓴다 → port-forward 도 안정" style="text;align=center;fontSize=22;fontColor=#006600;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="580" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="5. 우회2 — redirect off" id="push-5">
|
||||
<mxGraphModel dx="965" dy="915" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1280" pageHeight="720" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="우회 2 — REGISTRY_STORAGE_REDIRECT_DISABLE = true" style="text;align=center;fontSize=28;fontStyle=1;fontColor=#1f1f1f" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="60" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="dev" value="🖥 Client" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="140" y="300" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg" value="📦 Registry

redirect OFF" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=20;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="540" y="280" width="280" height="140" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="minio" value="🗄 MinIO" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=20;fontStyle=1;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="1000" y="300" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;startArrow=classic;strokeWidth=3;strokeColor=#82b366" parent="1" source="dev" target="reg" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;startArrow=classic;strokeWidth=3;strokeColor=#82b366" parent="1" source="reg" target="minio" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="lbl1" value="blob 데이터 그대로" style="text;align=center;fontSize=16;fontColor=#006600" parent="1" vertex="1">
|
||||
<mxGeometry x="340" y="240" width="200" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="lbl2" value="Registry 내부 통신" style="text;align=center;fontSize=16;fontColor=#006600" parent="1" vertex="1">
|
||||
<mxGeometry x="820" y="240" width="180" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="msg" value="Client 는 Registry 한 곳만 보면 된다 — MinIO URL 모름" style="text;align=center;fontSize=22;fontColor=#006600;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="540" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="6. 최종 경로" id="push-6">
|
||||
<mxGraphModel dx="965" dy="915" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1280" pageHeight="720" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="t" value="최종 push 경로" style="text;align=center;fontSize=36;fontStyle=1;fontColor=#006600" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="80" width="1160" height="50" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="dev" value="🖥 Dev PC
buildx + curl" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="80" y="320" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="tr" value="🌐 Traefik
Ingress" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="370" y="320" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="reg" value="📦 Registry
redirect OFF" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=18;fontStyle=1;align=center;verticalAlign=middle;whiteSpace=wrap;html=1" parent="1" vertex="1">
|
||||
<mxGeometry x="660" y="320" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="minio" value="🗄 MinIO" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=18;fontStyle=1;align=center;verticalAlign=middle" parent="1" vertex="1">
|
||||
<mxGeometry x="950" y="320" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a1" style="endArrow=classic;strokeWidth=3;strokeColor=#82b366" parent="1" source="dev" target="tr" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a2" style="endArrow=classic;strokeWidth=3;strokeColor=#82b366" parent="1" source="tr" target="reg" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="a3" style="endArrow=classic;startArrow=classic;strokeWidth=3;strokeColor=#82b366" parent="1" source="reg" target="minio" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="msg" value="✓ single-stream ✓ redirect off ✓ Ingress 경유" style="text;align=center;fontSize=22;fontColor=#006600;fontStyle=1" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="540" width="1160" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,113 @@
|
||||
<mxfile host="app.diagrams.net">
|
||||
<diagram name="Registry Push" id="push-flow">
|
||||
<mxGraphModel dx="1422" dy="800" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="Registry Push 흐름 — 왜 docker push 가 깨졌고, 왜 OCI tar + HTTP API 가 통했나" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#1f1f1f" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="20" width="1400" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="left-bg" value="" style="rounded=0;fillColor=#fff5f5;strokeColor=#cc0000;strokeWidth=2;dashed=1;opacity=70" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="80" width="740" height="880" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="left-header" value="❌ 시나리오 A — docker push via kubectl port-forward" style="text;align=center;fontSize=18;fontStyle=1;fontColor=#cc0000;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="95" width="700" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a1" value="① Developer PC docker push localhost:5000/auth-platform/auth-server:..." style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="160" width="380" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a2" value="② kubectl port-forward svc/docker-registry 5000:5000 사용자 PC ↔ K8s API server ↔ Pod 의 SPDY tunnel" style="rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="270" width="380" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a2-warn" value="⚠ 함정 1 docker push 는 layer 별로 여러 stream 동시 업로드 port-forward 의 SPDY 는 긴 다중 stream 안정 보장 X BuildKit 도 일부 동작에서 https://localhost:5000 시도 → TLS handshake 실패 → connection reset / stream timeout 반복" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;verticalAlign=middle;align=left;spacingLeft=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="250" width="170" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a3" value="③ Registry Pod (mnt namespace) blob 받음 → S3 driver 가 MinIO 로 redirect 응답" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="410" width="380" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a4" value="④ 302 Redirect Location: https://minio.mnt.svc.cluster.local/... ?X-Amz-Signature=..." style="rounded=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="530" width="380" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a4-warn" value="⚠ 함정 2 S3 storage driver 가 client 부담 분산 위해 backend 로 redirect 하는 default 동작 그러나 redirect URL 의 host 는 cluster 내부 DNS 외부 client (Dev PC) 는 호스트 해석 자체 불가" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=11;verticalAlign=middle;align=left;spacingLeft=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="630" y="410" width="140" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a5" value="⑤ Developer PC ❌ minio.mnt.svc.cluster.local 호스트 미해석 blob 업로드 도달 실패" style="rounded=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=13;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="650" width="380" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-result" value="결과 write: connection reset by peer error creating error stream: Timeout 반복 retry · 끝나지 않음" style="rounded=1;fillColor=#f8cecc;strokeColor=#cc0000;strokeWidth=3;fontSize=13;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="180" y="780" width="500" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="a-arrow-1" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="a1" target="a2"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a-arrow-2" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="a2" target="a3"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a-arrow-3" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="a3" target="a4"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a-arrow-4" style="endArrow=classic;html=1;strokeWidth=3;strokeColor=#cc0000;dashed=1" edge="1" parent="1" source="a4" target="a5"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="a-arrow-5" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#cc0000" edge="1" parent="1" source="a5" target="a-result"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="right-bg" value="" style="rounded=0;fillColor=#f5fff5;strokeColor=#00aa00;strokeWidth=2;dashed=1;opacity=70" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="80" width="740" height="880" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="right-header" value="✅ 시나리오 B — BuildX OCI tar + HTTP API 순차 push" style="text;align=center;fontSize=18;fontStyle=1;fontColor=#006600;verticalAlign=middle" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="95" width="700" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b1" value="① Developer PC docker buildx build --output type=oci,dest=/tmp/img.tar" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="160" width="380" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b2" value="② OCI tar 내부 구조 manifest.json + config.json + N개의 layer blob" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="270" width="380" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b3" value="③ curl PUT — 한 번에 1 blob, 1 stream 순차: blob1 → blob2 → ... → manifest" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="380" width="380" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b3-note" value="✓ 우회 1 single-stream 이라 port-forward 의 SPDY 도 안정적으로 유지됨 docker daemon 의 multi-blob 병렬 push 흐름 자체를 안 씀" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;verticalAlign=middle;align=left;spacingLeft=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1430" y="380" width="130" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b4" value="④ Traefik Ingress (registry.project.com, HTTP 80) BasicAuth middleware 통과 (testuser:...)" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="500" width="380" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b5" value="⑤ Registry Pod REGISTRY_STORAGE_REDIRECT_DISABLE=true Registry 가 직접 MinIO 와 통신 후 응답에 데이터 전달" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="620" width="380" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b5-note" value="✓ 우회 2 redirect 끄면 client 는 MinIO 의 cluster-internal URL 을 아예 받지 않음 Registry 한 곳만 도달하면 push 완료" style="rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;verticalAlign=middle;align=left;spacingLeft=8;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1430" y="620" width="130" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b6" value="⑥ MinIO (cluster 내부) Registry 가 read/write — client 와 직접 접점 없음" style="rounded=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="760" width="380" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-result" value="결과 blob+manifest 정상 업로드 /v2/auth-platform/auth-server/tags/list 에서 새 태그 확인됨" style="rounded=1;fillColor=#d5e8d4;strokeColor=#006600;strokeWidth=3;fontSize=13;fontStyle=1;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="870" width="480" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-arrow-1" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="b1" target="b2"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="b-arrow-2" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="b2" target="b3"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="b-arrow-3" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="b3" target="b4"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="b-arrow-4" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="b4" target="b5"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="b-arrow-5" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#666666" edge="1" parent="1" source="b5" target="b6"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
<mxCell id="b-arrow-6" style="endArrow=classic;html=1;strokeWidth=2;strokeColor=#006600" edge="1" parent="1" source="b6" target="b-result"><mxGeometry relative="1" as="geometry"/></mxCell>
|
||||
|
||||
<mxCell id="legend" value="🟦 정상 컴포넌트 🟨 주의 지점 🟩 해결 / 안전 경로 🟥 실패 / 차단 ⚠ 함정 박스 ✓ 우회 효과" style="rounded=1;fillColor=#fafafa;strokeColor=#999999;fontSize=13;verticalAlign=middle;align=center;whiteSpace=wrap;html=1" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="970" width="1280" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,133 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-28T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s10-vault-problems" id="vault-problems">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="grp1" value="① auto-unseal 의존 사슬 — 한 점이 죽으면 전체 사슬이 끊김" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="120" width="940" height="380" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-kms" value="KMS
(외부)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="220" width="140" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-vault" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/vaultproject/vaultproject-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="230" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-vault-lbl" value="Vault" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="300" y="294" width="100" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-secret" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/secret.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="230" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-secret-lbl" value="K8s Secret" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="475" y="294" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-pod" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/pod.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="230" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-pod-lbl" value="Pod" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="294" width="100" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-cluster" value="모든 워크로드" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="230" width="140" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e1" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-kms" target="b-vault">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e1-lbl" value="unseal key" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="244" y="250" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e2" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=4;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="b-vault" target="b-secret">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e3" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=4;fontFamily=Pretendard,Helvetica;" edge="1" parent="1" source="b-secret" target="b-pod">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e4" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-pod" target="b-cluster">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="x-kms" value="⚡" style="text;html=1;align=center;verticalAlign=middle;fontSize=42;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="160" width="100" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="x-kms-lbl" value="장애 발생" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="200" width="100" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cascade" value="KMS 장애 → Vault unseal 불가 → Secret 합성 차단 → 모든 Pod 시작 실패 → 클러스터 다운" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="350" width="860" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="circular" value="더 깊은 순환 — auto-unseal token 자체가 K8s Secret 에 저장 (= etcd 에 남음). Vault 도입 동기 “시크릿을 etcd 밖에 두자” 와 충돌" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="404" width="860" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp2" value="② 사이드카 비용 — 클러스터 규모에 비례" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="1020" y="120" width="540" height="380" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="metric-num" value="156 Mi / Pod" style="text;html=1;align=center;verticalAlign=middle;fontSize=58;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;" vertex="1" parent="1">
|
||||
<mxGeometry x="1040" y="160" width="500" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="metric-lbl" value="vault-agent 1.17.2 · idle baseline 실측" style="text;html=1;align=center;verticalAlign=middle;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="1040" y="265" width="500" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="metric-formula" value="kubectl top pod (3회 측정 동일) · 100 Pod 환산 ≈ 15 GiB" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontStyle=2;fontFamily=monospace;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="1040" y="289" width="500" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="dot-grid" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#B91C1C;strokeWidth=1;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="320" width="420" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="dot-lbl" value="Pod 마다 사이드카 — 클러스터 규모에 비례 증가" style="text;html=1;align=center;verticalAlign=top;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="425" width="420" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="impact2" value="probe 실패 = Pod 전체 unhealthy · 사이드카 lifecycle / log 모두 별도 관리" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="1040" y="455" width="500" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp3" value="③ K8s 네이티브 아님 — 어노테이션 기반" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="520" width="1500" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="left-h" value="Injector (사이드카 + 어노테이션)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="570" width="660" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="left-y1" value="✗ Secret 갱신 = Pod 재시작 (어노테이션 변경)" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="618" width="640" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="left-y2" value="✗ GitOps 가 “sync 됐는지” 검증 어려움" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="648" width="640" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="left-y3" value="✗ ArgoCD / Flux 가 “실제 주입 성공” 모름" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="678" width="640" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="left-y4" value="✗ drift 추적 불가 — 어노테이션은 K8s 리소스 1급 객체 아님" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="708" width="640" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="right-h" value="VSO (CRD 기반) ← 다음 슬라이드의 해법" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDD6FE;strokeColor=#5B21B6;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="570" width="700" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="right-y1" value="✓ Secret 갱신 = 자동 reconcile (60s)" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="618" width="680" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="right-y2" value="✓ GitOps 가 VaultStaticSecret 상태 그대로 검증" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="648" width="680" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="right-y3" value="✓ Controller 가 reconcile 결과를 status 로 공개" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="678" width="680" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="right-y4" value="✓ CRD = K8s 1급 객체 → drift 자동 감지 + 복구" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="708" width="680" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,76 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-04-28T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s12-encryption-decision" id="encryption-decision">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="start" value="VSO 사용 = etcd 에 K8s Secret (base64) 적힘" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="130" width="520" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="q" value="내 K8s 환경?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFBEB;strokeColor=#B45309;strokeWidth=2;fontSize=16;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="240" width="320" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-start-q" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="start" target="q">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="b-k3s" value="K3s" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#57606A;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="430" width="200" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-kubeadm" value="kubeadm · 표준 K8s" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#57606A;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="430" width="200" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="b-cloud" value="클라우드 (EKS / GKE)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#57606A;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="430" width="200" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-q-k3s" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="q" target="b-k3s">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-q-kubeadm" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="q" target="b-kubeadm">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-q-cloud" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="q" target="b-cloud">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r-k3s" value="K3s --secrets-encryption" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=3;fontSize=15;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="540" width="320" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r-k3s-detail" value="• 한 줄 옵션 · AES-CBC 자동 키 관리
• dev 부담 0 · 지금 우리 환경 권장" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#14532D;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="610" width="320" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r-kubeadm" value="EncryptionConfiguration + KMS provider" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=3;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="540" width="320" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r-kubeadm-detail" value="• yaml 직접 작성 · AES-CBC / GCM 선택
• KMS provider (HashiCorp Vault transit / 외부)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#14532D;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="610" width="320" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r-cloud" value="AWS / GCP KMS provider" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=3;fontSize=15;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="540" width="320" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r-cloud-detail" value="• 관리형 KMS · HSM 연동 · 자동 회전
• 클라우드 종속 + 비용 (운영급)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontColor=#14532D;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="610" width="320" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-k3s-r" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-k3s" target="r-k3s">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-kubeadm-r" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-kubeadm" target="r-kubeadm">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-cloud-r" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="b-cloud" target="r-cloud">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="our-mark" value="◀ 현재 우리 선택" style="text;html=1;align=left;verticalAlign=middle;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;" vertex="1" parent="1">
|
||||
<mxGeometry x="425" y="555" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,252 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-08T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s13-controller-reconcile" id="reconcile">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="컨트롤러의 심장 — Reconcile Loop & Watch 메커니즘" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=26;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="SharedInformer 가 로컬 캐시 유지 · WorkQueue 가 폭주 흡수 · Reconcile 의 read 경로는 캐시 (write 는 apiserver)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-ext" value="외부 — kube-apiserver / etcd" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="user" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="170" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="user-lbl" value="사용자 · GitOps" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="234" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="api" value="kube-apiserver
(/apis · /watch)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="380" y="170" width="200" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="api-sub" value="HTTP/2 · long-stream · resourceVersion 기반 증분" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;" vertex="1" parent="1">
|
||||
<mxGeometry x="360" y="232" width="240" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="etcd" value="etcd" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#57606A;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="180" width="100" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="etcd-sub" value="desired state 영구 저장" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="224" width="140" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-user-api" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="user" target="api">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="258" y="188" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-user-api-lbl" value="kubectl apply (Ingress 변경)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="188" y="216" width="180" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-api-etcd" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#57606A;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="api" target="etcd">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-api-etcd-lbl" value="persist" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#24292F;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="190" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ext-note" value="✓ 사용자는 desired state 만 선언 — 실제 동작은 컨트롤러가 구현" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#FB923C;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="180" width="640" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-ctrl" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="310" width="1300" height="430" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="grp-ctrl-lbl" value="컨트롤러 프로세스" style="text;html=1;strokeColor=none;fillColor=#EFF6FF;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="316" width="180" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-informer" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3B82F6;strokeWidth=1;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="360" width="740" height="380" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="grp-informer-lbl" value="SharedInformer" style="text;html=1;strokeColor=none;fillColor=#FFFFFF;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="68" y="366" width="120" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="reflector" value="Reflector
LIST + WATCH" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="430" width="130" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="reflector-sub" value="apiserver 1개 long-stream" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="506" width="150" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="fifo" value="DeltaFIFO
Add / Update / Delete" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="430" width="140" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fifo-sub" value="객체별 delta 슬라이스 큐" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="506" width="140" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="indexer" value="Indexer (Store)
thread-safe map" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="430" width="150" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="indexer-sub" value="namespace/name → object" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="485" y="506" width="160" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="lister" value="Lister
read-only API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BFDBFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="430" width="125" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="lister-sub" value="Get/List · 캐시 read" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="650" y="506" width="145" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="handlers" value="ResourceEventHandlers
OnAdd · OnUpdate · OnDelete" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="610" width="350" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="handlers-sub" value="콜백은 보통 “key 만 큐에 넣고 끝” — 무거운 일은 Worker" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="245" y="686" width="420" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-api-ref" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.2;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="api" target="reflector">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num2" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="255" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-api-ref-lbl" value="Watch stream (resourceVersion 부터 증분 이벤트)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="276" width="320" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-ref-fifo" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="reflector" target="fifo">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num3" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="243" y="453" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-ref-fifo-lbl" value="delta push" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="402" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-fifo-idx" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="fifo" target="indexer">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num4" value="④" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="448" y="453" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-fifo-idx-lbl" value="cache 갱신" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="402" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-idx-lister" style="endArrow=none;html=1;strokeColor=#1E40AF;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="indexer" target="lister">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-idx-lister-lbl" value="backed by" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="618" y="402" width="64" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-fifo-handlers" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.4;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="fifo" target="handlers">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num5" value="⑤" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="348" y="540" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-fifo-handlers-lbl" value="콜백 dispatch" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="552" width="100" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="wq" value="WorkQueue
rate-limit · dedup · 백오프" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="610" width="240" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wq-sub" value="동일 key 큐잉 시 1회로 합쳐 폭주 흡수" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="686" width="280" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-handlers-wq" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="handlers" target="wq">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num6" value="⑥" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;fontColor=#B45309;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="728" y="633" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-handlers-wq-lbl" value="Add(namespace/name)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="600" width="180" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="worker" value="Worker
(goroutine × N)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="430" width="240" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="worker-sub" value="WQ 에서 key 1개씩 pop → reconcile 호출" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="506" width="280" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-wq-worker" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="wq" target="worker">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num7" value="⑦" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;fontColor=#B45309;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="958" y="540" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-wq-worker-lbl" value="dequeue" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="988" y="552" width="70" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="reconcile" value="Reconcile(key)
desired vs actual diff" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=3;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="430" width="210" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="reconcile-sub" value="idempotent · 실패 시 WorkQueue 재큐잉" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1100" y="506" width="250" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-worker-lister" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="worker" target="lister">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num8" value="⑧" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="813" y="453" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-worker-lister-lbl" value="Lister.Get(key) · 로컬 read" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="402" width="200" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-worker-rec" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="worker" target="reconcile">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num9" value="⑨" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1093" y="453" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-worker-rec-lbl" value="invoke" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1085" y="402" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-out" value="외부 효과" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#10B981;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#047857;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1360" y="310" width="200" height="430" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="traefik" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/traefikio/traefikio-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1410" y="440" width="100" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="traefik-lbl" value="Traefik 동적 설정 갱신" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1370" y="550" width="180" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="traefik-sub" value="router · service · middleware 갱신" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#047857;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1370" y="576" width="180" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-rec-out" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="reconcile" target="traefik">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num10" value="⑩" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1360" y="478" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-rec-out-lbl" value="apply" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="448" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="Watch 한 번으로 변경 스트림 수신 → SharedInformer 가 로컬 캐시 갱신 → WorkQueue 가 폭주 흡수 → Worker 가 Lister 로 캐시 read 후 Reconcile 호출" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,270 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-08T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s14-traffic-flow" id="traffic-flow">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="트래픽 흐름 — L7 라우팅 & TLS (SNI 기반 핸드셰이크)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=26;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="TLS 단계 SNI 로 인증서 선택 → 복호화된 요청이 Router → Middleware → Service 그래프 통과" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-tls" value="① TLS 단계 — SNI 기반 인증서 선택" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="290" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="browser" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="220" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser-lbl" value="Browser" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="284" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser-sub" value="https://a.com/api/v1/users" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="306" width="220" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="traefik" value="" style="shape=image;html=1;image=https://www.vectorlogo.zone/logos/traefikio/traefikio-icon.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="210" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="traefik-lbl" value="Traefik (TLS 종단)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="294" width="160" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="certpool" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FB923C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="150" width="380" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="certpool-title" value="Cert Pool (TLS Store)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingLeft=12;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="150" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="certpool-l1" value="• tls-a-com → CN=a.com" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="178" width="380" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="certpool-l2" value="• tls-b-com → CN=b.com" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="200" width="380" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="certpool-l3" value="• tls-wildcard → CN=*.dev.com" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="222" width="380" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tlsopt" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FB923C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="270" width="380" height="105" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tlsopt-title" value="TLSOption: modern-tls" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingLeft=12;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="270" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tlsopt-l1" value="• minVersion: VersionTLS12" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="298" width="380" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tlsopt-l2" value="• sniStrict: true" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="320" width="380" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tlsopt-l3" value="• cipherSuites: [ECDHE_*_GCM]" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="342" width="380" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cert-note" value="✓ 한 IP 가 N 개 도메인 인증서를
SNI hostname 으로 분기 선택" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#FB923C;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="180" width="220" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tlsopt-note" value="✓ 프로토콜 버전 / cipher 정책
= 보안 baseline 의 단일 출처" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#FB923C;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="295" width="220" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-ch" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.2;exitDx=0;exitDy=0;entryX=0;entryY=0.2;entryDx=0;entryDy=0;" edge="1" parent="1" source="browser" target="traefik">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="217" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-ch-lbl" value="ClientHello { server_name: a.com }" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="195" width="320" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-lookup" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="traefik" target="certpool">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num2" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="828" y="190" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-lookup-lbl" value="SNI 로 cert 선택" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="790" y="170" width="120" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-sh" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0;exitY=0.7;exitDx=0;exitDy=0;entryX=1;entryY=0.7;entryDx=0;entryDy=0;" edge="1" parent="1" source="traefik" target="browser">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num3" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="251" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-sh-lbl" value="ServerHello + Cert(a.com) + cipher 협상" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="195" y="280" width="380" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-enc" style="endArrow=classic;startArrow=classic;html=1;strokeColor=#15803D;strokeWidth=4;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="180" y="370" as="sourcePoint" />
|
||||
<mxPoint x="700" y="370" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="num4" value="④" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="425" y="358" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-enc-lbl" value="암호화된 GET /api/v1/users — TLSOption 적용 (TLS 1.2+ · ECDHE)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="386" width="560" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="decrypt-arrow" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=4;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="740" y="440" />
|
||||
<mxPoint x="240" y="440" />
|
||||
</Array>
|
||||
<mxPoint x="740" y="290" as="sourcePoint" />
|
||||
<mxPoint x="240" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="num5" value="⑤" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="478" y="428" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="decrypt-lbl" value="복호화된 HTTP 요청 (Router 그래프 진입)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="510" y="428" width="280" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-l7" value="② L7 단계 — Router · Middleware · Service 그래프 (Traefik 내부)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="460" width="1300" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="router-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="510" width="320" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="router-title" value="Router" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="510" width="320" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="router-match" value="match:
 Host: a.com
 Path: /api/v1/users
 PathType: Prefix" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#1E40AF;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="546" width="300" height="78" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pathtype-divider" value="" style="endArrow=none;html=1;strokeColor=#1E40AF;strokeWidth=1;dashed=1;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="100" y="630" as="sourcePoint" />
|
||||
<mxPoint x="380" y="630" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="pathtype-title" value="PathType 비교" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="638" width="300" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pt-prefix" value="• Prefix → /api 입력 시 /api · /api/v1 · /api/v1/u 모두 매칭" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#24292F;spacingLeft=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="660" width="300" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pt-exact" value="• Exact → /api 만 매칭, /api/v1 은 미매칭" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#24292F;spacingLeft=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="682" width="300" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pt-isp" value="• ImplementationSpecific → controller 별 해석 (legacy default)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#57606A;fontStyle=2;spacingLeft=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="704" width="300" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pt-note" value="✓ Host + Path 매칭에서 분기 결정 — 미매칭 = 404" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="726" width="300" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="mw-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="510" width="460" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mw-title" value="Middleware Chain (선언 순서대로 적용)" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="510" width="460" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mw1" value="auth
(ForwardAuth)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="460" y="580" width="130" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mw2" value="rate-limit
(100 rps)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="605" y="580" width="130" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mw3" value="headers
(HSTS · X-Frame)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="750" y="580" width="130" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-mw1-mw2" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=2;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mw1" target="mw2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-mw2-mw3" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=2;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mw2" target="mw3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mw-note" value="✓ 단계마다 거부 가능 (4xx) — 통과 시에만 다음 미들웨어로
✓ Traefik 의 Middleware CRD = 재사용 가능한 정책 빌딩블록" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="450" y="670" width="440" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mw-note2" value="auth · rate-limit · header · circuitbreaker · ip-allowlist · ..." style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="450" y="715" width="440" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="svc-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="510" width="320" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="svc-title" value="Service" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="510" width="320" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="svc-body" value="endpoints:
 - auth-server-svc:8080
loadBalancer:
 algorithm: round-robin
healthCheck:
 path: /actuator/health" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#1E40AF;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="950" y="546" width="300" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="svc-note" value="✓ K8s Endpoint 자동 동기화
Pod 추가/제거 즉시 반영" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="950" y="685" width="300" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-r-mw" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="router-bg" target="mw1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num6" value="⑥" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="418" y="603" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-r-mw-lbl" value="match 통과" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="395" y="630" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-mw-svc" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="mw3" target="svc-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num7" value="⑦" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="908" y="603" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-mw-svc-lbl" value="체인 통과" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="888" y="630" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-bk" value="Backend Pods" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#10B981;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#047857;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1360" y="460" width="200" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pod1" value="Pod 1
auth-server" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1380" y="510" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pod2" value="Pod 2
auth-server" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1380" y="590" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pod3" value="Pod 3
auth-server" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1380" y="670" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-svc-pod1" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc-bg" target="pod1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-svc-pod2" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc-bg" target="pod2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-svc-pod3" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="svc-bg" target="pod3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num8" value="⑧" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="618" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-svc-pods-lbl" value="LB fan-out
(round-robin)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1276" y="643" width="80" height="36" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="TLS 단계: SNI 로 cert 선택 + TLSOption 적용 → 복호화 후 Router(Host/Path 매칭) → Middleware 체인 → Service(Pod 묶음)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,140 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-08T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s15-ingress-to-gatewayapi" id="gatewayapi">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="기술 진화 — Ingress → Gateway API" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=26;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="annotation 의존 단일 객체 → 역할 분리된 3 객체 (GatewayClass · Gateway · HTTPRoute) + vendor 표준화" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-before" value="Before — Ingress (annotation 의존)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=16;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="740" height="660" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ingress-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="170" width="660" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ingress-title" value="kind: Ingress · apiVersion: networking.k8s.io/v1" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="170" width="660" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="yaml-pre" value="metadata:
 name: a-com
 annotations:" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="198" width="660" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="yaml-vendor-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=1;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="88" y="258" width="644" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="yaml-vendor" value=" nginx.ingress.kubernetes.io/canary: "true"
 nginx.ingress.kubernetes.io/canary-weight: "30"
 traefik.ingress.kubernetes.io/router.middlewares: kube-system-auth@...
 traefik.ingress.kubernetes.io/router.tls.options: kube-system-modern-tls@...
 cert-manager.io/cluster-issuer: letsencrypt-prod" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#B91C1C;fontStyle=1;spacingLeft=14;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="258" width="660" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="yaml-vendor-tag" value="◀ vendor 별 annotation soup (파편화)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="358" width="240" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="yaml-spec" value="spec:
 ingressClassName: traefik
 rules:
 - host: a.com
 http:
 paths:
 - { path: /api, pathType: Prefix, backend: { service: { name: a-svc, port: 80 } } }" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#24292F;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="384" width="660" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="bad1" value="✗ vendor 마다 annotation key 다름 — 같은 의도, 다른 문법 (파편화)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="510" width="660" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bad2" value="✗ 카나리·헤더·가중치 라우팅 → annotation 으로 우회 (spec 외 기능)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="570" width="660" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bad3" value="✗ 서비스 메쉬 (Istio · Linkerd) 통합 어색 — 메쉬는 별도 CRD 사용" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="630" width="660" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="bad4" value="✗ RBAC 단위 = Ingress 객체 1 개 — 인프라/운영/개발 권한 분리 어려움" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="690" width="660" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-after" value="After — Gateway API (역할 분리 · 표준 spec)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;fontSize=16;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=left;verticalAlign=top;spacingLeft=14;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="120" width="740" height="660" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="gc-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFE4E6;strokeColor=#BE123C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="170" width="680" height="115" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gc-role" value="인프라 관리자" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BE123C;strokeColor=#BE123C;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="864" y="184" width="120" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gc-title" value="kind: GatewayClass" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#BE123C;" vertex="1" parent="1">
|
||||
<mxGeometry x="996" y="184" width="280" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gc-yaml" value="spec:
 controllerName: traefik.io/gateway-controller" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#7F1D1D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="864" y="216" width="500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gc-note" value="어떤 컨트롤러를
쓸 것인가" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#BE123C;" vertex="1" parent="1">
|
||||
<mxGeometry x="1380" y="210" width="140" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="gw-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="335" width="680" height="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gw-role" value="클러스터 운영자" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B45309;strokeColor=#B45309;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="864" y="349" width="120" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gw-title" value="kind: Gateway" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="996" y="349" width="280" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gw-yaml" value="spec:
 gatewayClassName: traefik
 listeners:
 - { protocol: HTTPS, port: 443, hostname: a.com,
 tls: { certificateRefs: [tls-a-com] } }" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#7F1D1D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="864" y="381" width="500" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="gw-note" value="IP · 인증서
리스너" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="1380" y="380" width="140" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hr-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="520" width="680" height="135" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hr-role" value="서비스 개발자" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E40AF;strokeColor=#1E40AF;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="864" y="534" width="120" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hr-title" value="kind: HTTPRoute" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="996" y="534" width="280" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hr-yaml" value="spec:
 parentRefs:
 - { name: a-com-gw }
 hostnames: [a.com]
 rules:
 - matches: [{ path: { type: Prefix, value: /api } }]
 backendRefs: [{ name: a-svc, port: 80 }]" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#1E3A8A;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="864" y="566" width="500" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hr-note" value="어디로 보낼지
(라우팅 규칙)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1380" y="565" width="140" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-gw-gc" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="gw-bg" target="gc-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-gw-gc-lbl" value="spec.gatewayClassName" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1090" y="296" width="200" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-hr-gw" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="hr-bg" target="gw-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-hr-gw-lbl" value="spec.parentRefs" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="1110" y="481" width="160" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="good1" value="✓ vendor 중립 표준 — annotation 0, spec 1급 시민" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBF7D0;strokeColor=#15803D;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="675" width="680" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="good2" value="✓ 역할별 RBAC 가능 — 인프라/운영/개발 권한 분리" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBF7D0;strokeColor=#15803D;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="710" width="680" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="good3" value="✓ 카나리·헤더 매칭이 spec — 서비스 메쉬 (Istio · Linkerd) 표준 통합" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBF7D0;strokeColor=#15803D;strokeWidth=2;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="745" width="680" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="Ingress 한 객체에 모든 책임 → Gateway API 는 인프라(GatewayClass) · 운영(Gateway) · 개발(HTTPRoute) 역할별 객체 3 계층 + vendor 표준화" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,238 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-09T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s16-l4-vs-l7" id="l4-l7">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="네트워크 기초 — L4 (kube-proxy) vs L7 (Ingress) 경계" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=26;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="NodePort/LoadBalancer = 커널 DNAT 1회 (L4) · Ingress = user-space reverse proxy + TCP 2 connection (L7)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-l4" value="① L4 경로 — kube-proxy DNAT (NodePort/LoadBalancer Service)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="280" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l4-client" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="220" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-client-lbl" value="Client (외부)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="284" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-client-ip" value="src: 203.0.113.5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="306" width="140" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l4-node-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="190" width="320" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-node-title" value="Node (worker · 192.168.1.10)" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="190" width="320" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-kp-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FED7AA;strokeColor=#C2410C;strokeWidth=2;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="450" y="225" width="280" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-kp-title" value="kube-proxy" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="450" y="228" width="280" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-kp-sub" value="iptables / IPVS (kernel-space)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="450" y="252" width="280" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-kp-dnat-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="465" y="284" width="250" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-kp-dnat-tag" value="DNAT" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C2410C;strokeColor=#C2410C;fontColor=#FFFFFF;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="476" y="294" width="60" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-kp-dnat-rule" value=":30080 → 10.42.0.5:8080" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#7C2D12;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="544" y="294" width="170" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-kp-snat" value="(externalTrafficPolicy=Cluster → SNAT 추가)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=9;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="465" y="318" width="250" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l4-pod" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/pod.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1060" y="220" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-pod-lbl" value="Pod (auth-server)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="304" width="180" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-pod-ip" value="10.42.0.5:8080" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="326" width="180" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l4-banner" value="◀ ━━━━━━━━━ TCP 1 connection (kernel-space, NAT 만 적용 후 그대로 통과) ━━━━━━━━━ ▶" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FED7AA;strokeColor=#C2410C;strokeWidth=2;dashed=0;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="195" y="372" width="945" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l4-e1" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="l4-client" target="l4-node-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-pkt1" value="dst : NodeIP : 30080" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#7C2D12;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="240" width="200" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l4-e2" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="l4-node-bg" target="l4-pod">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-pkt2" value="dst : PodIP : 8080 (rewritten)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#7C2D12;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="810" y="240" width="240" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l4-note-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#C2410C;strokeWidth=1;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="190" width="290" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-note-title" value="L4 특성" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="190" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-n1" value="✗ HTTP 헤더 인지 0 (TCP 4-tuple만)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="218" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-n2" value="✗ Host/Path 라우팅 불가능" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="240" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-n3" value="✓ 100% kernel-space → 매우 빠름" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="262" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-n4" value="△ Cluster 정책 → SNAT, 원본 IP 손실" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="284" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-n5" value="✓ Local 정책 → 원본 IP 보존 (불균형 LB)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="306" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l4-n6" value="→ TCP 1 connection 만 유지" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="338" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-l7" value="② L7 경로 — Ingress Controller (user-space reverse proxy)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="420" width="1520" height="330" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l7-client" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="540" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-client-lbl" value="Client (외부)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="604" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-client-ip" value="src: 203.0.113.5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="626" width="140" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l7-ic-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="475" width="440" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-ic-title" value="Traefik Ingress Controller (Pod)" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="475" width="440" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-ic-ip" value="Ingress IP : 10.0.0.100 : 443 · user-space" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=monospace;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="500" width="440" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-ic-s1" value="1. TLS 종단 (SNI 기반 인증서 선택)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="528" width="400" height="34" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-ic-s2" value="2. HTTP 파싱 (Host · Path · Header 인지)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="566" width="400" height="34" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-ic-s3" value="3. Router → Middleware (auth · rate-limit · headers)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="604" width="400" height="34" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-ic-s4" value="4. 새 TCP 연결 생성 → backend Pod 로 reverse proxy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="642" width="400" height="34" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-ic-tag" value="↓ TCP1 종단 → HTTP 처리 → TCP2 신규 생성 ↓" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="685" width="440" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l7-pod" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/pod.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1060" y="540" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-pod-lbl" value="Pod (auth-server)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="624" width="180" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-pod-ip" value="10.42.0.5:8080" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="646" width="180" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l7-e1" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="l7-client" target="l7-ic-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-num1" value="B1" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="275" y="558" width="30" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-pkt1-tag" value="◀ ━━━ TCP 1 connection ━━━ ▶" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E40AF;strokeColor=#1E40AF;fontColor=#FFFFFF;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="180" y="525" width="240" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-pkt1" value="src=Client, dst=IngressIP:443 (TLS)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#1E40AF;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="500" width="280" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l7-e2" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=4;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="l7-ic-bg" target="l7-pod">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-num2" value="B2" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;fontColor=#1E40AF;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="935" y="568" width="30" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-pkt2-tag" value="◀ ━━━ TCP 2 connection (신규 생성) ━━━ ▶" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E40AF;strokeColor=#1E40AF;fontColor=#FFFFFF;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="525" width="280" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-pkt2" value="src=IngressIP, dst=PodIP:8080" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#1E40AF;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="500" width="240" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-pkt2-xff" value="X-Forwarded-For: 203.0.113.5 (HTTP 헤더로 원본 IP 보존)" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=monospace;fontColor=#15803D;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="610" width="320" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-dnat-marker" value="DNAT (kube-proxy)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#C2410C;strokeWidth=1;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="568" width="120" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="l7-note-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=1;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="475" width="290" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-note-title" value="L7 특성" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="475" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n1" value="✓ HTTP 풀 디코딩 (Host · Path)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="503" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n2" value="✓ Header 기반 분기 (canary · A/B)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="525" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n3" value="✓ TLS 종단 + Middleware 체인" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="547" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n4" value="✓ X-Forwarded-For 로 원본 IP 보존" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="569" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n5" value="△ user-space — 약간의 오버헤드" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="591" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n6" value="△ TCP 2 connection (Client↔IC, IC↔Pod)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="613" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n7" value="△ IC→Pod 도 결국 kube-proxy DNAT" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="635" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="l7-n-sep" value="" style="endArrow=none;html=1;strokeColor=#1E40AF;strokeWidth=1;dashed=1;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1250" y="664" as="sourcePoint" />
|
||||
<mxPoint x="1520" y="664" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="l7-n-sum" value="→ TCP 2 connection 으로 분리 + HTTP 처리" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="673" width="290" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="L4 = 커널 DNAT 1회로 매우 빠름, HTTP 모름 / L7 = TCP 2개 분리 + HTTP 풀 인지로 라우팅·미들웨어 가능 — 백엔드 도달은 모두 결국 kube-proxy 경유" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,291 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-09T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s17-cert-manager" id="cert-manager">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="인증서 자동 발급/갱신 — cert-manager + ACME (Let's Encrypt)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=26;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="Certificate CRD 선언 → cert-manager 가 ACME 챌린지 → K8s Secret → Cert Pool 자동 반영 + 만료 30일 전 자동 갱신" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-decl" value="① 선언 (Operator)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#5B21B6;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="op" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="170" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="op-lbl" value="Operator" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="234" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cert-crd-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="160" width="380" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cert-crd-title" value="kind: Certificate" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="160" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cert-crd-body" value="spec.secretName: tls-a-com
spec.dnsNames: [a.com]
spec.issuerRef.name: letsencrypt-prod" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#3B0764;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="186" width="380" height="68" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="issuer-crd-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="780" y="160" width="400" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-crd-title" value="kind: ClusterIssuer" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="780" y="160" width="400" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-crd-body" value="metadata.name: letsencrypt-prod
spec.acme.server: https://acme-v02.api...
spec.acme.solvers: [http01]" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#3B0764;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="780" y="186" width="400" height="68" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-op-cert" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="op" target="cert-crd-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num1" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="213" y="187" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-op-cert-lbl" value="kubectl apply" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#5B21B6;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="190" y="214" width="100" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-cert-issuer" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="cert-crd-bg" target="issuer-crd-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-cert-issuer-lbl" value="issuerRef" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="690" y="200" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="decl-note" value="✓ Operator 입력 = Certificate + Issuer 두 CRD
✓ Issuer 종류: ACME (Let's Encrypt · ZeroSSL) · CA · Vault · SelfSigned
✓ Scope: Issuer (namespace) vs ClusterIssuer (cluster, 본 그림)
✓ 자동 모드: Ingress annotation cert-manager.io/cluster-issuer
 → Certificate CRD 자동 생성 (가장 흔한 실전 패턴)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1230" y="148" width="320" height="125" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-cm" value="cert-manager (in-cluster controller)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="300" width="980" height="290" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cm-icon" value="" style="shape=image;html=1;image=https://raw.githubusercontent.com/kubernetes/community/master/icons/svg/resources/unlabeled/pod.svg;imageAspect=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="370" width="70" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cm-lbl" value="cert-manager" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=1;fontColor=#C2410C;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="444" width="130" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="order-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#C2410C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="370" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="order-title" value="Order CRD" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="370" width="180" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="order-sub" value="ACME Order 트래킹" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="400" width="180" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="challenge-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#C2410C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="370" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="challenge-title" value="Challenge CRD" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="370" width="180" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="challenge-sub" value="HTTP-01 / DNS-01 처리" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="400" width="180" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="endpoint-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FED7AA;strokeColor=#C2410C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="720" y="370" width="260" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="endpoint-title" value="HTTP-01 Token Endpoint" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="720" y="370" width="260" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="endpoint-sub" value="/.well-known/acme-challenge/<token>
Ingress 에 임시 노출 (외부 80/tcp)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="720" y="395" width="260" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-cm-order" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="cm-icon" target="order-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num3" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="183" y="393" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-cm-order-lbl" value="create" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="183" y="420" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-order-challenge" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="order-bg" target="challenge-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num4" value="④" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="436" y="393" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-challenge-endpoint" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="challenge-bg" target="endpoint-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num5" value="⑤" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="676" y="393" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-challenge-endpoint-lbl" value="expose" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="666" y="420" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-watch-cert" style="endArrow=classic;html=1;strokeColor=#FB923C;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.3;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="cm-icon" target="cert-crd-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num2" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FB923C;fontColor=#C2410C;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="170" y="320" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-watch-cert-lbl" value="watch (informer)" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=monospace;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="345" width="120" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cm-bottom-note-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#C2410C;strokeWidth=1;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="460" width="740" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cm-bottom-note-title" value="더 알아둘 것 (그림에 생략된 변형)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="460" width="740" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cm-note-1" value="• Challenge: HTTP-01 (80/tcp · wildcard 불가) vs DNS-01 (DNS API · *.example.com wildcard 가능)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="488" width="740" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cm-note-2" value="• 실제 흐름: Certificate → CertificateRequest → Order → Challenge → cert (CR 이 발급 단위 추상화)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="510" width="740" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cm-note-3" value="• Token endpoint: 검증 동안만 외부 80/tcp 노출 → 검증 후 자동 삭제 (영구 노출 X)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="532" width="740" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cm-note-4" value="• 운영: staging server (acme-staging-v02) 로 테스트 후 prod · rate limit 50 cert / 도메인 / 주" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="554" width="740" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-acme" value="외부 — ACME 서버 (Let's Encrypt)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1040" y="300" width="520" height="290" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="acme-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;strokeWidth=3;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="370" width="200" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="acme-title" value="Let's Encrypt" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=15;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingTop=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="370" width="200" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="acme-sub-1" value="ACME 프로토콜 서버" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=2;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="408" width="200" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="acme-sub-2" value="공개 CA · 무료 발급" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontStyle=2;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="430" width="200" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="acme-sub-3" value="acme-v02.api.letsencrypt.org" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#7C2D12;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="490" width="200" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-cm-acme-order" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1020" y="395" as="sourcePoint" />
|
||||
<mxPoint x="1080" y="395" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="num6" value="⑥" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;fontColor=#B45309;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1031" y="383" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-cm-acme-order-lbl" value="Order 요청" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=monospace;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="985" y="365" width="100" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-acme-validate" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;dashed=1;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="1180" y="600" />
|
||||
<mxPoint x="850" y="600" />
|
||||
</Array>
|
||||
<mxPoint x="1180" y="540" as="sourcePoint" />
|
||||
<mxPoint x="850" y="440" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="num7" value="⑦" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;fontColor=#B45309;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="588" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-acme-validate-lbl" value="HTTP GET token URL (외부에서 검증)" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=monospace;fontColor=#B45309;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="850" y="608" width="280" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-acme-cm-cert" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1080" y="460" as="sourcePoint" />
|
||||
<mxPoint x="1020" y="460" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="num8" value="⑧" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1031" y="448" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-acme-cm-cert-lbl" value="X.509 cert 발급" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=monospace;fontColor=#15803D;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="475" width="120" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-result" value="결과 — K8s Secret + Cert Pool" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#10B981;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#047857;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="610" width="1520" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="secret-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="650" width="440" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="secret-title" value="kind: Secret · type: kubernetes.io/tls" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="650" width="440" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="secret-body" value="metadata.name: tls-a-com
data.tls.crt: <PEM 인증서>
data.tls.key: <PEM 개인키>" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#14532D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="676" width="440" height="68" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="pool-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="650" width="460" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pool-title" value="Traefik Cert Pool (s14 와 동일)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="650" width="460" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pool-body" value="• tls-a-com → CN=a.com
• Traefik k8s provider 가 Secret 변경 자동 감지
• 다음 SNI 매칭 시 새 cert 사용 (Pod 재시작 불필요)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="676" width="460" height="68" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="renewal-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBF7D0;strokeColor=#15803D;strokeWidth=2;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="650" width="300" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="renewal-title" value="⓿ 자동 갱신" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="650" width="300" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="renewal-body" value="cert-manager 가 notAfter 주기 확인
만료 30 일 전 → ②~⑨ 자동 재실행
운영자 개입 / Pod 재시작 불필요" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;" vertex="1" parent="1">
|
||||
<mxGeometry x="1240" y="678" width="300" height="65" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-cm-secret" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.3;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="cm-icon" target="secret-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num9" value="⑨" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="103" y="608" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-cm-secret-lbl" value="Secret 저장" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=monospace;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="135" y="600" width="120" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-secret-pool" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="secret-bg" target="pool-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="num10" value="⑩" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;fontColor=#15803D;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="618" y="688" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-secret-pool-lbl" value="자동 reload" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#15803D;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="668" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="운영자는 Certificate CRD 만 선언 → cert-manager 가 Order/Challenge/Endpoint 자동 처리 + ACME 와 통신 → K8s Secret 으로 저장 + Cert Pool 자동 반영 + 만료 전 자동 갱신" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,277 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-09T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s17b-cert-manager-variants" id="cert-manager-variants">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="cert-manager 변형 / 추상화 / 실패 처리 — s17 (정상 발급) 외 전체 그림" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="진입 모드 (수동/자동) · CertificateRequest 추상화 · Issuer 4 종류 · Challenge 2 타입 · 실패 백오프" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-entry" value="① 진입 경로 — 수동 vs 자동 (ingress-shim)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#5B21B6;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="op" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="90" y="170" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="op-lbl" value="Operator" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="234" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="path-a" value="A. 수동 모드 — kubectl apply -f certificate.yaml" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="155" width="380" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="path-a-sub" value="Operator 가 Certificate CRD 를 직접 작성·apply" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C3AED;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="200" width="380" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="path-b" value="B. 자동 모드 — Ingress annotation → ingress-shim" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="220" width="380" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="path-b-sub" value="annotation: cert-manager.io/cluster-issuer:letsencrypt-prod" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=monospace;fontColor=#7C3AED;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="265" width="380" height="14" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="entry-cert" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="170" width="320" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="entry-cert-title" value="kind: Certificate" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="170" width="320" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="entry-cert-sub" value="(어느 모드로든 결과는 동일한 CRD)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="200" width="320" height="42" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-op-a" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="op" target="path-a">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-op-b" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.7;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="op" target="path-b">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-a-cert" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.3;entryDx=0;entryDy=0;" edge="1" parent="1" source="path-a" target="entry-cert">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-b-cert" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.7;entryDx=0;entryDy=0;" edge="1" parent="1" source="path-b" target="entry-cert">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="entry-note" value="자동 모드 (실전에서 가장 흔함):
• Ingress 객체에 annotation cert-manager.io/cluster-issuer:<name> 만 붙이면
• cert-manager-ingress-shim 컨트롤러가 Ingress.spec.tls 를 보고
• Certificate CRD 를 자동 생성 → 이후 흐름은 수동 모드와 동일 (s17)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="155" width="540" height="110" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-cr" value="② Certificate vs CertificateRequest — 발급 단위 추상화 (1 : N)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="300" width="740" height="270" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cert-top" value="kind: Certificate
(1 개 — 영구 desired state)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FED7AA;strokeColor=#C2410C;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="345" width="280" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cr-1" value="CertificateRequest #1
t = 0
(initial 발급)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="450" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cr-2" value="CertificateRequest #2
t = 60d
(renewal-1)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="450" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cr-3" value="CertificateRequest #3
t = 120d
(renewal-2)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C2410C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="460" y="450" width="180" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cr-dots" value="...
시간순 누적" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="465" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-cert-cr1" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=0.2;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="cert-top" target="cr-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-cert-cr2" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="cert-top" target="cr-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-cert-cr3" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=0.8;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="cert-top" target="cr-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cr-note" value="✓ Certificate = 영구 spec (1 개) · CertificateRequest = 발급 1회분 (N 개 시간순)
✓ ACME issuer 면 각 CR → Order/Challenge 생성 (s17) · CA/Vault/SelfSigned 면 CR 단계에서 직접 발급" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#FB923C;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="540" width="700" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-issuer" value="③ Issuer 종류 — spec.* 4 옵션 + scope (Issuer / ClusterIssuer)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EFF6FF;strokeColor=#3B82F6;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="300" width="760" height="270" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="issuer-base" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="350" width="220" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-base-title" value="Issuer / ClusterIssuer" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="350" width="220" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-base-scope-title" value="Scope :" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="384" width="220" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-base-scope1" value="• Issuer : namespace 한정" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="406" width="220" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-base-scope2" value="• ClusterIssuer : 전역" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="426" width="220" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-base-tip" value="공통: spec.acme | spec.ca
 spec.vault | spec.selfSigned
 중 하나 선택" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="450" width="220" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="issuer-acme" value="spec.acme → ACME 서버" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="350" width="240" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-acme-sub" value="Let's Encrypt · ZeroSSL (공개 도메인)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="378" width="240" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="issuer-ca" value="spec.ca → 자체 CA" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="350" width="240" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-ca-sub" value="cert+key 가 K8s Secret 으로 사전 등록 (내부망 / mTLS)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="378" width="240" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="issuer-vault" value="spec.vault → Vault PKI" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="430" width="240" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-vault-sub" value="HashiCorp Vault PKI engine (Vault 사용 환경)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1080" y="458" width="240" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="issuer-self" value="spec.selfSigned → 자기 서명" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="430" width="240" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="issuer-self-sub" value="브라우저 신뢰 X — 테스트 / 임시 / dev 전용" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1320" y="458" width="240" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-issuer-acme" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.2;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="issuer-base" target="issuer-acme">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-issuer-vault" style="endArrow=classic;html=1;strokeColor=#1E40AF;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.8;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="issuer-base" target="issuer-vault">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="issuer-note" value="✓ s17 그림은 ACME (Let's Encrypt) 사례 · 내부망/mTLS 면 CA 또는 Vault 가 일반적" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="525" width="720" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-challenge" value="④ Challenge 타입 — HTTP-01 vs DNS-01 (wildcard 차이)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="590" width="740" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-http-title" value="HTTP-01 (s17 그림의 방식)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="624" width="340" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-http-cm" value="cert-manager" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;strokeWidth=1;fontSize=10;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="654" width="90" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-http-ep" value=".well-known/
acme-challenge/<token>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#B45309;strokeWidth=1;fontSize=9;fontStyle=1;fontFamily=monospace;fontColor=#7C2D12;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="170" y="654" width="140" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-http-acme" value="ACME 서버
HTTP GET" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;strokeWidth=1;fontSize=10;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="330" y="654" width="70" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-http-1" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ch-http-cm" target="ch-http-ep">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-http-2" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ch-http-acme" target="ch-http-ep">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-http-note" value="✓ 외부 80/tcp 접근 필요 · ✗ wildcard 불가 (a.com 만) · ✓ 즉시 검증" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="704" width="340" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-http-use" value="용도: 일반 단일 도메인" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="724" width="340" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-divider" value="" style="endArrow=none;html=1;strokeColor=#B45309;strokeWidth=1;dashed=1;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="420" y="624" as="sourcePoint" />
|
||||
<mxPoint x="420" y="780" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-dns-title" value="DNS-01 (wildcard 필요 시)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="624" width="340" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-dns-cm" value="cert-manager" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;strokeWidth=1;fontSize=10;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="654" width="90" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-dns-api" value="DNS API
TXT record" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#B45309;strokeWidth=1;fontSize=10;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="654" width="120" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-dns-acme" value="ACME 서버
DNS query" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;strokeWidth=1;fontSize=10;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="654" width="80" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-dns-1" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ch-dns-cm" target="ch-dns-api">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-dns-2" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ch-dns-acme" target="ch-dns-api">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-dns-note" value="✓ DNS API 권한 필요 (Route53/CloudDNS 등) · ✓ wildcard *.example.com 가능" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="704" width="340" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-dns-use" value="용도: wildcard, 사설망 (80/tcp 노출 X)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="724" width="340" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-failure" value="⑤ 실패 처리 — status.conditions + 지수 백오프 재시도" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="800" y="590" width="760" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="state-pending" value="Pending" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="830" y="650" width="120" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="state-issuing" value="Issuing" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FECACA;strokeColor=#B91C1C;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="650" width="120" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="state-ready" value="Ready ✓" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=3;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1190" y="620" width="130" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="state-failed" value="Failed ✗" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FCA5A5;strokeColor=#7F1D1D;strokeWidth=3;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1190" y="690" width="130" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="e-pending-issuing" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="state-pending" target="state-issuing">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-issuing-ready" style="endArrow=classic;html=1;strokeColor=#15803D;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.3;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="state-issuing" target="state-ready">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-issuing-failed" style="endArrow=classic;html=1;strokeColor=#7F1D1D;strokeWidth=2;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.7;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="state-issuing" target="state-failed">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="e-failed-pending" style="endArrow=classic;html=1;strokeColor=#7F1D1D;strokeWidth=2;dashed=1;fontFamily=Pretendard,Helvetica;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="state-failed" target="state-pending">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="1255" y="760" />
|
||||
<mxPoint x="890" y="760" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="retry-lbl" value="지수 백오프 후 재시도 (1m → 2m → 4m → ... max ~30m)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="950" y="752" width="350" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="failure-note" value="status.conditions: Ready · Issuing · Failed
디버깅: kubectl describe certificate <name> + kubectl describe certificaterequest" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="640" width="220" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="cert-manager 의 변형들 — 진입 모드 / CR 추상화 / Issuer 4 종류 / Challenge 2 타입 / 실패 처리. s17 (정상 발급) 과 함께 보면 cert-manager 전체 그림" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,228 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s18-asymmetric-vs-symmetric" id="asym-sym">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="TLS 암호화의 경계 — 비대칭 (ECDSA, 신원 확인) vs 대칭 (AES, 데이터 암호화)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="yaml 의 ECDSA = 핸드셰이크 1 회 (서버가 cert 주인임을 증명) · AES = 그 이후 모든 application data" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-asym" value="① 핸드셰이크 단계 — 비대칭 암호 (ECDSA · 단 1 회, 신원 증명 + 키 교환)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F3E8FF;strokeColor=#5B21B6;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1100" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="browser" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="170" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser-lbl" value="Browser" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="234" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser-sub" value="(검증자)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="254" width="140" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="server-icon" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.server_2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="170" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="server-lbl" value="Server (cert 소유)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="950" y="234" width="180" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cert-badge" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="258" width="200" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cert-badge-title" value="X.509 인증서" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="258" width="200" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cert-badge-pub" value="공개키: ECDSA P-256" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontFamily=monospace;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="278" width="200" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cert-badge-yaml" value="(← 본 yaml 이 정의)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C3AED;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="296" width="200" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="msg1-arrow" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="180" y="345" as="sourcePoint" />
|
||||
<mxPoint x="940" y="345" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="msg1-num" value="①" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="333" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="msg1-lbl" value="ClientHello (지원하는 cipher suites 제안)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="290" y="324" width="380" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="msg2-arrow" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="940" y="375" as="sourcePoint" />
|
||||
<mxPoint x="180" y="375" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="msg2-num" value="②" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="363" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="msg2-lbl" value="ServerHello + Certificate (X.509, ECDSA 공개키 포함)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="354" width="500" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="msg3-arrow" style="endArrow=classic;html=1;strokeColor=#B91C1C;strokeWidth=4;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="940" y="403" as="sourcePoint" />
|
||||
<mxPoint x="180" y="403" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="msg3-num" value="③" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B91C1C;fontColor=#B91C1C;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=3;" vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="391" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="msg3-lbl" value="ServerKeyExchange (ECDHE 매개변수 + ECDSA 개인키로 서명) ★" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#B91C1C;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="382" width="600" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="msg3-callout" value="★ ECDSA 사용 지점 — 서버가 yaml 의 ECDSA 개인키로 ECDHE 값을 서명 (= '나는 이 cert 의 진짜 주인'을 증명)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=1;dashed=1;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="408" width="730" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="msg4-arrow" style="endArrow=classic;html=1;strokeColor=#5B21B6;strokeWidth=3;fontFamily=Pretendard,Helvetica;" edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="180" y="438" as="sourcePoint" />
|
||||
<mxPoint x="940" y="438" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="msg4-num" value="④" style="ellipse;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;fontColor=#5B21B6;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="426" width="24" height="24" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="msg4-lbl" value="Verify cert chain (CA 공개키) + ClientKeyExchange (ECDHE 매개변수)" style="text;html=1;align=center;verticalAlign=middle;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;fillColor=#FFFFFF;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="240" y="417" width="640" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-asym-side" value="비대칭 (ECDSA / RSA) 의 역할" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1160" y="120" width="400" height="320" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="asym-side-1-title" value="① 무엇을 하나" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="155" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="asym-side-1-body" value="• 신원 증명: 서버가 진짜 cert 주인임을 증명
• 키 교환: ECDHE 로 비밀 공유 (도청 불가)
• 무결성: 핸드셰이크 메시지 서명/검증" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="178" width="380" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="asym-side-2-title" value="② yaml 매핑" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="244" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="asym-side-2-yaml" value="privateKey:
 algorithm: ECDSA
 size: 256
 rotationPolicy: Always" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#1E1E1E;strokeColor=#5B21B6;strokeWidth=1;fontSize=10;fontFamily=monospace;fontColor=#A5F3FC;align=left;verticalAlign=top;spacingLeft=14;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1180" y="268" width="220" height="76" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="asym-side-2-arrow" value="→ 이 키 = Phase 1 의
 서버 cert 키만 정의
→ Phase 2 (AES) 와 무관" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1410" y="268" width="150" height="76" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="asym-side-3-title" value="③ 특징" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="354" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="asym-side-3-body" value="• 공개키 / 개인키 쌍 (서로 다른 키)
• 연산 비쌈 (ms 단위) → 핸드셰이크 1회만
• cert 갱신 시 ECDSA 키 교체" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="377" width="380" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-boundary" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="460" width="1520" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="boundary-title" value="② 비대칭 → 대칭 전환점 — Key Derivation (HKDF)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="460" width="1520" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ecdh-secret" value="ECDH
shared secret
(양쪽 동일)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="495" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hkdf" value="HKDF" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FED7AA;strokeColor=#B45309;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="495" width="160" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="aes-key" value="AES 256-bit 키
+ IV
+ MAC keys" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="780" y="495" width="180" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="boundary-arrow1" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ecdh-secret" target="hkdf">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="boundary-arrow2" style="endArrow=classic;html=1;strokeColor=#B45309;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="hkdf" target="aes-key">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="boundary-conclusion" value="여기서 비대칭 단계 종료 → 이후 모든 데이터는 AES 키로 대칭 암호화
⚠ AES 키는 yaml 의 ECDSA 와 무관 — 핸드셰이크 결과로 매번 새로 도출됨 (forward secrecy)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=1;dashed=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="990" y="495" width="560" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-sym" value="③ 데이터 전송 단계 — 대칭 암호 (AES 256 GCM · 모든 HTTPS 요청/응답, 지속)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ECFDF5;strokeColor=#15803D;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="600" width="1100" height="190" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="browser-2" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="650" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser-2-lbl" value="Browser" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="714" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="browser-2-key" value="🔑 같은 AES 키 보유" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#15803D;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="734" width="140" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="server-2" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.server_2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1010" y="650" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="server-2-lbl" value="Server" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="714" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="server-2-key" value="🔑 같은 AES 키 보유" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#15803D;" vertex="1" parent="1">
|
||||
<mxGeometry x="970" y="734" width="140" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="aes-tunnel-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#BBF7D0;strokeColor=#15803D;strokeWidth=3;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="650" width="780" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aes-tunnel-title" value="◀ ━━━━━ AES-256-GCM 암호화 채널 (모든 HTTPS 트래픽) ━━━━━ ▶" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="650" width="780" height="28" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aes-tunnel-sample" value="GET /api/v1/users → 암호화 → … → 복호화 → 처리 → 응답 → 암호화 → …" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#14532D;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="678" width="780" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="sym-callout" value="⚠ 여기서 ECDSA 안 씀! AES 만 사용 · 연산 빠름 (μs 단위) → 모든 트래픽 처리 가능" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=1;dashed=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="755" width="1020" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-sym-side" value="대칭 (AES) 의 역할" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="1160" y="600" width="400" height="190" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="sym-side-1-title" value="① 무엇을 하나" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="635" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sym-side-1-body" value="• 모든 application data 암호화 (요청/응답)
• 같은 키로 양쪽이 암/복호화 (대칭)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="658" width="380" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="sym-side-2-title" value="② AES 키 출처" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="700" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="sym-side-2-body" value="• ECDH shared secret + HKDF 도출
• yaml 의 ECDSA 와 무관 — 핸드셰이크 산출물
• 매 세션 새 키 (forward secrecy)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingLeft=18;" vertex="1" parent="1">
|
||||
<mxGeometry x="1170" y="723" width="380" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="cipher suite TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = ECDHE (키 교환) + ECDSA (서버 인증, yaml 의 키) + AES_256_GCM (데이터 암호화) + SHA384 (무결성)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,218 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s18b-cipher-suite-anatomy" id="cipher-suite">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="Cipher Suite 해부 — cipher 는 ECDSA 자체가 아님 (4 알고리즘 묶음 중 1 슬롯)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="cipher 협상 = 어느 묶음을 쓸지 결정하는 단계. 묶음 안에 키교환 · 인증(ECDSA) · 데이터암호화(AES) · 무결성(SHA) 슬롯 4 개가 따로 있음" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-name" value="① cipher suite 한 줄 — 4 슬롯의 합성어" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="seg-prefix" value="TLS_" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E5E7EB;strokeColor=#6B7280;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=monospace;fontColor=#374151;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="155" width="80" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="seg-kex" value="ECDHE_" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=3;fontSize=15;fontStyle=1;fontFamily=monospace;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="155" width="160" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="seg-auth" value="ECDSA_" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=3;fontSize=15;fontStyle=1;fontFamily=monospace;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="155" width="160" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="seg-with" value="WITH_" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E5E7EB;strokeColor=#6B7280;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=monospace;fontColor=#374151;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="155" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="seg-bulk" value="AES_256_GCM_" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=3;fontSize=15;fontStyle=1;fontFamily=monospace;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="580" y="155" width="280" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="seg-mac" value="SHA384" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=3;fontSize=15;fontStyle=1;fontFamily=monospace;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="860" y="155" width="160" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="seg-prefix-lbl" value="prefix" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#6B7280;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="208" width="80" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="seg-kex-lbl" value="키 교환 (Key Exchange)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="208" width="160" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="seg-auth-lbl" value="인증 / 서명 (Authentication)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="208" width="160" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="seg-with-lbl" value="연결자" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#6B7280;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="208" width="100" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="seg-bulk-lbl" value="데이터 암호화 (Bulk Cipher)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;" vertex="1" parent="1">
|
||||
<mxGeometry x="580" y="208" width="280" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="seg-mac-lbl" value="무결성 / 해시 (MAC)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;" vertex="1" parent="1">
|
||||
<mxGeometry x="860" y="208" width="160" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="name-note" value="cipher suite 한 줄 = 4 슬롯 (kex / auth / bulk / mac)
ECDSA 도 AES 도 cipher suite '한 부분' — 둘 다 cipher 의 일부일 뿐 cipher 자체 아님" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1060" y="155" width="480" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-slots" value="② 4 슬롯 상세 — 각 슬롯이 무엇을 하나" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="260" width="1520" height="280" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="slot-kex-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="300" width="360" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-kex-title" value="ECDHE — 키 교환" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="300" width="360" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-kex-role" value="역할:" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="332" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-kex-body" value="• 양쪽이 도청 없이 비밀(shared secret) 공유
• 매 세션 새 ephemeral 키 (forward secrecy)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="352" width="360" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-kex-when" value="언제: 핸드셰이크 (Phase 1)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="396" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-kex-options" value="옵션: ECDHE · DHE · RSA(레거시)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="416" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-kex-output" value="결과: ECDH shared secret
 → HKDF → AES 키 도출" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=1;dashed=1;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="450" width="320" height="56" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="slot-auth-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=3;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="300" width="360" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-auth-title" value="ECDSA — 인증 / 서명" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="300" width="360" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-auth-role" value="역할:" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="332" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-auth-body" value="• 서버가 cert 의 진짜 주인임을 증명
• cert 개인키로 ECDHE 매개변수 서명
• 클라이언트가 cert 공개키로 검증" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="352" width="360" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-auth-when" value="언제: 핸드셰이크 (Phase 1) — 단 1 회" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="416" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-auth-options" value="옵션: ECDSA · RSA · Ed25519" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="440" y="436" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-auth-yaml" value="★ yaml 매핑:
privateKey.algorithm: ECDSA → 이 슬롯" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;fontSize=10;fontStyle=1;fontFamily=monospace;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="460" y="464" width="320" height="42" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="slot-bulk-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="300" width="360" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-bulk-title" value="AES_256_GCM — 데이터 암호화" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="300" width="360" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-bulk-role" value="역할:" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="332" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-bulk-body" value="• 모든 application data 암호화/복호화
• 핸드셰이크에서 도출한 AES 키 사용
• 양쪽이 같은 키로 (대칭)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="352" width="360" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-bulk-when" value="언제: 핸드셰이크 이후 (Phase 2) — 지속" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="416" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-bulk-options" value="옵션: AES_256_GCM · AES_128_GCM · CHACHA20" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#14532D;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="436" width="360" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-bulk-detail" value="256 = 키 길이(bit) · GCM = mode (인증 암호)
μs 단위 연산 → 모든 트래픽 처리 가능" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=1;dashed=1;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="466" width="320" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="slot-mac-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="300" width="340" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-mac-title" value="SHA384 — 무결성 / 해시" style="text;html=1;align=center;verticalAlign=top;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingTop=10;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="300" width="340" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-mac-role" value="역할:" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="332" width="340" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-mac-body" value="• 메시지 변조 감지 (MAC)
• HKDF 의 PRF 함수 (키 도출)
• 핸드셰이크 메시지 해시(Finished)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="352" width="340" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-mac-when" value="언제: Phase 1 + Phase 2 모두 (지속)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="416" width="340" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-mac-options" value="옵션: SHA384 · SHA256 · POLY1305" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="1200" y="436" width="340" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="slot-mac-detail" value="GCM 같은 인증 암호 사용 시
MAC 역할 일부가 bulk cipher 안에 흡수됨" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B45309;strokeWidth=1;dashed=1;fontSize=10;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="1220" y="464" width="300" height="42" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-negotiation" value="③ cipher 협상 — 어느 묶음을 쓸지 결정만 하는 단계" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="560" width="1520" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-browser" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.user;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="620" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-browser-lbl" value="Browser" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="684" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-server" value="" style="sketch=0;outlineConnect=0;fillColor=#232F3E;strokeColor=#232F3E;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;aspect=fixed;shape=mxgraph.aws4.server_2;" vertex="1" parent="1">
|
||||
<mxGeometry x="1380" y="620" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-server-lbl" value="Server" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontFamily=Pretendard,Helvetica;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="1340" y="684" width="140" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-msg1-arrow" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ch-browser" target="ch-server">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="760" y="640" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ch-msg1-lbl" value="ClientHello — 지원하는 cipher suites 목록 제시" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="610" width="500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-msg1-list" value="[ TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, ... ]" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#C2410C;strokeWidth=1;fontSize=10;fontFamily=monospace;fontColor=#7C2D12;align=left;verticalAlign=top;spacingLeft=14;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="640" width="540" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-msg2-arrow" style="endArrow=classic;html=1;strokeColor=#C2410C;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ch-server" target="ch-browser">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="780" y="660" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ch-msg2-lbl" value="ServerHello — 그 중 하나 선택해 응답" style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;fillColor=#FFFFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="624" width="500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ch-msg2-pick" value="선택: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FED7AA;strokeColor=#C2410C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=monospace;fontColor=#7C2D12;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="648" width="500" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="ch-conclusion" value="⚠ 이 협상 단계에서 ECDSA / AES 자체는 사용 안 됨 — 어느 묶음을 쓸지 '결정' 만 함.
 실제 ECDSA 서명 → 다음 메시지 (ServerKeyExchange, Phase 1) · 실제 AES 암호화 → 핸드셰이크 종료 후 (Phase 2)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFEDD5;strokeColor=#C2410C;strokeWidth=1;dashed=1;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="720" width="1480" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="cipher (광의) ≠ ECDSA · cipher suite = 4 슬롯 묶음 (kex/auth/bulk/mac) · cipher 협상 = 묶음 결정 단계 (알고리즘 사용 X) · ECDSA·AES 는 묶음 안 두 다른 슬롯" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,111 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s18c-cipher-vs-handshake" id="cipher-vs-handshake">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="cipher suite vs 핸드셰이크 — 다른 차원의 두 개념 (혼동 금지)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="cipher suite = 정적 설정 (4 슬롯 묶음, 명사) · 핸드셰이크 = 동적 절차 (N 메시지 교환, 동사)" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="warn-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;dashed=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="warn-icon" value="❌" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=24;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="135" width="40" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="warn-text" value="흔한 오해: '핸드셰이크 4 단계 = cipher suite'
사실: 두 개념은 다른 차원 — cipher suite (4 슬롯 묶음, 정적) vs 핸드셰이크 (N 메시지 절차, 동적)" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="110" y="125" width="1440" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-cipher" value="① cipher suite — 정적 설정 (명사)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="210" width="740" height="490" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cipher-name" value="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;fontSize=12;fontStyle=1;fontFamily=monospace;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="70" y="250" width="680" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cipher-slot1" value="kex
ECDHE" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="310" width="150" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cipher-slot2" value="auth
ECDSA" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="245" y="310" width="150" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cipher-slot3" value="bulk cipher
AES_256_GCM" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="310" width="170" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cipher-slot4" value="MAC
SHA384" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="595" y="310" width="155" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cipher-key" value="★ '4' = 슬롯 4 개 (역할) · 단계 수 아님" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=1;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="390" width="670" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cipher-anal-title" value="비유 — 4 코스 메뉴" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="436" width="670" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cipher-menu" value="에피타이저: 샐러드 ← kex 슬롯
메인: 스테이크 ← auth 슬롯
디저트: 케이크 ← bulk 슬롯
음료: 와인 ← MAC 슬롯" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=1;fontSize=11;fontFamily=monospace;fontColor=#3B0764;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="462" width="670" height="98" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="cipher-traits" value="✓ 정적 — 협상 결과로 결정되면 그 세션 내내 고정
✓ 명사 — '메뉴' 처럼 이름 그대로의 설정 묶음
✓ 슬롯에 들어갈 알고리즘은 옵션 (예: auth 슬롯 = ECDSA / RSA / Ed25519)
✓ 한 줄 이름이 곧 'menu order' — 4 알고리즘 동시 지정" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="580" width="700" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-handshake" value="② 핸드셰이크 — 동적 절차 (동사)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=2;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="210" width="740" height="490" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hs-12-title" value="TLS 1.2 핸드셰이크 ≈ 7 메시지" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="248" width="700" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hs-12-flow" value="1. ClientHello
2. ServerHello + Certificate
3. ServerKeyExchange + ServerHelloDone
4. ClientKeyExchange
5. ChangeCipherSpec + Finished (client)
6. ChangeCipherSpec + Finished (server)
7. (Application Data 시작)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=11;fontFamily=monospace;fontColor=#1E3A8A;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="274" width="700" height="138" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hs-13-title" value="TLS 1.3 핸드셰이크 ≈ 3 메시지" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="424" width="700" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hs-13-flow" value="1. ClientHello (key share 포함)
2. ServerHello + EncryptedExtensions + Certificate
 + CertificateVerify + Finished
3. Finished (client)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=2;fontSize=11;fontFamily=monospace;fontColor=#1E3A8A;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="450" width="700" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hs-key" value="★ 단계 수는 TLS 버전마다 다름 (4 가 고정값 아님)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=1;dashed=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="544" width="700" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hs-anal-title" value="비유 — 식당 가서 먹는 절차" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="586" width="700" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hs-restaurant" value="입장 → 주문 → 조리 → 서빙 → 먹기 → 계산 → 퇴장
(여기서 '주문' 단계에 메뉴 = cipher suite 가 협상됨)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#1E40AF;strokeWidth=1;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;align=left;verticalAlign=top;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="840" y="612" width="700" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hs-traits" value="✓ 동적 — 시간순으로 메시지를 주고받는 절차 (동사)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#1E3A8A;spacingLeft=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="675" width="720" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-meet" value="③ 두 개념의 만남 — 핸드셰이크 안에서 cipher suite 가 협상된다" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="720" width="1520" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="meet-text" value="• 핸드셰이크 1 단계 (ClientHello/ServerHello) → cipher suite 를 '협상' (어느 묶음 쓸지 선택)
• 핸드셰이크 후속 단계 → cipher suite 의 kex 슬롯 (ECDHE) + auth 슬롯 (ECDSA) 알고리즘이 사용됨
• 핸드셰이크 종료 후 (Phase 2) → cipher suite 의 bulk 슬롯 (AES) + MAC 슬롯 (SHA) 가 데이터 암호화에 사용됨" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;spacingLeft=20;spacingTop=4;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="745" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="cipher suite (4 슬롯 묶음, 명사) ≠ 핸드셰이크 (N 메시지 절차, 동사) · '핸드셰이크 4 단계 = cipher suite' 는 잘못된 매핑" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,237 @@
|
||||
<mxfile host="app.diagrams.net" modified="2026-05-10T00:00:00.000Z" agent="Mozilla/5.0" version="24.0.0" type="device">
|
||||
<diagram name="s18d-algorithm-usage-location" id="alg-usage">
|
||||
<mxGraphModel dx="1600" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="900" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<mxCell id="title" value="TLSOption → cipher suite 협상 → 알고리즘 실제 사용 위치" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=24;fontStyle=1;fontFamily=Pretendard,Helvetica;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="36" width="1500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="subtitle" value="ClientHello / ServerHello = cipher suite '이름' 협상만 (algorithm 사용 X) · 실제 ECDSA · AES 사용은 후속 메시지부터" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=15;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="76" width="1500" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-flow" value="① 설정 → 협상 → 선택 흐름" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="120" width="1520" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tlsopt-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FB923C;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="155" width="380" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tlsopt-title" value="TLSOption (정책 / 화이트리스트)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#C2410C;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="155" width="380" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tlsopt-body" value="cipherSuites: [...]
minVersion: VersionTLS12
sniStrict: true" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#7C2D12;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="180" width="380" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="negot-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B21B6;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="155" width="420" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="negot-title" value="cipher suite 협상 (handshake 메시지 1, 2)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="155" width="420" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="negot-body" value="ClientHello (cipher suites 목록 제시)
ServerHello (그 중 하나 선택)
★ '이름' 만 교환 — algorithm 실행 0" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=Pretendard,Helvetica;fontColor=#3B0764;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="180" width="420" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="selected-bg" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#15803D;strokeWidth=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="155" width="560" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="selected-title" value="선택된 cipher suite (이후 핸드셰이크 + 데이터 단계 사용)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;spacingLeft=14;spacingTop=8;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="155" width="560" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="selected-body" value="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
→ kex: ECDHE · auth: ECDSA · bulk: AES_256_GCM · mac: SHA384" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;fontSize=11;fontFamily=monospace;fontColor=#14532D;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="980" y="180" width="560" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="flow-arrow1" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="tlsopt-bg" target="negot-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="flow-arrow1-lbl" value="허용 목록" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;fillColor=#F6F8FA;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="442" y="186" width="60" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="flow-arrow2" style="endArrow=classic;html=1;strokeColor=#57606A;strokeWidth=3;fontFamily=Pretendard,Helvetica;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="negot-bg" target="selected-bg">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="flow-arrow2-lbl" value="결정" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;fillColor=#F6F8FA;fontStyle=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="924" y="186" width="50" height="18" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="grp-matrix" value="② TLS 1.2 핸드셰이크 — 메시지별 algorithm 실제 사용 매트릭스" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=13;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=top;spacingLeft=10;spacingTop=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="260" width="1520" height="490" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="hdr-msg" value="메시지" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="300" width="200" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hdr-content" value="메시지 내용 (요약)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="300" width="500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hdr-kex" value="kex (ECDHE)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DBEAFE;strokeColor=#1E40AF;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#1E40AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="300" width="180" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hdr-auth" value="auth (ECDSA)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#EDE9FE;strokeColor=#5B21B6;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#5B21B6;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="300" width="180" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hdr-bulk" value="bulk (AES)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#15803D;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="300" width="180" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="hdr-mac" value="mac (SHA)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEF3C7;strokeColor=#B45309;strokeWidth=1;fontSize=12;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#B45309;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="300" width="180" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r1-msg" value="① ClientHello" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="340" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r1-content" value="cipher_suites: [TLS_ECDHE_ECDSA_..., ...] (지원 목록)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=10;fontFamily=monospace;fontColor=#57606A;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="340" width="500" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r1-kex" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="340" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r1-auth" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="340" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r1-bulk" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="340" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r1-mac" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="340" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r2-msg" value="② ServerHello" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="390" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r2-content" value="cipher_suite: TLS_ECDHE_ECDSA_AES_256_GCM_SHA384 (선택)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=10;fontFamily=monospace;fontColor=#57606A;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="390" width="500" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r2-kex" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="390" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r2-auth" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="390" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r2-bulk" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="390" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r2-mac" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="390" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r3-msg" value="③ Certificate" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="440" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r3-content" value="X.509 cert (ECDSA 공개키 포함) ← 데이터 전달, algorithm 실행 X" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="440" width="500" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r3-kex" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="440" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r3-auth" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="440" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r3-bulk" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="440" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r3-mac" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="440" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r4-msg" value="④ ServerKeyExchange ★" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="490" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r4-content" value="ECDHE 매개변수 (서버 공개키) + ECDSA 개인키로 서명 ★" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="490" width="500" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r4-kex" value="✓" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1E40AF;strokeColor=#1E40AF;strokeWidth=2;fontSize=18;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="490" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r4-auth" value="✓ ★" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#5B21B6;strokeColor=#5B21B6;strokeWidth=2;fontSize=18;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="490" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r4-bulk" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="490" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r4-mac" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="490" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r5-msg" value="⑤ ClientKeyExchange" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="540" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r5-content" value="ECDHE 매개변수 (클라이언트 공개키) + cert verify (CA chain)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#57606A;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="540" width="500" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r5-kex" value="✓" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#1E40AF;strokeColor=#1E40AF;strokeWidth=1;fontSize=18;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="540" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r5-auth" value="✓" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#5B21B6;strokeColor=#5B21B6;strokeWidth=1;fontSize=18;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="540" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r5-bulk" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="540" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r5-mac" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="540" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r6-msg" value="⑥ ChangeCipherSpec + Finished ★" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="590" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r6-content" value="첫 AES 암호화 시작 + HMAC-SHA384 무결성 검증 ★" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#7F1D1D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="590" width="500" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r6-kex" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="590" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r6-auth" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#FEE2E2;strokeColor=#B91C1C;strokeWidth=2;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="590" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r6-bulk" value="✓ ★" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#15803D;strokeColor=#15803D;strokeWidth=2;fontSize=18;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="590" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r6-mac" value="✓" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#B45309;strokeColor=#B45309;strokeWidth=1;fontSize=18;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="590" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="r7-msg" value="⑦ Application Data (Phase 2)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="640" width="200" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r7-content" value="모든 HTTPS 요청·응답 → AES-256-GCM 암호화 + SHA HMAC (지속)" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=2;fontSize=10;fontFamily=Pretendard,Helvetica;fontColor=#14532D;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1">
|
||||
<mxGeometry x="260" y="640" width="500" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r7-kex" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="760" y="640" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r7-auth" value="—" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DCFCE7;strokeColor=#15803D;strokeWidth=1;fontSize=14;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#9CA3AF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="940" y="640" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r7-bulk" value="✓ 지속" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#15803D;strokeColor=#15803D;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1120" y="640" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="r7-mac" value="✓ 지속" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#B45309;strokeColor=#B45309;strokeWidth=2;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#FFFFFF;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="1300" y="640" width="180" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="matrix-summary" value="요점: ① ~ ③ = cipher suite '이름' 협상 + cert 전달 (algorithm 사용 0) · ④ = ECDSA 첫 사용 ★ · ⑥ = AES 첫 사용 ★ · ⑦ = AES 지속 (Phase 2)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF7ED;strokeColor=#FB923C;strokeWidth=1;dashed=1;fontSize=11;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#7C2D12;align=center;verticalAlign=middle;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="705" width="1480" height="32" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tls13-note" value="TLS 1.3 (3 메시지) 의 경우: ECDSA 사용 = ② ServerHello 안의 CertificateVerify · AES 사용 = ② 안의 EncryptedExtensions 부터 (즉, ServerHello 직후 곧바로 AES)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=11;fontStyle=2;fontFamily=Pretendard,Helvetica;fontColor=#57606A;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="755" width="1480" height="22" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="caption-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F6F8FA;strokeColor=#D0D7DE;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="caption" value="ClientHello / ServerHello = cipher suite 이름 협상만 (algorithm 사용 0) · 실제 algorithm 사용 = ④ ServerKeyExchange (ECDSA), ⑥ Finished (AES) 부터" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontStyle=1;fontFamily=Pretendard,Helvetica;fontColor=#24292F;" vertex="1" parent="1">
|
||||
<mxGeometry x="40" y="800" width="1520" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
Reference in New Issue
Block a user