Files
project-infra/presentation/diagrams/01-overall.drawio
T

205 lines
18 KiB
Plaintext

<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="사용자&#xa;브라우저" 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="운영자&#xa;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&#xa;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&#xa;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&#xa;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&#xa;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&#xa;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&#xa;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&#xa;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&#xa;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&#xa;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>