Files
vpd-permission-poc/docs/architecture/hmm-ai-data-access-architecture-security-flow.svg
2026-08-04 14:37:38 +09:00

1 line
91 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" style="background: #FFFFFF; background-color: light-dark(#FFFFFF, #121212); color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1840px" height="1090px" viewBox="0 0 1840 1090"><defs/><rect fill="#FFFFFF" width="100%" height="100%" x="0" y="0" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));"/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="hmm-security-flow_background"><g><rect x="19.7" y="19.45" width="1800" height="1050" fill="#ffffff" stroke="none" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));"/></g></g><g data-cell-id="hmm-security-flow_v_1"><g><rect x="55.7" y="41.45" width="1728" height="38" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1726px; height: 1px; padding-top: 60px; margin-left: 58px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 25px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">MCP Tool Discovery와 사용자별 VPD 실행 흐름</div></div></div></foreignObject><text x="58" y="68" fill="#312D2A" font-family="'Oracle Sans'" font-size="25px" font-weight="bold" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">MCP Tool Discovery와 사용자별 VPD 실행 흐름</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_2"><g><rect x="57.7" y="79.45" width="1724" height="28" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1722px; height: 1px; padding-top: 93px; margin-left: 60px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #5B5652; "><div style="display: inline-block; font-size: 12px; font-family: 'Oracle Sans'; color: light-dark(#5B5652, #a6a29e); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">광고 계약 검증은 시작 시 1회 · 사용자 인증과 Context 설정·SQL 실행·정리는 요청마다 같은 세션에서 수행</div></div></div></foreignObject><text x="60" y="97" fill="#5B5652" font-family="'Oracle Sans'" font-size="12px" style="fill: light-dark(rgb(91, 86, 82), rgb(166, 162, 158));">광고 계약 검증은 시작 시 1회 · 사용자 인증과 Context 설정·SQL 실행·정리는 요청마다 같은 세션에서 수행</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_3"><g transform="translate(0.5,0.5)"><rect x="55.7" y="111.45" width="1728" height="3" rx="0.24" ry="0.24" fill="#c74634" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g></g><g data-cell-id="hmm-security-flow_v_4"><g transform="translate(0.5,0.5)"><rect x="54.7" y="139.45" width="1730" height="185" rx="12.95" ry="12.95" fill="#fff7f2" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(255, 247, 242), rgb(30, 23, 19)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g></g><g data-cell-id="hmm-security-flow_v_5"><g><rect x="68.7" y="147.45" width="1702" height="26" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1700px; height: 1px; padding-top: 160px; margin-left: 71px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #AE562C; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#AE562C, #d38864); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>서버 시작 · Tool 광고 전 Fail-Closed Gate</b></div></div></div></foreignObject><text x="71" y="164" fill="#AE562C" font-family="'Oracle Sans'" font-size="13px" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));">서버 시작 · Tool 광고 전 Fail-Closed Gate</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_6"><g transform="translate(0.5,0.5)"><rect x="114.7" y="204.45" width="300" height="78" rx="6.24" ry="6.24" fill="#ffffff" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 252px; height: 1px; padding-top: 243px; margin-left: 147px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>BACKOFFICE_MCP_TOOLS</b><br />공개 이름 · 설명 · 입력 schema<br />AGENT_TOOL targetName</div></div></div></foreignObject><text x="147" y="234" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="147" y="234">BACKOFFICE_MCP_TOOLS</tspan><tspan x="147" y="247">공개 이름 · 설명 · 입력 schema</tspan><tspan x="147" y="260">AGENT_TOOL targetName</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_7"><g transform="translate(0.5,0.5)"><ellipse cx="117.7" cy="229.45" rx="15" ry="15" fill="#ae562c" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 229px; margin-left: 104px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">A</span></b></div></div></div></foreignObject><text x="118" y="233" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">A</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_8"><g transform="translate(0.5,0.5)"><rect x="529.7" y="204.45" width="330" height="78" rx="6.24" ry="6.24" fill="#ffffff" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 282px; height: 1px; padding-top: 243px; margin-left: 562px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>McpAgentToolStartupValidator</b><br />AGENT_TOOL targetName 중복 제거<br />SELECT_AI는 DB Tool 검증에서 제외</div></div></div></foreignObject><text x="562" y="234" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="562" y="234">McpAgentToolStartupValidator</tspan><tspan x="562" y="247">AGENT_TOOL targetName 중복 제거</tspan><tspan x="562" y="260">SELECT_AI는 DB Tool 검증에서 제외</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_9"><g transform="translate(0.5,0.5)"><ellipse cx="532.7" cy="229.45" rx="15" ry="15" fill="#ae562c" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 229px; margin-left: 519px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">B</span></b></div></div></div></foreignObject><text x="533" y="233" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">B</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_10"><g transform="translate(0.5,0.5)"><rect x="974.7" y="204.45" width="330" height="78" rx="6.24" ry="6.24" fill="#ffffff" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 282px; height: 1px; padding-top: 243px; margin-left: 1007px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>USER_AI_AGENT_TOOLS</b><br />Tool 존재 + STATUS=ENABLED 확인</div></div></div></foreignObject><text x="1007" y="240" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="1007" y="240">USER_AI_AGENT_TOOLS</tspan><tspan x="1007" y="253">Tool 존재 + STATUS=ENABLED 확인</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_11"><g transform="translate(0.5,0.5)"><ellipse cx="977.7" cy="229.45" rx="15" ry="15" fill="#ae562c" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 229px; margin-left: 964px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">C</span></b></div></div></div></foreignObject><text x="978" y="233" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">C</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_12"><g transform="translate(0.5,0.5)"><rect x="1419.7" y="204.45" width="285" height="78" rx="6.24" ry="6.24" fill="#ffffff" stroke="#2f6b4f" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 237px; height: 1px; padding-top: 243px; margin-left: 1452px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Endpoint Ready</b><br />모두 정상일 때만 tools/list 광고<br /><span style="color: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));">누락·비활성·조회 오류는 기동 실패</span></div></div></div></foreignObject><text x="1452" y="234" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="1452" y="234">Endpoint Ready</tspan><tspan x="1452" y="247">모두 정상일 때만 tools/list 광고</tspan><tspan x="1452" y="260">누락·비활성·조회 오류는 기동 실패</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_13"><g transform="translate(0.5,0.5)"><ellipse cx="1422.7" cy="229.45" rx="15" ry="15" fill="#2f6b4f" stroke="#2f6b4f" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 229px; margin-left: 1409px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">D</span></b></div></div></div></foreignObject><text x="1423" y="233" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">D</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_14"><g><path d="M 414.7 243.45 L 519.46 243.45" fill="none" stroke="#ae562c" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/><path d="M 527.46 243.45 L 519.46 247.45 L 519.46 239.45 Z" fill="#ae562c" stroke="#ae562c" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 243px; margin-left: 472px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">구성 로드</div></div></div></foreignObject><text x="472" y="247" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">구성 로드</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_15"><g><path d="M 859.7 243.45 L 964.46 243.45" fill="none" stroke="#ae562c" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/><path d="M 972.46 243.45 L 964.46 247.45 L 964.46 239.45 Z" fill="#ae562c" stroke="#ae562c" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 243px; margin-left: 917px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">시작 시 1회 조회</div></div></div></foreignObject><text x="917" y="247" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">시작 시 1회 조회</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_16"><g><path d="M 1304.7 243.45 L 1409.46 243.45" fill="none" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/><path d="M 1417.46 243.45 L 1409.46 247.45 L 1409.46 239.45 Z" fill="#2f6b4f" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 243px; margin-left: 1362px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">모두 ENABLED</div></div></div></foreignObject><text x="1362" y="247" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">모두 ENABLED</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_17"><g transform="translate(0.5,0.5)"><rect x="54.7" y="349.45" width="225" height="665" rx="15.75" ry="15.75" fill="#f9fafb" stroke="#9e9892" pointer-events="all" style="fill: light-dark(rgb(249, 250, 251), rgb(21, 22, 23)); stroke: light-dark(rgb(158, 152, 146), rgb(110, 105, 99));"/></g></g><g data-cell-id="hmm-security-flow_v_18"><g><rect x="68.7" y="357.45" width="197" height="26" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 195px; height: 1px; padding-top: 370px; margin-left: 71px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>MCP Client</b></div></div></div></foreignObject><text x="71" y="374" fill="#312D2A" font-family="'Oracle Sans'" font-size="13px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">MCP Client</text></switch></g></g></g><g data-cell-id="hmm-security-flow_oci_19"><g/><g data-cell-id="hmm-security-flow_ociPart_20"><g><rect x="114.7" y="404.45" width="76" height="84" fill="none" stroke="none" pointer-events="all"/></g><g data-cell-id="hmm-security-flow_ociPart_21"><g><path d="M 115.72 487.45 L 115.72 473.45 C 115.7 468.89 117.38 464.48 120.44 461.07 C 123.49 457.67 127.72 455.51 132.28 455.01 C 130.49 453.31 128.95 451.35 127.75 449.19 L 127.23 448.27 L 135.29 415.09 C 136.21 412.29 138 409.85 140.4 408.12 C 142.81 406.39 145.69 405.46 148.66 405.45 L 156.72 405.45 C 159.66 405.5 162.52 406.44 164.9 408.16 C 167.28 409.89 169.05 412.31 170 415.07 L 170.26 416.01 L 178.18 448.23 L 177.65 449.15 C 176.46 451.31 174.94 453.29 173.14 454.99 C 177.7 455.49 181.92 457.65 184.97 461.05 C 188.02 464.46 189.7 468.85 189.69 473.41 L 189.69 487.41 L 115.72 487.45 L 115.72 487.45" fill="#ffffff" stroke="none" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));"/></g></g><g data-cell-id="hmm-security-flow_ociPart_22"><g><path d="M 156.74 406.45 C 159.62 406.5 162.42 407.48 164.69 409.25 C 166.96 411.03 168.58 413.49 169.31 416.27 L 177.1 448.07 L 176.75 448.67 C 175.22 451.5 173.06 453.93 170.44 455.81 L 170.58 455.81 C 172.94 455.75 175.29 456.16 177.48 457.02 C 179.68 457.87 181.68 459.16 183.37 460.81 C 185.05 462.44 186.39 464.4 187.31 466.56 C 188.22 468.73 188.69 471.05 188.69 473.39 L 188.69 486.45 L 116.74 486.45 L 116.74 473.39 C 116.74 471.05 117.21 468.73 118.12 466.56 C 119.03 464.4 120.37 462.44 122.06 460.81 C 123.75 459.16 125.75 457.87 127.95 457.02 C 130.14 456.16 132.49 455.75 134.85 455.81 L 135.03 455.81 C 132.41 453.93 130.24 451.5 128.71 448.67 L 128.36 448.07 L 136.06 416.25 C 136.78 413.47 138.4 411.01 140.68 409.24 C 142.95 407.47 145.75 406.49 148.63 406.45 L 156.67 406.45 L 156.74 406.45 L 156.74 406.45 M 156.67 404.45 L 148.63 404.45 C 145.65 404.5 142.76 405.42 140.3 407.1 C 137.86 408.78 135.96 411.14 134.85 413.89 L 134.67 413.89 L 134.16 415.89 L 126.34 447.61 L 126.14 448.37 L 126.54 449.07 L 126.8 449.65 C 127.73 451.32 128.84 452.88 130.12 454.31 C 125.74 455.25 121.82 457.66 119.02 461.13 C 116.21 464.61 114.7 468.94 114.73 473.39 L 114.73 488.45 L 190.68 488.45 L 190.68 473.39 C 190.7 468.93 189.17 464.59 186.36 461.12 C 183.55 457.65 179.61 455.24 175.23 454.31 C 176.5 452.88 177.62 451.31 178.57 449.65 L 178.91 449.07 L 179.31 448.37 L 179.11 447.59 L 171.3 415.79 L 170.82 413.79 L 170.62 413.79 C 169.48 411.05 167.56 408.71 165.09 407.05 C 162.62 405.39 159.71 404.48 156.74 404.45 L 156.67 404.45 L 156.67 404.45" fill="#ffffff" stroke="none" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));"/></g></g><g data-cell-id="hmm-security-flow_ociPart_23"><g><path d="M 170.69 455.81 L 170.54 455.81 C 173.17 453.94 175.33 451.5 176.87 448.67 L 177.21 448.07 L 169.4 416.25 C 168.66 413.47 167.03 411 164.75 409.23 C 162.46 407.47 159.66 406.49 156.76 406.45 L 148.7 406.45 C 145.82 406.5 143.02 407.48 140.76 409.26 C 138.49 411.03 136.87 413.5 136.15 416.27 L 128.27 448.07 L 128.62 448.67 C 130.15 451.5 132.32 453.94 134.94 455.81 L 134.84 455.81 C 132.48 455.75 130.13 456.16 127.92 457.02 C 125.72 457.88 123.72 459.17 122.03 460.81 C 120.34 462.45 119 464.41 118.08 466.58 C 117.17 468.74 116.7 471.07 116.71 473.41 L 116.71 486.45 L 120.13 486.45 L 120.13 473.41 C 120.13 471.51 120.52 469.63 121.26 467.88 C 122.01 466.14 123.1 464.55 124.47 463.23 C 125.84 461.91 127.46 460.87 129.24 460.18 C 131.03 459.49 132.93 459.16 134.84 459.21 L 142.9 459.21 C 143.22 461.57 144.4 463.74 146.21 465.31 C 148.02 466.87 150.34 467.74 152.74 467.74 C 155.15 467.74 157.47 466.87 159.27 465.31 C 161.09 463.74 162.26 461.57 162.59 459.21 L 170.64 459.21 C 172.55 459.17 174.44 459.51 176.22 460.2 C 177.99 460.9 179.6 461.94 180.96 463.26 C 182.33 464.59 183.41 466.16 184.15 467.91 C 184.88 469.65 185.27 471.52 185.27 473.41 L 185.27 486.45 L 188.7 486.45 L 188.7 473.41 C 188.7 471.07 188.23 468.74 187.32 466.58 C 186.4 464.42 185.06 462.46 183.36 460.82 C 181.68 459.18 179.68 457.89 177.48 457.03 C 175.28 456.17 172.92 455.75 170.56 455.81 L 170.69 455.81 L 170.69 455.81 M 139.01 430.31 L 139.01 424.45 C 139.86 424.65 140.72 424.78 141.59 424.83 C 145.62 425.04 149.6 423.75 152.71 421.19 C 155.6 423.53 159.2 424.82 162.92 424.85 L 163.85 424.85 C 164.72 424.79 165.59 424.66 166.43 424.45 L 166.43 430.29 C 166.49 432.13 166.19 433.97 165.52 435.7 C 164.87 437.42 163.87 439 162.59 440.34 C 161.32 441.68 159.79 442.76 158.09 443.51 C 156.4 444.27 154.57 444.68 152.71 444.73 C 150.86 444.68 149.03 444.27 147.34 443.51 C 145.64 442.75 144.11 441.67 142.84 440.34 C 141.57 438.99 140.58 437.42 139.92 435.69 C 139.26 433.97 138.96 432.13 139.01 430.29 L 139.01 430.31 L 139.01 430.31 M 162.59 455.37 L 162.59 444.87 C 164.61 443.37 166.29 441.46 167.53 439.27 C 168.77 437.09 169.53 434.67 169.78 432.17 L 173.54 447.55 C 172.4 449.57 170.82 451.31 168.93 452.67 C 167.04 454.02 164.88 454.95 162.59 455.39 L 162.59 455.37 L 162.59 455.37 M 148.64 409.85 L 156.7 409.85 C 159.34 409.95 161.83 411.08 163.64 412.99 C 165.44 414.9 166.43 417.43 166.37 420.05 L 166.37 420.97 C 164.18 421.59 161.85 421.63 159.65 421.05 C 157.44 420.48 155.42 419.32 153.82 417.71 L 152.65 416.67 L 151.5 417.71 C 149.9 419.32 147.89 420.48 145.68 421.06 C 143.47 421.63 141.14 421.6 138.95 420.97 L 138.95 420.05 C 138.9 417.43 139.87 414.91 141.67 413 C 143.47 411.1 145.95 409.96 148.58 409.85 L 148.64 409.85 L 148.64 409.85 M 131.92 447.55 L 135.66 432.23 C 135.92 434.72 136.69 437.13 137.94 439.31 C 139.19 441.48 140.87 443.38 142.9 444.87 L 142.9 455.39 C 140.61 454.95 138.45 454.02 136.56 452.66 C 134.67 451.31 133.1 449.56 131.96 447.55 L 131.92 447.55 L 131.92 447.55 M 152.75 464.29 C 151.13 464.29 149.58 463.69 148.37 462.61 C 147.18 461.53 146.42 460.05 146.26 458.45 L 146.26 446.83 C 148.3 447.7 150.5 448.15 152.72 448.15 C 154.94 448.15 157.14 447.7 159.18 446.83 L 159.18 458.45 C 159.02 460.05 158.28 461.54 157.08 462.63 C 155.89 463.71 154.33 464.31 152.71 464.33" fill="#2c5967" stroke="none" pointer-events="all" style="fill: light-dark(rgb(44, 89, 103), rgb(137, 175, 187));"/></g></g></g></g><g data-cell-id="hmm-security-flow_v_24"><g transform="translate(0.5,0.5)"><rect x="89.7" y="519.45" width="160" height="100" rx="8" ry="8" fill="#ffffff" stroke="#2f6f8f" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 112px; height: 1px; padding-top: 569px; margin-left: 122px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Agent 요청</b><br />initialize<br />tools/list<br />tools/call</div></div></div></foreignObject><text x="122" y="553" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="122" y="553">Agent 요청</tspan><tspan x="122" y="566">initialize</tspan><tspan x="122" y="579">tools/list</tspan><tspan x="122" y="592">tools/call</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_25"><g transform="translate(0.5,0.5)"><ellipse cx="92.7" cy="544.45" rx="15" ry="15" fill="#2f6f8f" stroke="#2f6f8f" pointer-events="all" style="fill: light-dark(rgb(47, 111, 143), rgb(106, 161, 189)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 544px; margin-left: 79px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">1</span></b></div></div></div></foreignObject><text x="93" y="548" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">1</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_26"><g transform="translate(0.5,0.5)"><rect x="89.7" y="819.45" width="160" height="115" rx="9.2" ry="9.2" fill="#ffffff" stroke="#2f6b4f" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 112px; height: 1px; padding-top: 877px; margin-left: 122px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>필터링 결과</b><br />허용 행 + 근거만 반환<br />Token·내부 SQL은 미노출</div></div></div></foreignObject><text x="122" y="861" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="122" y="861">필터링 결과</tspan><tspan x="122" y="874">허용 행 + 근거만 반환</tspan><tspan x="122" y="887">Token·내부 SQL은</tspan><tspan x="122" y="900">미노출</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_27"><g transform="translate(0.5,0.5)"><ellipse cx="92.7" cy="844.45" rx="15" ry="15" fill="#2f6b4f" stroke="#2f6b4f" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 844px; margin-left: 79px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">10</span></b></div></div></div></foreignObject><text x="93" y="848" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">10</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_28"><g transform="translate(0.5,0.5)"><rect x="304.7" y="349.45" width="650" height="665" rx="45.5" ry="45.5" fill="#fcfbfa" stroke="#9e9892" pointer-events="all" style="fill: light-dark(rgb(252, 251, 250), rgb(22, 21, 20)); stroke: light-dark(rgb(158, 152, 146), rgb(110, 105, 99));"/></g></g><g data-cell-id="hmm-security-flow_v_29"><g><rect x="318.7" y="357.45" width="622" height="26" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 620px; height: 1px; padding-top: 370px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>VPD Backoffice · Spring Boot</b></div></div></div></foreignObject><text x="321" y="374" fill="#312D2A" font-family="'Oracle Sans'" font-size="13px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">VPD Backoffice · Spring Boot</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_30"><g transform="translate(0.5,0.5)"><rect x="349.7" y="419.45" width="250" height="110" rx="8.8" ry="8.8" fill="#ffffff" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 1px; padding-top: 474px; margin-left: 382px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Bearer 인증</b><br />Token SHA-256 hash<br />만료·회수·재직 상태 검증<br /><span style="color: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));">실패: HTTP 401</span></div></div></div></foreignObject><text x="382" y="458" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="382" y="458">Bearer 인증</tspan><tspan x="382" y="471">Token SHA-256 hash</tspan><tspan x="382" y="484">만료·회수·재직 상태 검증</tspan><tspan x="382" y="497">실패: HTTP 401</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_31"><g transform="translate(0.5,0.5)"><ellipse cx="352.7" cy="444.45" rx="15" ry="15" fill="#c74634" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 444px; margin-left: 339px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">2</span></b></div></div></div></foreignObject><text x="353" y="448" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">2</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_32"><g transform="translate(0.5,0.5)"><rect x="669.7" y="419.45" width="235" height="110" rx="8.8" ry="8.8" fill="#ffffff" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 187px; height: 1px; padding-top: 474px; margin-left: 702px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>MCP Tool Router</b><br />catalog에서 이름·인자 검증<br />AGENT_TOOL / SELECT_AI 분기</div></div></div></foreignObject><text x="702" y="465" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="702" y="465">MCP Tool Router</tspan><tspan x="702" y="478">catalog에서 이름·인자 검증</tspan><tspan x="702" y="491">AGENT_TOOL / SELECT_AI 분기</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_33"><g transform="translate(0.5,0.5)"><ellipse cx="672.7" cy="444.45" rx="15" ry="15" fill="#c74634" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 444px; margin-left: 659px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">3</span></b></div></div></div></foreignObject><text x="673" y="448" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">3</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_34"><g transform="translate(0.5,0.5)"><rect x="369.7" y="609.45" width="250" height="130" rx="10.4" ry="10.4" fill="#ffffff" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 202px; height: 1px; padding-top: 674px; margin-left: 402px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 10px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>ADB AGENT_TOOL</b><br />resolve_hr_term · search_hr_policy<br />동일 기본 JDBC session<br />SET_USER_BY_BEARER<br />→ RUN_TOOL → CLEAR_USER</div></div></div></foreignObject><text x="402" y="653" fill="#312D2A" font-family="'Oracle Sans'" font-size="10px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="402" y="653">ADB AGENT_TOOL</tspan><tspan x="402" y="665">resolve_hr_term · search_hr_policy</tspan><tspan x="402" y="677">동일 기본 JDBC session</tspan><tspan x="402" y="689">SET_USER_BY_BEARER</tspan><tspan x="402" y="701">→ RUN_TOOL → CLEAR_USER</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_35"><g transform="translate(0.5,0.5)"><ellipse cx="372.7" cy="634.45" rx="15" ry="15" fill="#ae562c" stroke="#ae562c" pointer-events="all" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 634px; margin-left: 359px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">4</span></b></div></div></div></foreignObject><text x="373" y="638" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">4</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_36"><g transform="translate(0.5,0.5)"><rect x="669.7" y="609.45" width="235" height="125" rx="10" ry="10" fill="#ffffff" stroke="#2f6f8f" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 187px; height: 1px; padding-top: 672px; margin-left: 702px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>search_hr_data</b><br />ADMIN 생성 세션<br />DBMS_CLOUD_AI.GENERATE<br />action=showsql<br />SELECT/WITH + 승인 객체 검증</div></div></div></foreignObject><text x="702" y="649" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="702" y="649">search_hr_data</tspan><tspan x="702" y="662">ADMIN 생성 세션</tspan><tspan x="702" y="675">DBMS_CLOUD_AI.GENERATE</tspan><tspan x="702" y="688">action=showsql</tspan><tspan x="702" y="701">SELECT/WITH + 승인 객체 검증</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_37"><g transform="translate(0.5,0.5)"><ellipse cx="672.7" cy="634.45" rx="15" ry="15" fill="#2f6f8f" stroke="#2f6f8f" pointer-events="all" style="fill: light-dark(rgb(47, 111, 143), rgb(106, 161, 189)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 634px; margin-left: 659px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">5</span></b></div></div></div></foreignObject><text x="673" y="638" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">5</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_38"><g><path d="M 249.7 569.45 L 289.7 569.45 Q 299.7 569.45 299.7 559.45 L 299.7 484.51 Q 299.7 474.51 309.7 474.51 L 339.46 474.51" fill="none" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/><path d="M 347.46 474.51 L 339.46 478.51 L 339.46 470.51 Z" fill="#c74634" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 522px; margin-left: 300px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">Authorization: Bearer …</div></div></div></foreignObject><text x="300" y="525" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">Authorization: Bearer …</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_39"><g><path d="M 599.7 474.45 L 659.46 474.45" fill="none" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/><path d="M 667.46 474.45 L 659.46 478.45 L 659.46 470.45 Z" fill="#c74634" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 474px; margin-left: 635px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">인증된 employee</div></div></div></foreignObject><text x="635" y="478" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">인증된 employee</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_40"><g><path d="M 728.45 529.45 L 728.51 559.45 Q 728.52 569.45 718.52 569.45 L 504.76 569.45 Q 494.76 569.45 494.74 579.45 L 494.72 599.21" fill="none" stroke="#ae562c" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/><path d="M 494.7 607.21 L 490.72 599.21 L 498.72 599.22 Z" fill="#ae562c" stroke="#ae562c" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(174, 86, 44), rgb(211, 136, 100)); stroke: light-dark(rgb(174, 86, 44), rgb(211, 136, 100));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 569px; margin-left: 612px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">AGENT_TOOL</div></div></div></foreignObject><text x="612" y="573" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">AGENT_TOOL</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_41"><g><path d="M 845.95 529.45 L 846.03 559.45 Q 846.05 569.45 836.05 569.45 L 797.23 569.45 Q 787.23 569.45 787.22 579.45 L 787.21 599.21" fill="none" stroke="#2f6f8f" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/><path d="M 787.2 607.21 L 783.21 599.21 L 791.21 599.22 Z" fill="#2f6f8f" stroke="#2f6f8f" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(47, 111, 143), rgb(106, 161, 189)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 569px; margin-left: 817px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">SELECT_AI</div></div></div></foreignObject><text x="817" y="573" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">SELECT_AI</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_42"><g transform="translate(0.5,0.5)"><rect x="979.7" y="349.45" width="805" height="665" rx="46.55" ry="46.55" fill="#f5f4f2" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(245, 244, 242), rgb(28, 27, 25)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g></g><g data-cell-id="hmm-security-flow_v_43"><g><rect x="993.7" y="357.45" width="777" height="26" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 775px; height: 1px; padding-top: 370px; margin-left: 996px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Autonomous Database · 보안 실행 경계</b></div></div></div></foreignObject><text x="996" y="374" fill="#312D2A" font-family="'Oracle Sans'" font-size="13px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">Autonomous Database · 보안 실행 경계</text></switch></g></g></g><g data-cell-id="hmm-security-flow_oci_44"><g/><g data-cell-id="hmm-security-flow_ociPart_45"><g><rect x="1024.7" y="389.45" width="84" height="73" fill="none" stroke="none" pointer-events="all"/></g><g data-cell-id="hmm-security-flow_ociPart_46"><g><path d="M 1062.92 460.45 C 1057.53 460.45 1052.33 459.93 1048.5 459.07 C 1043.46 457.85 1040.85 455.95 1040.85 453.35 L 1040.85 428.24 L 1024.7 428.24 L 1024.87 425.65 C 1025.4 419.23 1029.05 413.7 1034.78 410.75 C 1035.99 410.05 1036.86 409.02 1037.21 407.63 C 1038.07 403.13 1041.21 399.32 1045.37 397.59 C 1047.11 396.9 1049.02 396.38 1051.1 396.38 C 1051.46 396.38 1051.97 396.38 1052.5 396.38 C 1052.67 396.38 1052.84 396.38 1053.01 396.38 C 1054.24 396.38 1055.45 395.85 1056.15 394.99 C 1059.1 391.7 1063.09 389.8 1067.44 389.45 L 1069.18 389.45 C 1075.61 389.62 1081.34 393.26 1084.12 398.97 C 1084.29 399.32 1084.63 399.84 1084.99 400.19 C 1085.33 400.7 1086.03 401.57 1086.37 402.27 C 1091.59 402.44 1096.28 405.2 1099.06 409.54 L 1099.06 409.71 L 1099.57 412.31 L 1106.7 419.4 L 1103.22 422.87 L 1100.97 420.62 C 1099.57 427.9 1093.15 433.26 1085.5 433.26 C 1085.33 433.26 1084.99 433.26 1084.81 433.26 L 1084.81 453.18 C 1084.81 455.77 1082.38 457.68 1077.16 458.89 C 1073.51 459.93 1068.31 460.45 1062.92 460.45 L 1062.92 460.45" fill="#ffffff" stroke="none" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));"/></g></g><g data-cell-id="hmm-security-flow_ociPart_47"><g><path d="M 1069.3 391.19 C 1075.55 391.19 1081.11 394.66 1083.89 400.22 C 1084.23 400.75 1084.41 401.27 1084.92 401.62 C 1085.27 402.14 1085.96 403.18 1086.48 403.87 C 1091.69 403.87 1096.38 406.66 1098.98 410.83 L 1099.68 413.61 L 1106.44 420.39 L 1104.19 422.65 L 1101.24 419.69 C 1100.72 427.34 1094.29 433.43 1086.48 433.43 C 1085.96 433.43 1085.44 433.43 1084.92 433.25 L 1084.92 454.28 C 1084.92 456.37 1082.67 458.11 1077.98 459.15 C 1074.16 460.02 1069.13 460.54 1063.75 460.54 C 1058.37 460.54 1053.34 460.02 1049.52 459.15 C 1044.83 458.11 1042.58 456.37 1042.58 454.28 L 1042.58 428.21 L 1026.61 428.21 L 1026.78 426.47 C 1027.3 420.39 1030.77 415 1036.16 412.22 C 1037.54 411.7 1038.59 410.31 1038.93 408.74 C 1039.8 404.57 1042.58 400.92 1046.57 399.18 C 1048.3 398.49 1050.04 398.14 1051.95 398.14 C 1052.29 398.14 1052.81 398.14 1053.16 398.14 C 1053.34 398.14 1053.51 398.14 1053.68 398.14 C 1055.07 398.14 1056.46 397.62 1057.5 396.57 C 1060.45 393.28 1064.62 391.54 1068.96 391.36 L 1068.96 392.92 L 1068.96 391.36 C 1068.96 391.19 1069.13 391.19 1069.3 391.19 L 1069.3 391.19 M 1070.52 389.45 L 1068.78 389.45 L 1067.04 389.45 L 1067.04 389.63 C 1062.89 390.14 1058.89 392.06 1055.94 395.19 C 1055.42 396.06 1054.55 396.4 1053.51 396.4 C 1053.34 396.4 1053.34 396.4 1053.16 396.4 C 1052.65 396.4 1052.29 396.4 1051.77 396.4 C 1049.69 396.4 1047.61 396.93 1045.7 397.62 C 1041.19 399.53 1038.06 403.53 1037.02 408.39 C 1036.85 409.44 1036.16 410.48 1035.12 411 C 1029.21 414.13 1025.4 420.04 1024.88 426.64 L 1024.7 428.38 L 1024.7 430.12 L 1026.61 430.12 L 1040.84 430.12 L 1040.84 454.46 C 1040.84 458.98 1047.09 460.54 1049.17 461.06 C 1053.16 461.93 1058.37 462.45 1063.75 462.45 C 1069.3 462.45 1074.34 461.93 1078.33 461.06 C 1080.41 460.54 1086.66 459.15 1086.66 454.46 L 1086.66 435.34 C 1093.95 435.34 1100.37 430.29 1102.28 423.34 L 1102.8 423.86 L 1104.01 425.08 L 1105.23 423.86 L 1107.48 421.61 L 1108.7 420.39 L 1107.48 419.17 L 1101.06 412.74 L 1100.54 410.48 L 1100.54 410.13 L 1100.37 409.96 C 1097.6 405.44 1092.73 402.49 1087.36 402.14 C 1087 401.62 1086.48 400.92 1086.31 400.58 L 1086.31 400.4 L 1086.14 400.22 C 1085.96 400.22 1085.62 399.88 1085.44 399.53 C 1082.67 393.62 1076.94 389.97 1070.52 389.45 L 1070.52 389.45" fill="#ffffff" stroke="none" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));"/></g></g><g data-cell-id="hmm-security-flow_ociPart_48"><g><path d="M 1029.18 424.09 L 1039.27 424.09 L 1039.27 427.19 L 1025.7 427.19 L 1025.88 425.47 C 1026.4 419.43 1029.88 414.08 1035.27 411.32 C 1036.66 410.63 1037.7 409.25 1038.05 407.7 C 1038.92 403.56 1041.7 399.94 1045.7 398.21 C 1047.61 397.18 1049.88 396.83 1052.13 397.18 C 1053.88 397.35 1055.44 396.83 1056.48 395.63 C 1059.44 392.35 1063.61 390.62 1067.96 390.45 C 1068.13 390.45 1068.31 390.45 1068.31 390.45 C 1074.57 390.45 1080.13 393.9 1082.92 399.42 C 1083.27 399.94 1083.44 400.46 1083.96 400.8 C 1082.74 400.97 1081.52 401.14 1080.48 401.49 C 1080.31 401.32 1080.31 401.14 1080.13 400.8 C 1077.88 396.32 1073.35 393.56 1068.31 393.56 C 1068.13 393.56 1068.13 393.56 1067.96 393.56 C 1064.48 393.56 1061 395.11 1058.57 397.69 C 1056.83 399.59 1054.22 400.63 1051.61 400.28 C 1049.88 400.11 1048.31 400.46 1046.57 401.14 C 1043.61 402.53 1041.36 405.11 1040.83 408.39 C 1040.31 410.98 1038.74 413.05 1036.31 414.26 C 1032.66 416.15 1030.04 419.78 1029.18 424.09 L 1029.18 424.09 M 1084.13 409.25 L 1087.27 409.25 L 1091.61 424.61 L 1088.13 424.61 L 1087.61 421.33 L 1083.79 421.33 L 1082.92 424.61 L 1079.61 424.61 L 1084.13 409.25 L 1084.13 409.25 M 1084.31 418.74 L 1086.92 418.74 L 1085.52 413.05 L 1084.31 418.74 L 1084.31 418.74 M 1070.92 416.67 L 1067.96 413.74 L 1065.7 415.98 L 1072.48 422.71 L 1079.27 415.98 L 1077 413.74 L 1074.22 416.5 C 1074.74 410.63 1079.79 406.15 1085.7 406.15 C 1090.04 406.15 1093.88 408.56 1095.96 412.18 L 1098.22 409.94 C 1095.61 405.8 1090.92 403.04 1085.7 403.04 C 1077.88 403.04 1071.44 409.08 1070.92 416.67 L 1070.92 416.67 M 1105.7 419.26 L 1098.92 412.7 L 1092.13 419.43 L 1094.4 421.67 L 1097.18 418.91 C 1096.66 424.78 1091.61 429.26 1085.7 429.26 C 1081.36 429.26 1077.52 426.85 1075.44 423.23 L 1073.18 425.47 C 1075.79 429.61 1080.48 432.37 1085.7 432.37 C 1093.52 432.37 1099.96 426.33 1100.48 418.74 L 1103.44 421.67 L 1105.7 419.26 L 1105.7 419.26 M 1080.83 434.44 C 1081.88 434.78 1082.92 434.96 1083.96 435.13 L 1083.96 453.24 C 1083.96 455.31 1081.7 457.04 1077 458.07 C 1073.18 458.93 1068.13 459.45 1062.74 459.45 C 1057.36 459.45 1052.31 458.93 1048.48 458.07 C 1043.79 457.04 1041.52 455.31 1041.52 453.24 L 1041.52 419.26 C 1041.52 417.19 1043.79 415.63 1048.48 414.6 C 1052.13 413.74 1057.18 413.39 1062.74 413.39 C 1062.92 413.39 1063.27 413.39 1063.61 413.39 L 1063.61 416.5 C 1063.44 416.5 1063.09 416.5 1062.74 416.5 C 1051.27 416.5 1045.52 418.39 1044.83 419.43 L 1044.83 419.6 C 1045.52 420.81 1052.13 422.71 1062.74 422.71 C 1065 422.71 1066.92 422.71 1068.83 422.54 C 1069.18 423.57 1069.52 424.61 1070.05 425.64 C 1067.79 425.81 1065.36 425.99 1062.74 425.99 C 1057.36 425.99 1052.31 425.47 1048.48 424.61 C 1046.92 424.26 1045.7 423.91 1044.66 423.4 L 1044.66 430.82 C 1045.36 432.02 1051.96 433.92 1062.57 433.92 C 1068.48 433.92 1073.18 433.23 1076.31 432.54 C 1077.88 433.23 1079.27 433.92 1080.83 434.44 C 1079.79 434.96 1078.57 435.3 1077 435.64 C 1073.18 436.51 1068.13 437.03 1062.74 437.03 C 1057.36 437.03 1052.31 436.51 1048.48 435.64 C 1046.92 435.3 1045.7 434.96 1044.66 434.44 L 1044.66 441.86 C 1045.36 443.06 1051.96 444.96 1062.57 444.96 C 1073.18 444.96 1079.79 442.89 1080.48 441.86 L 1080.83 434.44 L 1080.83 434.44 M 1080.83 445.65 C 1079.79 446.17 1078.57 446.51 1077 446.86 C 1073.18 447.72 1068.13 448.24 1062.74 448.24 C 1057.36 448.24 1052.31 447.72 1048.48 446.86 C 1046.92 446.51 1045.7 446.17 1044.66 445.65 L 1044.66 453.07 C 1045.36 454.1 1051.27 456.17 1062.57 456.17 C 1073.88 456.17 1079.96 453.93 1080.48 453.07 L 1080.83 445.65 L 1080.83 445.65" fill="#2d5967" stroke="none" pointer-events="all" style="fill: light-dark(rgb(45, 89, 103), rgb(138, 175, 187));"/></g></g></g></g><g data-cell-id="hmm-security-flow_v_49"><g transform="translate(0.5,0.5)"><rect x="1119.7" y="409.45" width="285" height="110" rx="8.8" ry="8.8" fill="#ffffff" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 237px; height: 1px; padding-top: 464px; margin-left: 1152px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>CB_ORDS 동일 JDBC 세션</b><br />CB_ORDS_HANDLER_PKG<br />SET_VPD_CONTEXT<br />Runtime principal·context 일치 검증</div></div></div></foreignObject><text x="1152" y="448" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="1152" y="448">CB_ORDS 동일 JDBC 세션</tspan><tspan x="1152" y="461">CB_ORDS_HANDLER_PKG</tspan><tspan x="1152" y="474">SET_VPD_CONTEXT</tspan><tspan x="1152" y="487">Runtime principal·context 일치 검증</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_50"><g transform="translate(0.5,0.5)"><ellipse cx="1122.7" cy="434.45" rx="15" ry="15" fill="#c74634" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 434px; margin-left: 1109px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">6</span></b></div></div></div></foreignObject><text x="1123" y="438" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">6</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_51"><g transform="translate(0.5,0.5)"><rect x="1464.7" y="409.45" width="270" height="110" rx="8.8" ry="8.8" fill="#ffffff" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 222px; height: 1px; padding-top: 464px; margin-left: 1497px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Secure Application Context</b><br />HMM_ACCESS_CTX_PKG<br />SET_USER_BY_BEARER<br />EMPLOYEE_ID · CODE · TEAM_ID</div></div></div></foreignObject><text x="1497" y="448" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="1497" y="448">Secure Application Context</tspan><tspan x="1497" y="461">HMM_ACCESS_CTX_PKG</tspan><tspan x="1497" y="474">SET_USER_BY_BEARER</tspan><tspan x="1497" y="487">EMPLOYEE_ID · CODE · TEAM_ID</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_52"><g transform="translate(0.5,0.5)"><ellipse cx="1467.7" cy="434.45" rx="15" ry="15" fill="#c74634" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 434px; margin-left: 1454px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">7</span></b></div></div></div></foreignObject><text x="1468" y="438" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">7</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_53"><g transform="translate(0.5,0.5)"><rect x="1119.7" y="604.45" width="285" height="125" rx="10" ry="10" fill="#ffffff" stroke="#2f6f8f" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 237px; height: 1px; padding-top: 667px; margin-left: 1152px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>읽기 전용 SQL 실행</b><br />CB_ORDS · SET TRANSACTION READ ONLY<br />EXEMPT ACCESS POLICY 없음<br />승인된 HR Table/View만 조회</div></div></div></foreignObject><text x="1152" y="651" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="1152" y="651">읽기 전용 SQL 실행</tspan><tspan x="1152" y="664">CB_ORDS · SET TRANSACTION READ ONLY</tspan><tspan x="1152" y="677">EXEMPT ACCESS POLICY 없음</tspan><tspan x="1152" y="690">승인된 HR Table/View만 조회</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_54"><g transform="translate(0.5,0.5)"><ellipse cx="1122.7" cy="629.45" rx="15" ry="15" fill="#2f6f8f" stroke="#2f6f8f" pointer-events="all" style="fill: light-dark(rgb(47, 111, 143), rgb(106, 161, 189)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 629px; margin-left: 1109px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">8</span></b></div></div></div></foreignObject><text x="1123" y="633" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">8</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_55"><g transform="translate(0.5,0.5)"><rect x="1464.7" y="604.45" width="270" height="125" rx="10" ry="10" fill="#ffffff" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 222px; height: 1px; padding-top: 667px; margin-left: 1497px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>HMM_LEAVE_SCOPE_POLICY</b><br />SYS_CONTEXT 기반 predicate 자동 적용<br /><b>VIEWER → SELF</b><br /><b>MANAGER → MANAGED_TEAM</b><br /><b>ADMIN role → ALL</b></div></div></div></foreignObject><text x="1497" y="644" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="1497" y="644">HMM_LEAVE_SCOPE_POLICY</tspan><tspan x="1497" y="657">SYS_CONTEXT 기반 predicate 자동 적용</tspan><tspan x="1497" y="670">VIEWER → SELF</tspan><tspan x="1497" y="683">MANAGER → MANAGED_TEAM</tspan><tspan x="1497" y="696">ADMIN role → ALL</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_56"><g transform="translate(0.5,0.5)"><ellipse cx="1467.7" cy="629.45" rx="15" ry="15" fill="#c74634" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 629px; margin-left: 1454px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">8a</span></b></div></div></div></foreignObject><text x="1468" y="633" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">8a</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_57"><g transform="translate(0.5,0.5)"><rect x="1119.7" y="824.45" width="615" height="95" rx="7.6" ry="7.6" fill="#ffffff" stroke="#2f6b4f" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 567px; height: 1px; padding-top: 872px; margin-left: 1152px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>항상 정리</b><br />결과 읽기 → ROLLBACK → CB_ORDS_HANDLER_PKG · CLEAR_VPD_CONTEXT<br /><span style="color: light-dark(rgb(91, 86, 82), rgb(166, 162, 158));">성공·실패와 무관하게 session context와 client identifier 제거</span></div></div></div></foreignObject><text x="1152" y="862" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="1152" y="862">항상 정리</tspan><tspan x="1152" y="875">결과 읽기 → ROLLBACK → CB_ORDS_HANDLER_PKG · CLEAR_VPD_CONTEXT</tspan><tspan x="1152" y="888">성공·실패와 무관하게 session context와 client identifier 제거</tspan></text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_58"><g transform="translate(0.5,0.5)"><ellipse cx="1122.7" cy="849.45" rx="15" ry="15" fill="#2f6b4f" stroke="#2f6b4f" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 849px; margin-left: 1109px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 13px; font-family: 'Oracle Sans'; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b><span style="color: light-dark(rgb(255, 255, 255), rgb(18, 18, 18));">9</span></b></div></div></div></foreignObject><text x="1123" y="853" fill="#000000" font-family="'Oracle Sans'" font-size="13px" text-anchor="middle" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">9</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_59"><g><path d="M 904.7 671.92 L 1252.17 671.92 Q 1262.17 671.92 1262.17 661.92 L 1262.17 529.69" fill="none" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/><path d="M 1262.17 521.69 L 1266.17 529.69 L 1258.17 529.69 Z" fill="#c74634" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 672px; margin-left: 1160px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">검증된 SQL + 원문 Bearer</div></div></div></foreignObject><text x="1160" y="675" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">검증된 SQL + 원문 Bearer</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_60"><g><path d="M 619.7 674.45 L 644.76 674.49 Q 654.76 674.51 654.76 684.51 L 654.76 769.45 Q 654.76 779.45 644.76 779.45 L 309.7 779.45 Q 299.7 779.45 299.7 789.45 L 299.7 864.51 Q 299.7 874.51 289.7 874.51 L 259.7 874.51 Q 249.7 874.51 249.7 870.61 L 249.7 866.71" fill="none" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="6 6" pointer-events="stroke" style="stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/><path d="M 249.7 874.71 L 245.7 866.71 L 253.7 866.71 Z" fill="#2f6b4f" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 779px; margin-left: 474px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">Agent Tool 결과 · CLEAR_USER</div></div></div></foreignObject><text x="474" y="783" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">Agent Tool 결과 · CLEAR_USER</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_61"><g><path d="M 1404.7 464.45 L 1454.46 464.45" fill="none" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/><path d="M 1462.46 464.45 L 1454.46 468.45 L 1454.46 460.45 Z" fill="#c74634" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 464px; margin-left: 1435px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">SET_USER_BY_BEARER</div></div></div></foreignObject><text x="1435" y="468" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">SET_USER_BY_BEARER</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_62"><g><path d="M 1262.2 519.45 L 1262.2 594.21" fill="none" stroke="#2f6f8f" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/><path d="M 1262.2 602.21 L 1258.2 594.21 L 1266.2 594.21 Z" fill="#2f6f8f" stroke="#2f6f8f" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(47, 111, 143), rgb(106, 161, 189)); stroke: light-dark(rgb(47, 111, 143), rgb(106, 161, 189));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 562px; margin-left: 1262px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">context 확인 후 실행</div></div></div></foreignObject><text x="1262" y="565" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">context 확인 후 실행</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_63"><g><path d="M 1599.7 519.45 L 1599.7 594.21" fill="none" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/><path d="M 1599.7 602.21 L 1595.7 594.21 L 1603.7 594.21 Z" fill="#c74634" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 562px; margin-left: 1600px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">SYS_CONTEXT</div></div></div></foreignObject><text x="1600" y="565" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">SYS_CONTEXT</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_64"><g><path d="M 1404.7 666.95 L 1454.46 666.95" fill="none" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/><path d="M 1462.46 666.95 L 1454.46 670.95 L 1454.46 662.95 Z" fill="#c74634" stroke="#c74634" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(199, 70, 52), rgb(243, 132, 117)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 667px; margin-left: 1435px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">SELECT → predicate 주입</div></div></div></foreignObject><text x="1435" y="670" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">SELECT → predicate 주입</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_65"><g><path d="M 1599.7 729.45 L 1599.7 766.98 Q 1599.7 776.98 1605.7 776.98 L 1608.7 776.98 Q 1611.7 776.98 1611.7 786.98 L 1611.7 814.21" fill="none" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/><path d="M 1611.7 822.21 L 1607.7 814.21 L 1615.7 814.21 Z" fill="#2f6b4f" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 777px; margin-left: 1605px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">허용 행</div></div></div></foreignObject><text x="1605" y="780" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">허용 행</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_66"><g><path d="M 1262.2 729.45 L 1262.18 766.98 Q 1262.17 776.98 1252.46 776.98 L 1247.61 776.98 Q 1242.76 776.98 1242.75 786.98 L 1242.71 814.21" fill="none" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/><path d="M 1242.7 822.21 L 1238.71 814.21 L 1246.71 814.22 Z" fill="#2f6b4f" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 777px; margin-left: 1252px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">result set</div></div></div></foreignObject><text x="1252" y="780" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">result set</text></switch></g></g></g><g data-cell-id="hmm-security-flow_e_67"><g><path d="M 1119.7 871.95 L 1119.7 954.51 Q 1119.7 964.51 1109.7 964.51 L 979.7 964.51 Q 969.7 964.51 959.7 964.51 L 259.7 964.51 Q 249.7 964.51 249.7 954.51 L 249.7 887.19" fill="none" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/><path d="M 249.7 879.19 L 253.7 887.19 L 245.7 887.19 Z" fill="#2f6b4f" stroke="#2f6b4f" stroke-width="2" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(47, 107, 79), rgb(119, 171, 147)); stroke: light-dark(rgb(47, 107, 79), rgb(119, 171, 147));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 965px; margin-left: 688px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #312D2A; background-color: #FFFFFF; "><div style="display: inline-block; font-size: 11px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; background-color: light-dark(#FFFFFF, #121212); white-space: nowrap; ">정제된 Tool 결과</div></div></div></foreignObject><text x="688" y="968" fill="#312D2A" font-family="'Oracle Sans'" font-size="11px" text-anchor="middle" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));">정제된 Tool 결과</text></switch></g></g></g><g data-cell-id="hmm-security-flow_v_68"><g transform="translate(0.5,0.5)"><rect x="349.7" y="809.45" width="555" height="110" rx="8.8" ry="8.8" fill="#fff7f2" stroke="#c74634" pointer-events="all" style="fill: light-dark(rgb(255, 247, 242), rgb(30, 23, 19)); stroke: light-dark(rgb(199, 70, 52), rgb(243, 132, 117));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 537px; height: 1px; padding-top: 864px; margin-left: 360px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #312D2A; "><div style="display: inline-block; font-size: 12px; font-family: 'Oracle Sans'; color: light-dark(#312D2A, #c8c5c2); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>보안 불변조건</b><br />• Token 원문은 DB·로그·응답·Git에 저장하지 않음<br />• SQL 생성 ADMIN과 실행 CB_ORDS를 분리<br />• 컨텍스트 설정과 보호 객체 SELECT는 반드시 같은 connection<br />• 권한 또는 메타데이터가 불완전하면 결과를 축소하는 대신 요청/기동 실패</div></div></div></foreignObject><text x="360" y="840" fill="#312D2A" font-family="'Oracle Sans'" font-size="12px" style="fill: light-dark(rgb(49, 45, 42), rgb(200, 197, 194));"><tspan x="360" y="840">보안 불변조건</tspan><tspan x="360" y="854">• Token 원문은 DB·로그·응답·Git에 저장하지 않음</tspan><tspan x="360" y="868">• SQL 생성 ADMIN과 실행 CB_ORDS를 분리</tspan><tspan x="360" y="882">• 컨텍스트 설정과 보호 객체 SELECT는 반드시 같은 connection</tspan><tspan x="360" y="896">• 권한 또는 메타데이터가 불완전하면 결과를 축소하는 대신 요청/기동 실패</tspan></text></switch></g></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>