본문으로 건너뛰기

dhtmlxScheduler와 Svelte 연동

이 가이드는 Svelte의 기본 개념과 패턴에 대한 이해를 전제로 합니다. 만약 익숙하지 않다면, Svelte 공식 문서의 시작하기 튜토리얼을 참고하세요.

DHTMLX Scheduler는 Svelte와 잘 호환됩니다. 동작하는 예제는 GitHub에서 확인할 수 있습니다: DHTMLX Scheduler with Svelte Demo.

프로젝트 생성

새 프로젝트를 만들기 전에 Vite (선택 사항)와 Node.js가 설치되어 있는지 확인하세요.

Vite로 Svelte 프로젝트를 시작하려면 다음 명령어를 실행하세요:

npm create vite@latest

자세한 내용은 관련 문서를 참고하세요.

의존성 설치

다음으로 앱 디렉터리로 이동합니다. 프로젝트 이름을 scheduler-svelte로 하고, svelte 옵션을 선택하세요. 그런 다음 아래 명령어를 실행합니다:

cd scheduler-svelte

이후, 원하는 패키지 매니저로 의존성을 설치하고 앱을 실행하세요:

  • yarn을 사용하는 경우:
yarn install
yarn dev
  • npm을 사용하는 경우:
npm install
npm run dev

Svelte 프로젝트가 http://localhost:5173에서 실행될 것입니다.

Scheduler Svelte app running

Scheduler 생성

DHTMLX Scheduler를 추가하려면 터미널에서 Ctrl+C를 눌러 앱을 중지하세요. 그 다음 Scheduler 패키지를 설치합니다.

1단계. 패키지 설치

라이브러리의 PRO 버전은 npm/yarn을 통해 당사 프라이빗 저장소에서 제공합니다. 액세스하려면 이 안내를 따르세요.

Evaluation 버전을 받았다면 다음과 같이 설치하세요:

  • npm:
npm install @dhx/trial-scheduler
  • yarn:
yarn add @dhx/trial-scheduler

또는, 라이브러리의 zip 패키지는 npm 모듈 구조이므로 로컬 폴더에서 설치할 수도 있습니다.

2단계. 컴포넌트 생성

Scheduler를 앱에 추가하기 위해 새로운 Svelte 컴포넌트를 만듭니다. src/ 디렉터리에 Scheduler.svelte 파일을 생성하세요.

소스 파일 임포트

Scheduler.svelte를 열고 Scheduler 관련 파일을 임포트합니다. 설치 방식에 따라 다릅니다:

  • 로컬 폴더에서 설치한 경우, 임포트는 다음과 같습니다:
Scheduler.svelte
import { Scheduler } from "dhtmlx-scheduler";
import "dhtmlx-scheduler/codebase/dhtmlxscheduler.css";
  • trial 버전을 사용하는 경우, 임포트는 다음과 같습니다:
Scheduler.svelte
import { Scheduler } from "@dhx/trial-scheduler";
import "@dhx/trial-scheduler/codebase/dhtmlxscheduler.css";

이 가이드에서는 trial 버전을 사용합니다.

컨테이너 지정 및 Scheduler 추가

Scheduler를 표시하려면 렌더링할 컨테이너 엘리먼트를 정의해야 합니다. 아래 코드를 참고하세요:

Scheduler.svelte
<script>
import { onMount } from "svelte";
import { Scheduler } from "@dhx/trial-scheduler";
import "@dhx/trial-scheduler/codebase/dhtmlxscheduler.css";

let scheduler;
let container;
onMount(() => {
scheduler = Scheduler.getSchedulerInstance();
scheduler.skin = "terrace";
scheduler.init(container, new Date(2023, 9, 6), "week");

return () => scheduler.destructor();
});
</script>

<div bind:this="{container}"></div>

Scheduler 컨테이너가 전체 body를 채우도록 하려면, ***src/***의 app.css에서 기본 스타일을 제거하고 아래와 같이 추가하세요:

src/app.css
body {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
}

3단계. 앱에 Scheduler 추가

다음으로 Scheduler 컴포넌트를 앱에 포함합니다. src/App.svelte를 열고 기본 내용을 아래와 같이 교체하세요:

App.svelte
<script>
import Scheduler from "./Scheduler.svelte";
</script>

<Scheduler/>

앱을 실행하면 빈 Scheduler가 화면에 나타납니다:

Scheduler Svelte init

4단계. 데이터 제공

이벤트를 표시하려면 Scheduler에 데이터를 전달해야 합니다. ***src/***에 data.js 파일을 만들고 샘플 데이터를 추가하세요:

src/data.js
export function getData() {
const data = [
{
start_date: "2024-06-10 6:00",
end_date: "2024-06-10 8:00",
text: "Event 1",
id: 1,
},
{
start_date: "2024-06-13 10:00",
end_date: "2024-06-13 18:00",
text: "Event 2",
id: 2,
},
];
return data;
}

그런 다음, 이 데이터를 App.svelte에서 Scheduler 컴포넌트에 prop으로 전달하세요:

App.svelte
<script>
import Scheduler from "./Scheduler.svelte";
import { getData } from "./data.js";
</script>

<Scheduler data="{getData()}" />

Scheduler.svelte 내부에서 **scheduler.parse()**를 사용해 prop을 적용합니다:

Scheduler.svelte
<script>
import { onMount } from "svelte";

import { Scheduler } from "@dhx/trial-scheduler";
import "@dhx/trial-scheduler/codebase/dhtmlxscheduler.css"
export let data; /*!*/

let scheduler;
let container;
onMount(() => {
scheduler = Scheduler.getSchedulerInstance();
scheduler.skin = "terrace"
scheduler.init(container, new Date(2024, 5, 10), "week");

return () => scheduler.destructor();
});

$: scheduler?.parse(data); /*!*/
</script>

<div bind:this="{container}"></div>

앱을 새로고침하면 이벤트가 표시된 Scheduler가 나타납니다:

Scheduler Svelte events

5단계. 데이터 저장

Scheduler에서 변경된 내용을 처리하려면 dataProcessor 핸들러를 사용하세요. 이 핸들러는 서버 백엔드와의 통신을 가능하게 해줍니다. 핸들러는 함수 또는 라우터 객체가 될 수 있습니다. dhtmlxScheduler는 Promise 응답을 지원하므로, 작업이 올바르게 완료될 때까지 대기합니다.

**createDataProcessor()**로 DataProcessor를 생성하고 변경 사항을 다음과 같이 감지할 수 있습니다:

scheduler.createDataProcessor(function(entity, action, data, id) {
scheduler.message(`${​entity} ${​action}`);
});

백엔드에서 새 레코드 생성 시 이벤트 ID가 변경되는 경우(일반적인 케이스), Promise가 (id: databaseId) 또는 (tid: databaseId) 객체를 반환해야 Scheduler가 해당 이벤트를 올바르게 갱신할 수 있습니다. 자세한 내용은 서버 사이드 연동을 참고하세요.

이로써 Svelte Scheduler 설정이 완료되었습니다. 전체 데모는 GitHub에서 확인할 수 있습니다: svelte-scheduler-demo.

XSS, CSRF 및 SQL 인젝션 공격

Scheduler 자체는 SQL 인젝션, XSS, CSRF와 같은 위협에 대한 보호 기능을 제공하지 않습니다. 애플리케이션 보안은 백엔드 개발자의 책임입니다.

컴포넌트의 취약점과 권장 보안 대책은 Application Security 문서를 참고하세요.

Need help?
Got a question about the documentation? Reach out to our technical support team for help and guidance. For custom component solutions, visit the Services page.