<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="app.diagrams.net">
<diagram name="SA v2 — Application Architecture" id="sa-v2-apparch"><mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1930" pageHeight="1942" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F1F2F4;strokeColor=none;" vertex="1" parent="1"><mxGeometry x="-30" y="-50" width="2050" height="2082" as="geometry"/></mxCell>
<mxCell id="env_ui" value="" style="rounded=1;arcSize=2;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#90979E;strokeWidth=1.5;dashed=1;dashPattern=10 5;" vertex="1" parent="1"><mxGeometry x="162" y="82" width="311" height="1812" as="geometry"/></mxCell>
<mxCell id="env_be" value="" style="rounded=1;arcSize=2;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#90979E;strokeWidth=1.5;dashed=1;dashPattern=10 5;" vertex="1" parent="1"><mxGeometry x="532" y="82" width="961" height="1430" as="geometry"/></mxCell>
<mxCell id="env_dt" value="" style="rounded=1;arcSize=2;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#90979E;strokeWidth=1.5;dashed=1;dashPattern=10 5;" vertex="1" parent="1"><mxGeometry x="1555" y="82" width="250" height="1344" as="geometry"/></mxCell>
<mxCell id="p1" value="① 클라이언트" style="rounded=1;arcSize=40;whiteSpace=wrap;html=1;fillColor=#4A5560;strokeColor=none;fontSize=12;fontStyle=1;fontColor=#FFFFFF;" vertex="1" parent="1"><mxGeometry x="162" y="48" width="200" height="26" as="geometry"/></mxCell>
<mxCell id="p2" value="② REST API" style="rounded=1;arcSize=40;whiteSpace=wrap;html=1;fillColor=#4A5560;strokeColor=none;fontSize=12;fontStyle=1;fontColor=#FFFFFF;" vertex="1" parent="1"><mxGeometry x="532" y="48" width="180" height="26" as="geometry"/></mxCell>
<mxCell id="p3" value="③ 서비스 계약" style="rounded=1;arcSize=40;whiteSpace=wrap;html=1;fillColor=#4A5560;strokeColor=none;fontSize=12;fontStyle=1;fontColor=#FFFFFF;" vertex="1" parent="1"><mxGeometry x="920" y="48" width="180" height="26" as="geometry"/></mxCell>
<mxCell id="p4" value="④ Repository · 테이블" style="rounded=1;arcSize=40;whiteSpace=wrap;html=1;fillColor=#4A5560;strokeColor=none;fontSize=12;fontStyle=1;fontColor=#FFFFFF;" vertex="1" parent="1"><mxGeometry x="1255" y="48" width="210" height="26" as="geometry"/></mxCell>
<mxCell id="p5" value="⑤ 저장소 (Data Tier)" style="rounded=1;arcSize=40;whiteSpace=wrap;html=1;fillColor=#4A5560;strokeColor=none;fontSize=12;fontStyle=1;fontColor=#FFFFFF;" vertex="1" parent="1"><mxGeometry x="1555" y="48" width="210" height="26" as="geometry"/></mxCell>
<mxCell id="ttl" value="FillMap · Application Architecture (SA v2 · 2026.07)" style="text;html=1;strokeColor=none;fillColor=none;align=left;fontSize=17;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="30" y="-36" width="760" height="26" as="geometry"/></mxCell>
<mxCell id="lgd1" value="색상 = 화면 (헤더에서 선언 → 나가는 선 → 호출하는 API 행 테두리로 종결):" style="text;html=1;strokeColor=none;fillColor=none;align=left;fontSize=10;fontStyle=1;fontColor=#4A5560;" vertex="1" parent="1"><mxGeometry x="30" y="-10" width="380" height="18" as="geometry"/></mxCell>
<mxCell id="lg185" value="로그인·온보딩" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#E8F0F8;strokeColor=#4E7EA8;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="415" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg186" value="① 지도 홈" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#E7F4EE;strokeColor=#3E9E6D;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="519" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg187" value="② 격자 썸네일" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FDF1DE;strokeColor=#E58E1C;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="623" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg188" value="③ 핫구역" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FBEBE8;strokeColor=#C15848;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="727" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg189" value="④ 격자 상세" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#F0EBF8;strokeColor=#8A6ABF;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="831" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg190" value="⑤ 신고 모달" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FBEAF3;strokeColor=#D96AA1;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="935" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg191" value="⑥ 촬영·업로드" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FBF6E4;strokeColor=#D6A34A;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1039" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg192" value="⑦ 개인 도감" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#E0F4F8;strokeColor=#2FA4C7;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1143" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg193" value="설정·프로필" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#E0F2F1;strokeColor=#4A9086;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1247" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg194" value="운영자 콘솔" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#ECEFF1;strokeColor=#37474F;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1351" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lg195" value="스폰서 포털" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#EFEBE9;strokeColor=#8D6E63;fontSize=9;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1455" y="-10" width="96" height="18" as="geometry"/></mxCell>
<mxCell id="lgd3" value="API 카드 헤더 연초록 = 종류 표시 · 서비스·Repository·저장소 연결 = 무채색 · AI 처리 환경 = 남색 강조 · ③ 각 칸의 작은 글씨 = 대응하는 SysA v2 서비스 (9종 1:1) · 경로는 전부 /api 접두사 (버전 미도입)" style="text;html=1;strokeColor=none;fillColor=none;align=left;fontSize=9;fontColor=#6B7075;" vertex="1" parent="1"><mxGeometry x="30" y="14" width="820" height="18" as="geometry"/></mxCell>
<mxCell id="a196" value="사용자" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fontSize=11;fontStyle=1;strokeColor=#8FBF7B;strokeWidth=2;" vertex="1" parent="1"><mxGeometry x="60" y="440" width="36" height="60" as="geometry"/></mxCell>
<mxCell id="a197" value="운영자" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fontSize=11;fontStyle=1;strokeColor=#C0684A;strokeWidth=2;" vertex="1" parent="1"><mxGeometry x="60" y="1574" width="36" height="60" as="geometry"/></mxCell>
<mxCell id="a198" value="스폰서 (광고주)" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;fontSize=11;fontStyle=1;strokeColor=#D6A34A;strokeWidth=2;" vertex="1" parent="1"><mxGeometry x="60" y="1712" width="36" height="60" as="geometry"/></mxCell>
<mxCell id="g1" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="140" width="255" height="118" as="geometry"/></mxCell>
<mxCell id="c2" value="로그인·온보딩" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F0F8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="143" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c3" value="카카오 로그인 (OIDC)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="162" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c4" value="Apple·로컬 로그인 (미정)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="184" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c5" value="위치·카메라 권한 요청" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="206" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c6" value="세션 유지 (Refresh)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="228" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g7" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="272" width="255" height="184" as="geometry"/></mxCell>
<mxCell id="c8" value="① 지도 홈" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E7F4EE;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="275" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c9" value="내 격자 색칠 (뷰포트 폴링)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="294" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c10" value="미점령 격자 미표시 정책" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="316" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c11" value="미션 레이어 (면·선·점·경계)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="338" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c12" value="미션 칩 + 숫자 배지" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="360" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c13" value="미션 바텀시트 (3단)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="382" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c14" value="행정동 검색·자동완성" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="404" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c15" value="게스트 열람 (지도·핫구역)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="426" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g16" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E58E1C;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="470" width="255" height="118" as="geometry"/></mxCell>
<mxCell id="c17" value="② 격자 썸네일" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#FDF1DE;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="473" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c18" value="격자 요약 (점령·영상 수)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E58E1C;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="492" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c19" value="최근 업로드·누적 조회수" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E58E1C;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="514" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c20" value="썸네일 그리드 (정렬 고정)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E58E1C;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="536" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c21" value="좋아요 · 취소" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E58E1C;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="558" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g22" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C15848;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="602" width="255" height="96" as="geometry"/></mxCell>
<mxCell id="c23" value="③ 핫구역" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#FBEBE8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="605" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c24" value="순위 리스트 (조회수 산정)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C15848;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="624" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c25" value="갱신 시각·카운트다운" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C15848;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="646" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c26" value="항목 탭 → 격자 상세" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C15848;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="668" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g27" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="712" width="255" height="140" as="geometry"/></mxCell>
<mxCell id="c28" value="④ 격자 상세" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F0EBF8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="715" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c29" value="격자 표시명 (행정동)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="734" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c30" value="행정 지역명·활동 지표" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="756" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c31" value="격자 내 영상 목록" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="778" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c32" value="영상 재생 (상태 분기)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="800" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c33" value="영상 신고 진입" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="822" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g34" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D96AA1;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="866" width="255" height="74" as="geometry"/></mxCell>
<mxCell id="c35" value="⑤ 신고 모달" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#FBEAF3;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="869" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c36" value="신고 사유 선택" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D96AA1;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="888" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c37" value="제출 → 접수 안내" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D96AA1;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="910" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g38" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="954" width="255" height="206" as="geometry"/></mxCell>
<mxCell id="c39" value="⑥ 촬영·업로드" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#FBF6E4;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="957" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c40" value="촬영 (격자 내 GPS 검증)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="976" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c41" value="갤러리 선택 (1~30초)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="998" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c42" value="업로드·인코딩 진행 표시" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1020" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c43" value="AI 하이라이트 구간 조정" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1042" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c44" value="AI 블러 확인·토글" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1064" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c45" value="공개 범위 선택" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1086" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c46" value="스탬프 획득 연출" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1108" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c47" value="영상 교체·삭제·공유" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1130" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g48" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="1174" width="255" height="184" as="geometry"/></mxCell>
<mxCell id="c49" value="⑦ 개인 도감" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E0F4F8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="1177" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c50" value="요약 (격자·영상·뱃지·스트릭)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1196" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c51" value="지도 뷰 (기존 API 재사용)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1218" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c52" value="갤러리 뷰·정렬" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1240" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c53" value="뱃지 뷰·필터" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1262" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c54" value="지역별 탐험률 (동 단위)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1284" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c55" value="스탬프북" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1306" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c56" value="공개범위 설정" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1328" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g57" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="1372" width="255" height="118" as="geometry"/></mxCell>
<mxCell id="c58" value="설정·프로필" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E0F2F1;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="1375" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c59" value="프로필 조회" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1394" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c60" value="닉네임·색상·이미지 수정" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1416" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c61" value="로그아웃" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1438" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c62" value="계정 삭제" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1460" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g63" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#37474F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="1544" width="255" height="118" as="geometry"/></mxCell>
<mxCell id="c64" value="운영자 콘솔 (Admin · Web)" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#ECEFF1;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="1547" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c65" value="신고 처리 → 블라인드" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#37474F;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1566" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c66" value="사용자 차단·Trust Score" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#37474F;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1588" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c67" value="통계 모니터링" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#37474F;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1610" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c68" value="미션 수동 등록" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#37474F;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1632" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g69" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8D6E63;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="190" y="1702" width="255" height="96" as="geometry"/></mxCell>
<mxCell id="c70" value="스폰서 포털 (광고주 · Web · P2)" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#EFEBE9;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="194" y="1705" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c71" value="캠페인 관리" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8D6E63;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1724" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c72" value="스폰서 격자 지정" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8D6E63;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1746" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c73" value="성과 리포트 조회" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8D6E63;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="198" y="1768" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g74" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="140" width="255" height="118" as="geometry"/></mxCell>
<mxCell id="c75" value="Auth API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="143" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c76" value="POST /api/auth/signup · login" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="162" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c77" value="POST /api/auth/logout" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="184" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c78" value="POST /api/auth/oauth/{provider}" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="206" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c79" value="POST /api/auth/reissue" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4E7EA8;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="228" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g80" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="272" width="255" height="74" as="geometry"/></mxCell>
<mxCell id="c81" value="Grid API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="275" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c82" value="GET /api/grids (뷰포트)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="294" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c83" value="GET /api/grids/{gridId}" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E58E1C;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="316" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g84" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="360" width="255" height="96" as="geometry"/></mxCell>
<mxCell id="c85" value="Grid 확장 API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="363" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c86" value="GET /api/grids/{id}/videos" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="382" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c87" value="GET /api/grids/hot" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C15848;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="404" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c88" value="POST·DEL /api/videos/{id}/likes" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E58E1C;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="426" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g89" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="470" width="255" height="74" as="geometry"/></mxCell>
<mxCell id="c90" value="Mission API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="473" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c91" value="GET /api/missions/active" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="492" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c92" value="(bbox 없음 · TTL 1h 캐시)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="514" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g93" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="558" width="255" height="74" as="geometry"/></mxCell>
<mxCell id="c94" value="Video 재생 API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="561" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c95" value="GET /api/videos/{videoId}" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="580" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c96" value="(presigned GET · 상태 분기)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="602" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g97" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="646" width="255" height="140" as="geometry"/></mxCell>
<mxCell id="c98" value="Social·Report API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="649" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c99" value="POST /api/reports" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D96AA1;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="668" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c100" value="POST /api/friends/requests (P2)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="690" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c101" value="PATCH /api/friends/requests (P2)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="712" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c102" value="GET·DELETE /api/friends (P2)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="734" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c103" value="POST /api/friends/{id}/block (P2)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="756" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g104" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="800" width="255" height="140" as="geometry"/></mxCell>
<mxCell id="c105" value="Video API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="803" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c106" value="POST /api/videos/presigned-url" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="822" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c107" value="POST /api/videos (점령)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="844" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c108" value="PUT /api/videos/{videoId}" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="866" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c109" value="PATCH /api/videos/{id}/visibility" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="888" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c110" value="DELETE /api/videos/{videoId}" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#D6A34A;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="910" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g111" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="954" width="255" height="118" as="geometry"/></mxCell>
<mxCell id="c112" value="Collection API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="957" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c113" value="GET /api/collections/summary" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="976" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c114" value="GET /api/collections/grids" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="998" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c115" value="GET /api/collections/videos?regionCode" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1020" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c116" value="GET /api/collections/badges" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1042" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g117" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="1086" width="255" height="118" as="geometry"/></mxCell>
<mxCell id="c118" value="Region API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="1089" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c119" value="GET /api/regions/search" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1108" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c120" value="GET /api/regions/stats" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1130" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c121" value="GET /api/regions/stats/by-point·by-grid" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#2FA4C7;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1152" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c122" value="GET /api/regions/{code}" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8A6ABF;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1174" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="g123" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="1218" width="255" height="96" as="geometry"/></mxCell>
<mxCell id="c124" value="User API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="1221" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c125" value="GET /api/users/me" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1240" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c126" value="PATCH /api/users/me" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1262" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="c127" value="DELETE /api/users/me" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4A9086;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1284" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="gNotif" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="1328" width="255" height="96" as="geometry"/></mxCell><mxCell id="cNotifH" value="Notification API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="1331" width="247" height="16" as="geometry"/></mxCell><mxCell id="cNotif1" value="POST·DELETE /api/notifications/tokens" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1350" width="239" height="19" as="geometry"/></mxCell><mxCell id="cNotif2" value="GET /api/notifications/preferences" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1372" width="239" height="19" as="geometry"/></mxCell><mxCell id="cNotif3" value="PATCH …/preferences/{category}" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#3E9E6D;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1394" width="239" height="19" as="geometry"/></mxCell><mxCell id="gNotifRep" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="838" width="200" height="96" as="geometry"/></mxCell><mxCell id="cNotifRepH" value="NotificationRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="841" width="192" height="16" as="geometry"/></mxCell><mxCell id="cNotifT1" value="notifications" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="860" width="184" height="19" as="geometry"/></mxCell><mxCell id="cNotifT2" value="notification_opt_outs" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="882" width="184" height="19" as="geometry"/></mxCell><mxCell id="cNotifT3" value="push_tokens" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="904" width="184" height="19" as="geometry"/></mxCell><mxCell id="g128" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5F8F5F;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="560" y="1438" width="255" height="52" as="geometry"/></mxCell>
<mxCell id="c129" value="Sponsor API" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#E8F3E8;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="564" y="1441" width="247" height="16" as="geometry"/></mxCell>
<mxCell id="c130" value="(미설계 — P2 캠페인·리포트)" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#8D6E63;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="568" y="1460" width="239" height="19" as="geometry"/></mxCell>
<mxCell id="s131" value="AuthService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Auth Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="170" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s132" value="UserService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Auth Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="232" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s133" value="GridQueryService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Grid Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="294" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s134" value="HotZoneService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Grid Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="356" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s135" value="MissionService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Mission Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="418" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s136" value="VideoService + 인코딩 워커&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Video Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="480" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s137" value="UserGridQueryService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Collection Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="542" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s138" value="RegionService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Region Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="604" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="s139" value="SocialService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Social Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="666" width="220" height="40" as="geometry"/></mxCell><mxCell id="svcMod" value="ModerationService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Moderation Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="728" width="220" height="40" as="geometry"/></mxCell><mxCell id="svcNotif" value="NotificationService&lt;div style=&quot;font-size:8px;font-weight:normal;color:#5F6873;&quot;&gt;SysA · Notification Service&lt;/div&gt;" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;fontSize=10;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="930" y="790" width="220" height="40" as="geometry"/></mxCell>
<mxCell id="g140" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="170" width="200" height="52" as="geometry"/></mxCell>
<mxCell id="c141" value="UserRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="173" width="192" height="16" as="geometry"/></mxCell>
<mxCell id="c142" value="users" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="192" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="g143" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="240" width="200" height="74" as="geometry"/></mxCell>
<mxCell id="c144" value="GridRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="243" width="192" height="16" as="geometry"/></mxCell>
<mxCell id="c145" value="grids" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="262" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c146" value="user_grids" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="284" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="g147" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="332" width="200" height="74" as="geometry"/></mxCell>
<mxCell id="c148" value="VideoRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="335" width="192" height="16" as="geometry"/></mxCell>
<mxCell id="c149" value="videos" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="354" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c150" value="likes" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="376" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="g151" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="424" width="200" height="96" as="geometry"/></mxCell>
<mxCell id="c152" value="MissionRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="427" width="192" height="16" as="geometry"/></mxCell>
<mxCell id="c153" value="missions" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="446" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c154" value="mission_grids" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="468" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c155" value="user_missions" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="490" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="g156" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="538" width="200" height="74" as="geometry"/></mxCell>
<mxCell id="c157" value="RegionRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="541" width="192" height="16" as="geometry"/></mxCell>
<mxCell id="c158" value="regions" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="560" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c159" value="region_stats" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="582" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="g160" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="630" width="200" height="96" as="geometry"/></mxCell>
<mxCell id="c161" value="CollectionRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="633" width="192" height="16" as="geometry"/></mxCell>
<mxCell id="c162" value="badges" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="652" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c163" value="user_badges" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="674" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c164" value="streaks" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="696" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="g165" value="" style="rounded=1;arcSize=4;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#6B7075;strokeWidth=1.5;shadow=1;" vertex="1" parent="1"><mxGeometry x="1265" y="744" width="200" height="74" as="geometry"/></mxCell>
<mxCell id="c166" value="FriendshipRepository" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#F3F4F6;strokeColor=none;fontSize=10.5;fontStyle=1;fontColor=#2B2B2B;" vertex="1" parent="1"><mxGeometry x="1269" y="747" width="192" height="16" as="geometry"/></mxCell>
<mxCell id="c167" value="friendships" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="766" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="c168" value="reports" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#B9BEC4;fontSize=9;fontColor=#2B2B2B;align=left;spacingLeft=6;" vertex="1" parent="1"><mxGeometry x="1273" y="788" width="184" height="19" as="geometry"/></mxCell>
<mxCell id="st169" value="PostgreSQL + PostGIS" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=1.5;fontSize=10.5;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="1580" y="340" width="195" height="64" as="geometry"/></mxCell>
<mxCell id="st170" value="Redis (Hot ZSET·캐시)" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#FBEBE8;strokeColor=#C15848;strokeWidth=1.5;fontSize=10.5;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="1580" y="490" width="195" height="64" as="geometry"/></mxCell>
<mxCell id="st171" value="S3 (원본·인코딩본)" style="shape=cylinder3;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=1.5;fontSize=10.5;fontStyle=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="1580" y="640" width="195" height="64" as="geometry"/></mxCell>
<mxCell id="aienv" value="AI 처리 환경 — 상시 Python FastAPI 서버 · EC2&#10;(Lambda·GPU 대안 기각 · 1080p 다운스케일 필수 전제)" style="rounded=1;arcSize=2;whiteSpace=wrap;html=1;fillColor=#E8EAF6;strokeColor=#5C6BC0;strokeWidth=2;verticalAlign=top;fontStyle=1;fontSize=11;fontColor=#5C6BC0;" vertex="1" parent="1"><mxGeometry x="930" y="896" width="535" height="418" as="geometry"/></mxCell>
<mxCell id="ai172" value="Kafka video.uploaded 컨슈머" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5C6BC0;strokeWidth=1.3;fontSize=10;shadow=1;" vertex="1" parent="1"><mxGeometry x="1008" y="940" width="380" height="38" as="geometry"/></mxCell>
<mxCell id="ai173" value="1080p·30fps 다운스케일" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5C6BC0;strokeWidth=1.3;fontSize=10;shadow=1;" vertex="1" parent="1"><mxGeometry x="1008" y="990" width="380" height="38" as="geometry"/></mxCell>
<mxCell id="ai175" value="FFmpeg 인코딩·썸네일" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5C6BC0;strokeWidth=1.3;fontSize=10;shadow=1;" vertex="1" parent="1"><mxGeometry x="1008" y="1040" width="380" height="38" as="geometry"/></mxCell>
<mxCell id="ai177" value="PySceneDetect 장면 분할" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5C6BC0;strokeWidth=1.3;fontSize=10;shadow=1;" vertex="1" parent="1"><mxGeometry x="1008" y="1090" width="380" height="38" as="geometry"/></mxCell>
<mxCell id="ai179" value="CLIP 하이라이트 스코어링" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5C6BC0;strokeWidth=1.3;fontSize=10;shadow=1;" vertex="1" parent="1"><mxGeometry x="1008" y="1140" width="380" height="38" as="geometry"/></mxCell>
<mxCell id="ai181" value="YOLO 얼굴·차번호 블러" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5C6BC0;strokeWidth=1.3;fontSize=10;shadow=1;" vertex="1" parent="1"><mxGeometry x="1008" y="1190" width="380" height="38" as="geometry"/></mxCell>
<mxCell id="ai183" value="pHash 중복 검사" style="rounded=1;arcSize=6;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5C6BC0;strokeWidth=1.3;fontSize=10;shadow=1;" vertex="1" parent="1"><mxGeometry x="1008" y="1240" width="380" height="38" as="geometry"/></mxCell>
<mxCell id="aiout" value="산출: 인코딩본·썸네일 → S3  ·  videos.processing_status = READY  ·  하이라이트 구간 메타" style="text;html=1;strokeColor=none;fillColor=none;fontSize=10;fontStyle=2;fontColor=#5C6BC0;" vertex="1" parent="1"><mxGeometry x="946" y="1290" width="503" height="18" as="geometry"/></mxCell>
<mxCell id="e174" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=block;endSize=5;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="ai172" target="ai173"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e176" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=block;endSize=5;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="ai173" target="ai175"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e178" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=block;endSize=5;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="ai175" target="ai177"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e180" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=block;endSize=5;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="ai177" target="ai179"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e182" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=block;endSize=5;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="ai179" target="ai181"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e184" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=block;endSize=5;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="ai181" target="ai183"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e199" style="html=1;strokeColor=#B4B9BE;endArrow=none;" edge="1" parent="1" source="a196" target="env_ui"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e200" style="html=1;strokeColor=#B4B9BE;endArrow=none;" edge="1" parent="1" source="a197" target="g63"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e201" style="html=1;strokeColor=#B4B9BE;endArrow=none;" edge="1" parent="1" source="a198" target="g69"><mxGeometry relative="1" as="geometry"/></mxCell>
<mxCell id="e202" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4E7EA8;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#4E7EA8;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g1" target="g74"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e203" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#3E9E6D;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#3E9E6D;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g7" target="g80"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e204" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#3E9E6D;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#3E9E6D;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g7" target="g84"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e205" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#3E9E6D;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#3E9E6D;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g7" target="g89"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e206" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#3E9E6D;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#3E9E6D;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g7" target="g117"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e207" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#E58E1C;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#E58E1C;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g16" target="g80"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e208" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#E58E1C;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#E58E1C;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g16" target="g84"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e209" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#E58E1C;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#E58E1C;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g16" target="g93"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e210" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#C15848;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#C15848;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g22" target="g84"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e211" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A6ABF;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A6ABF;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g27" target="g80"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e212" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A6ABF;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A6ABF;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g27" target="g84"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e213" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A6ABF;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A6ABF;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g27" target="g93"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e214" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A6ABF;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A6ABF;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g27" target="g117"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e215" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A6ABF;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A6ABF;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g27" target="g97"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e216" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#D96AA1;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#D96AA1;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g34" target="g97"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e217" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#D6A34A;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#D6A34A;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g38" target="g104"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e218" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#2FA4C7;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#2FA4C7;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g48" target="g111"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e219" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#2FA4C7;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#2FA4C7;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g48" target="g117"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e220" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#2FA4C7;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#2FA4C7;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g48" target="g123"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e221" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A9086;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#4A9086;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g57" target="g123"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e222" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A9086;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#4A9086;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g57" target="g74"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e223" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#37474F;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#37474F;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g63" target="g97"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e224" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#37474F;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#37474F;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g63" target="g89"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e225" value="미설계" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8D6E63;strokeWidth=1.2;endArrow=open;endSize=6;dashed=1;dashPattern=6 4;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8D6E63;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g69" target="g128"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e226" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g74" target="s131"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e227" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g123" target="s132"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e228" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g80" target="s133"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e229" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g84" target="s134"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e230" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g84" target="s136"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e231" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g89" target="s135"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e232" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g93" target="s136"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e233" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g104" target="s136"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e234" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g97" target="s139"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e235" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g111" target="s137"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e236" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g117" target="s138"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e237" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s131" target="g140"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e238" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s132" target="g140"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e239" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s133" target="g143"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e240" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s135" target="g151"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e241" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s136" target="g147"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e242" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s137" target="g160"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e243" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s137" target="g143"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e244" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s138" target="g156"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e245" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s139" target="g165"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell><mxCell id="eMod" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g97" target="svcMod"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell><mxCell id="eModRep" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="svcMod" target="g165"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell><mxCell id="eNotifApi" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="gNotif" target="svcNotif"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell><mxCell id="eNotifRep" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="svcNotif" target="gNotifRep"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e246" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g140" target="st169"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e247" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g143" target="st169"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e248" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g147" target="st169"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e249" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g151" target="st169"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e250" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g156" target="st169"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e251" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g160" target="st169"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e252" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="g165" target="st169"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e253" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.7;entryX=0;entryY=0.5;" edge="1" parent="1" source="s134" target="st170"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1520" y="411"/><mxPoint x="1520" y="522"/></Array></mxGeometry></mxCell>
<mxCell id="e254" value="presigned·재생" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8A9099;strokeWidth=1.2;endArrow=open;endSize=6;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#8A9099;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.15;entryX=0;entryY=0.5;" edge="1" parent="1" source="s136" target="st171"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1520" y="535"/><mxPoint x="1520" y="672"/></Array></mxGeometry></mxCell>
<mxCell id="e255" value="Kafka video.uploaded" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=open;endSize=6;dashed=1;dashPattern=6 4;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#5C6BC0;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;entryX=0.52;entryY=0;" edge="1" parent="1" source="s136" target="aienv"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1207" y="658"/></Array></mxGeometry></mxCell>
<mxCell id="e256" value="인코딩본·썸네일" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=open;endSize=6;dashed=1;dashPattern=6 4;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#5C6BC0;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.57;entryX=1;entryY=0.5;" edge="1" parent="1" source="aienv" target="st171"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1850" y="1140"/><mxPoint x="1850" y="672"/></Array></mxGeometry></mxCell>
<mxCell id="e257" value="READY 갱신" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#5C6BC0;strokeWidth=1.2;endArrow=open;endSize=6;dashed=1;dashPattern=6 4;jumpStyle=arc;jumpSize=8;fontSize=9;fontColor=#5C6BC0;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.33;entryX=1;entryY=0.5;" edge="1" parent="1" source="aienv" target="st169"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1862" y="1040"/><mxPoint x="1862" y="372"/></Array></mxGeometry></mxCell>
</root></mxGraphModel></diagram></mxfile>
