+ {/* ─── 1단계: URL 입력 ─── */}
+
+
+
updateConfig("url", e.target.value)}
+ placeholder="https://example.com"
+ className="h-8 text-sm"
+ />
+
임베드할 외부 웹페이지 주소를 입력하세요
+
+
+ {/* ─── 2단계: SSO 연동 ─── */}
+
+
+
+
+
+
SSO 연동
+
현재 로그인 토큰을 URL에 자동 전달해요
+
+
+
updateConfig("useSSO", checked)} />
+
+
+ {config.useSSO && (
+
+
+
+
+
+
+
+
전달 방식
+
URL 쿼리 파라미터로 JWT가 전달됩니다.
+
?sso_token=eyJhbGciOi...
+
+
+
+
JWT Payload 구조
+
+
+ userId
+ 사용자 ID
+
+
+ userName
+ 사용자 이름
+
+
+ companyCode
+ 회사 코드
+
+
+ role
+ 권한
+
+
+
+
+
+
+
수신측 예시 코드
+
+
+
+ {`const token = url.searchParams
+ .get("sso_token");
+const payload = JSON.parse(
+ atob(token.split(".")[1])
+);
+// payload.userId
+// payload.companyCode`}
+
+
+
+
+
+ )}
+
+
+ {/* ─── 3단계: 표시 옵션 ─── */}
+
+
+
+
테두리 표시
+
웹 뷰 주변에 테두리를 표시해요
+
+
updateConfig("showBorder", checked)}
+ />
+
+
+
+
+
전체 화면 허용
+
임베드된 페이지에서 전체 화면 전환이 가능해요
+
+
updateConfig("allowFullscreen", checked)}
+ />
+
+
+
+ {/* ─── 4단계: 고급 설정 (기본 접혀있음) ─── */}
+
+
+
+
+
+
+
+
+
샌드박스 모드
+
보안을 위해 iframe 실행 환경을 제한해요
+
+
updateConfig("sandbox", checked)}
+ />
+
+
+
+ 모서리 둥글기
+ updateConfig("borderRadius", e.target.value)}
+ placeholder="8px"
+ className="h-7 w-[100px] text-xs"
+ />
+
+
+
+ 로딩 텍스트
+ updateConfig("loadingText", e.target.value)}
+ placeholder="로딩 중..."
+ className="h-7 w-[140px] text-xs"
+ />
+
+
+
+
+
+ );
+};
+
+V2WebViewConfigPanel.displayName = "V2WebViewConfigPanel";
+
+export default V2WebViewConfigPanel;
diff --git a/frontend/lib/registry/components/index.ts b/frontend/lib/registry/components/index.ts
index f3f4e552..650c0be8 100644
--- a/frontend/lib/registry/components/index.ts
+++ b/frontend/lib/registry/components/index.ts
@@ -120,6 +120,7 @@ import "./v2-status-count/StatusCountRenderer"; // 상태별 카운트 카드
import "./v2-process-work-standard/ProcessWorkStandardRenderer"; // 공정 작업기준
import "./v2-item-routing/ItemRoutingRenderer"; // 품목별 라우팅
import "./v2-shipping-plan-editor/ShippingPlanEditorRenderer"; // 출하계획 동시등록
+import "./v2-web-view/V2WebViewRenderer"; // 외부 웹페이지 임베딩 (SSO 지원)
/**
* 컴포넌트 초기화 함수
diff --git a/frontend/lib/registry/components/v2-web-view/V2WebViewComponent.tsx b/frontend/lib/registry/components/v2-web-view/V2WebViewComponent.tsx
new file mode 100644
index 00000000..c7118beb
--- /dev/null
+++ b/frontend/lib/registry/components/v2-web-view/V2WebViewComponent.tsx
@@ -0,0 +1,195 @@
+"use client";
+
+import React, { useState, useEffect, useRef } from "react";
+import { ComponentRendererProps } from "../../types";
+import { V2WebViewConfig } from "./types";
+import { filterDOMProps } from "@/lib/utils/domPropsFilter";
+
+export interface V2WebViewComponentProps extends ComponentRendererProps {}
+
+export const V2WebViewComponent: React.FC