<mxfile host="app.diagrams.net">
  <diagram name="01 플랫폼 구성 · 제안" id="p0">
    <mxGraphModel adaptiveColors="auto" page="1" pageWidth="1500" pageHeight="1050">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="title" value="멀티 클라우드 서비스 이전 플랫폼&lt;br&gt;설계 초안 · 2026-10-31 · 실제 배포 구성 아님" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="20" width="1320" height="75" />
        </mxCell>
        <mxCell id="input" value="원본 클라우드 + 서비스 소스&lt;br&gt;AWS / Azure / GCP" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="40" y="140" width="240" height="90" />
        </mxCell>
        <mxCell id="collect" value="구성 Export · API 수집&lt;br&gt;코드·환경·의존성 분석" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="340" y="140" width="240" height="90" />
        </mxCell>
        <mxCell id="model" value="공통 리소스·의존성 모델&lt;br&gt;기능 / 버전 / 데이터 / 권한" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="640" y="140" width="240" height="90" />
        </mxCell>
        <mxCell id="catalog" value="대상 클라우드 기능 카탈로그&lt;br&gt;공식 근거·지원 조건" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="940" y="140" width="240" height="90" />
        </mxCell>
        <mxCell id="map" value="호환성 판정 · 이전 계획&lt;br&gt;누락·불명확 항목 표시" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="640" y="280" width="240" height="90" />
        </mxCell>
        <mxCell id="direct" value="기능 대응 가능&lt;br&gt;IaC·설정 변환" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e6f4ea;strokeColor=#34a853;spacing=10;">
          <mxGeometry as="geometry" x="40" y="430" width="240" height="90" />
        </mxCell>
        <mxCell id="adapt" value="대체 서비스 존재&lt;br&gt;AI 스킬·에이전트 코드 적응" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1eafb;strokeColor=#9865cc;spacing=10;">
          <mxGeometry as="geometry" x="340" y="430" width="240" height="90" />
        </mxCell>
        <mxCell id="self" value="자체 호스팅 가능&lt;br&gt;운영 부담·복구 책임 검토" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#fff3df;strokeColor=#e5a02b;spacing=10;">
          <mxGeometry as="geometry" x="640" y="430" width="240" height="90" />
        </mxCell>
        <mxCell id="human" value="대체 불가 / 의미 불명확&lt;br&gt;사용자와 유지·변경·차단 결정" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#fff3df;strokeColor=#e5a02b;spacing=10;">
          <mxGeometry as="geometry" x="940" y="430" width="240" height="90" />
        </mxCell>
        <mxCell id="test" value="격리 샌드박스 검증&lt;br&gt;빌드·계약·통합·멱등성 검사" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1eafb;strokeColor=#9865cc;spacing=10;">
          <mxGeometry as="geometry" x="340" y="580" width="240" height="90" />
        </mxCell>
        <mxCell id="plan" value="검증된 변경·이전 계획&lt;br&gt;미해결 필수 조건이면 차단" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e6f4ea;strokeColor=#34a853;spacing=10;">
          <mxGeometry as="geometry" x="640" y="580" width="240" height="90" />
        </mxCell>
        <mxCell id="executor" value="이전 실행 제어기&lt;br&gt;상태 저장·재시도·감사 기록" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e6f4ea;strokeColor=#34a853;spacing=10;">
          <mxGeometry as="geometry" x="640" y="730" width="240" height="90" />
        </mxCell>
        <mxCell id="infra" value="대상 앱·인프라 배포&lt;br&gt;두 환경 동시 실행·헬스 검사" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="40" y="870" width="240" height="90" />
        </mxCell>
        <mxCell id="data" value="DB별 이전 어댑터&lt;br&gt;초기 복사·CDC·최종 적용 확인" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="440" y="870" width="240" height="90" />
        </mxCell>
        <mxCell id="switch" value="트래픽·DB 전환 제어&lt;br&gt;단일 쓰기 대상·연결 풀 전환" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="840" y="870" width="240" height="90" />
        </mxCell>
        <mxCell id="e18" source="input" target="collect" value="읽기" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e19" source="collect" target="model" value="정규화" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e20" source="model" target="map" value="분석" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e21" source="catalog" target="map" value="조건 비교" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e22" source="map" target="direct" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e23" source="map" target="adapt" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e24" source="map" target="self" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e25" source="map" target="human" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e26" source="adapt" target="test" value="수정" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e27" source="direct" target="plan" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e28" source="test" target="plan" value="통과" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e29" source="self" target="plan" value="방식 확정" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e30" source="human" target="plan" value="결정 반영" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e31" source="plan" target="executor" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e32" source="executor" target="infra" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e33" source="executor" target="data" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="e34" source="executor" target="switch" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="note" value="실선 = 처리·제어 흐름  |  AI는 변경안 생성·검증을 수행하고, DB 전환은 명시적 조건으로 실행&lt;br&gt;합의 목표: 요청 대기 허용 / 전환에 따른 요청 실패·데이터 유실·중복 처리 0" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="1010" width="1320" height="75" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram name="02 DB와 트래픽 전환 · 상태별" id="p1">
    <mxGraphModel adaptiveColors="auto" page="1" pageWidth="1500" pageHeight="1050">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="t" value="무중단 전환 설계 · 상태별 쓰기 대상&lt;br&gt;앱 동시 실행 ≠ DB 동시 쓰기 · 단일 writer 유지" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="20" width="1320" height="80" />
        </mxCell>
        <mxCell id="Ah" value="A · 준비·동기화" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="160" width="200" height="105" />
        </mxCell>
        <mxCell id="Aa" value="원본 앱 → 원본 DB" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="280" y="160" width="260" height="105" />
        </mxCell>
        <mxCell id="Ab" value="대상 앱: 격리 테스트" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e6f4ea;strokeColor=#34a853;spacing=10;">
          <mxGeometry as="geometry" x="580" y="160" width="260" height="105" />
        </mxCell>
        <mxCell id="Ad" value="원본 DB → 대상 DB&lt;br&gt;초기 복사 + CDC" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1eafb;strokeColor=#9865cc;spacing=10;">
          <mxGeometry as="geometry" x="880" y="160" width="440" height="105" />
        </mxCell>
        <mxCell id="An" value="대상 복제 DB에 테스트 쓰기 금지" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="280" y="280" width="1040" height="50" />
        </mxCell>
        <mxCell id="Bh" value="B · 앱 트래픽 이전" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="370" width="200" height="105" />
        </mxCell>
        <mxCell id="Ba" value="원본 앱 → 원본 DB" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="280" y="370" width="260" height="105" />
        </mxCell>
        <mxCell id="Bb" value="대상 앱 → 원본 DB" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e6f4ea;strokeColor=#34a853;spacing=10;">
          <mxGeometry as="geometry" x="580" y="370" width="260" height="105" />
        </mxCell>
        <mxCell id="Bd" value="원본 DB → 대상 DB&lt;br&gt;CDC 지속" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1eafb;strokeColor=#9865cc;spacing=10;">
          <mxGeometry as="geometry" x="880" y="370" width="440" height="105" />
        </mxCell>
        <mxCell id="Bn" value="양쪽 앱이 동일 DB 사용 · 네트워크/지연 검증" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="280" y="490" width="1040" height="50" />
        </mxCell>
        <mxCell id="e13" source="Ah" target="Bh" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="Ch" value="C · DB 전환 구간" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="580" width="200" height="105" />
        </mxCell>
        <mxCell id="Ca" value="신규 쓰기 대기&lt;br&gt;기존 트랜잭션 완료" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="280" y="580" width="260" height="105" />
        </mxCell>
        <mxCell id="Cb" value="대기 요청·멱등성 보장&lt;br&gt;타임아웃 내 완료 필요" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e6f4ea;strokeColor=#34a853;spacing=10;">
          <mxGeometry as="geometry" x="580" y="580" width="260" height="105" />
        </mxCell>
        <mxCell id="Cd" value="원본 쓰기 차단 → 최종 적용 확인&lt;br&gt;대상 승격 → 연결 풀 전환" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#fff3df;strokeColor=#e5a02b;spacing=10;">
          <mxGeometry as="geometry" x="880" y="580" width="440" height="105" />
        </mxCell>
        <mxCell id="Cn" value="조건 미충족이면 전환 중단 · 두 DB 동시 쓰기 금지" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="280" y="700" width="1040" height="50" />
        </mxCell>
        <mxCell id="e19" source="Bh" target="Ch" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="Dh" value="D · 전환 완료" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="790" width="200" height="105" />
        </mxCell>
        <mxCell id="Da" value="원본 앱 유지 시 새 DB 사용" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e8f0fe;strokeColor=#4285f4;spacing=10;">
          <mxGeometry as="geometry" x="280" y="790" width="260" height="105" />
        </mxCell>
        <mxCell id="Db" value="대상 앱 → 대상 DB" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#e6f4ea;strokeColor=#34a853;spacing=10;">
          <mxGeometry as="geometry" x="580" y="790" width="260" height="105" />
        </mxCell>
        <mxCell id="Dd" value="대상 DB만 쓰기 허용&lt;br&gt;원본 DB 쓰기 차단 유지" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1eafb;strokeColor=#9865cc;spacing=10;">
          <mxGeometry as="geometry" x="880" y="790" width="440" height="105" />
        </mxCell>
        <mxCell id="Dn" value="새 쓰기 이후 DB 복귀는 역동기화 검증 시에만" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="280" y="910" width="1040" height="50" />
        </mxCell>
        <mxCell id="e25" source="Ch" target="Dh" value="" edge="1" parent="1" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;fontSize=13;labelBackgroundColor=#ffffff;endArrow=block;strokeColor=#64748b;">
          <mxGeometry as="geometry" relative="1" />
        </mxCell>
        <mxCell id="metric" value="검증: 성공 응답 쓰기 누락 0 / 동일 요청 중복 반영 0 / 전환 유발 요청 실패 0&lt;br&gt;추가 측정: 대기 시간·p95/p99 지연·CDC 적용 위치·진행 중 트랜잭션·전환 소요 시간" vertex="1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fontSize=16;fontFamily=Helvetica;fillColor=#f1f5f9;strokeColor=#64748b;spacing=10;">
          <mxGeometry as="geometry" x="40" y="1020" width="1280" height="80" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>