Div를 사용해 웹 애플리케이션에 Wyn 대시보드 임베드하기

2025년 9월 28일

임베디드 BI란?

임베디드 BI(Embedded BI)는 BI 솔루션을 기존의 비즈니스 프로세스 소프트웨어 안에 통합하는 것을 의미합니다. 독립 실행형 앱 대신 임베디드 BI 를 활용하면 조직의 애플리케이션 내부에서 직접 비즈니스 인텔리전스를 사용할 수 있습니다.

임베디드 BI는 일상 운영부터 장기 전략 수립까지 동일한 업무 환경에서 실행 가능한 인사이트를 제공하여 의사결정을 가속화합니다. Wyn의 Dashboard ViewerDesigner 는 두 가지 방식으로 임베드할 수 있습니다:

Wyn Dashboard Viewer 스크린샷
Viewer
Wyn Dashboard Designer 스크린샷
Designer

Wyn Dashboards API

이 글에서는 div와 Wyn Dashboards API로 Viewer/Designer를 임베드하는 과정을 단계별로 소개합니다.

카테고리 & 대시보드 가져오기

먼저 Wyn 서버에 저장된 카테고리와 대시보드 목록을 GraphQL로 가져옵니다.

GraphQL 요청 함수

  
 // jQuery ajax를 활용한 GraphQL 요청
function graphqlRequest(query) {
  return $.ajax({
    url: wynUrl + '/api/graphql?token=' + token,
    type: 'POST',
    data: JSON.stringify({ query }),
    dataType: 'json',
    contentType: 'application/json',
    processData: true,
    headers: getDefaultHeaders(),
    xhrFields: { withCredentials: true }
  });
} 

카테고리 가져오기

  
 function getCategoriesList() {
  return graphqlRequest(
    'query { ' +
      'tags { ' +
        'id, name, parentId, color, iconCssClass, isFavorites ' +
      '} ' +
    '}'
  ).then(function (result) {
    console.log(result);
    var categoriesList = getValue(result, 'data.tags') || [];
    return categoriesList;
  });
} 

대시보드 가져오기

  
 function getDashboardsList() {
  return graphqlRequest(
    'query { ' +
      'documenttypes(key: "dbd") { ' +
        'documents(orderby: "-created") { ' +
          'id, description, type, title, ' +
          'tags { id, name }, ' +
          'created_by { name }, created, ' +
          'modified_by { name }, modified ' +
        '} ' +
      '} ' +
    '}'
  ).then(function (result) {
    console.log(result);
    var dashboardsList = getValue(result, 'data.documenttypes.0.documents') || [];
    return dashboardsList;
  });
} 
카테고리/대시보드 목록 UI 예시
예시: 목록 + 카드 UI

API 참조 (테마/스크립트)

Wyn Dashboards API는 Wyn Enterprise 서버 설치 시 함께 제공됩니다. Bootstrap처럼 스크립트와 테마 리소스를 추가하세요.

Wyn Dashboard 테마

  
 <link rel="stylesheet"
 href="http://<WynServerUrl>/api/themefiles/dashboard.vendor.css?theme=dark-forest&version=4.1.16187.0&plugin=dashboards" />
<link rel="stylesheet"
 href="http://<WynServerUrl>/api/themefiles/dashboard.app.css?theme=dark-forest&version=4.1.16187.0&plugin=dashboards" /> 

Wyn Dashboard 스크립트

  
 <script src="http://<WynServerUrl>/lib/polyfills.js"></script>
<script src="http://<WynServerUrl>/api/PluginAssets/dashboards-4.1.16187.0/dashboard.common.js"></script>
<script src="http://<WynServerUrl>/api/PluginAssets/dashboards-4.1.16187.0/dashboard.table.js"></script>
<script src="http://<WynServerUrl>/api/PluginAssets/dashboards-4.1.16187.0/dashboard.dialog.js"></script>
<script src="http://<WynServerUrl>/api/PluginAssets/dashboards-4.1.16187.0/dashboard.app.js"></script> 
참고 · 위 URL의 version 값은 서버에 설치된 Dashboards 플러그인 버전과 반드시 동일해야 합니다. (관리자 포털에서 확인)
대시보드 플러그인 버전 확인 예시

Viewer 생성 및 초기화

Viewer 인스턴스 생성

  
 var viewer = WynDashboards.create('DashboardViewer', {
  dashboardId: docId,         // 볼 대시보드 ID
  edition: 'EN',
  size: 'fitToScreen',
  actions: 'clearselection,annotation,analysispath',
  openfulldashboardmode: 'newwindow',
  containerFilterScope: '',
  version: '1.0.0',
  userId: username,           // 사용자명
  lng: 'en',
  baseUrl: wynUrl,            // Wyn 서버 URL
  token: token                // 액세스 토큰
}); 

Viewer 초기화

  
 viewer.initialize({
  container: document.querySelector('#viewer'),
  onClose: () => { /* 닫힘 이벤트 */ },
  onLoaded: (docName) => { /* 로드 완료 */ }
}); 

Designer 생성 및 초기화

Designer 인스턴스 생성

  
 var designer = WynDashboards.create('DashboardDesigner', {
  edition: 'EN',
  dashboardId: docId,
  enableDeveloperMode: true,
  containerFilterScope: '',
  version: '1.0.0',
  userId: username,
  lng: 'en',
  baseUrl: wynUrl,
  token: token
}); 
핵심 파라미터 · dashboardId (대시보드 ID), userId (사용자명), baseUrl (서버 주소), token (액세스 토큰)

Designer 초기화

  
 designer.initialize({
  container: document.querySelector('#designer'),
  onClose: () => { /* 닫힘 */ },
  onSave: (docName) => { /* 저장 */ },
  onLoaded: (docName) => { /* 로드 완료 */ }
}); 

임베드용 컨테이너

  
 <div id="designer"></div>
<div id="viewer"></div> 

개별 시나리오 임베드

전체 대시보드 대신 scenario 옵션으로 특정 시나리오만 임베드할 수 있습니다.

  
 var viewer = WynDashboards.create('DashboardViewer', {
  scenario: 'column-3',
  dashboardId: docId,
  edition: 'EN',
  size: 'fitToScreen',
  actions: 'clearselection,annotation,analysispath',
  openfulldashboardmode: 'newwindow',
  containerFilterScope: '',
  version: '1.0.0',
  userId: username,
  lng: 'en',
  baseUrl: wynUrl,
  token: token
}); 
개별 시나리오 임베드 예시
개별 시나리오 Viewer 예시

추가 리소스

최신 블로그 포스트

AI 환각 검증을 위한 데이터 시각화 분석
작성자: Wyn APAC 2025년 10월 29일
AI 데이터 분석 트렌드, 홀루시네이션 문제, 교차 검증의 중요성, 기존 BI 도구 한계와 Wyn Enterprise의 대안성을 심층적으로 다룬 기술 블로그입니다.
CFO-대시보드-BI
작성자: Wyn APAC 2025년 9월 29일
CFO 대시보드의 핵심 KPI(매출총이익, 영업이익, 순이익)와 MRR/ROE/ROA 등 지표를 시각화해 손익을 추적하고, 재무 건전성을 평가하는 방법을 소개합니다.
BI-경영대시보드
작성자: Wyn APAC 2025년 9월 29일
BI 대시보드 개요부터 CEO 대시보드 핵심 KPI, 부서별 인사이트, 도입 이점, FAQ까지 한 번에 정리했습니다. Wyn Enterprise 예시와 함께 살펴보세요.