서버와 함께 작업하기
JavaScript Kanban은 클라이언트 측 데이터와 서버 측 데이터를 모두 처리할 수 있습니다. 특별한 백엔드 요구 사항이 없으므로 REST API를 지원하는 모든 백엔드 플랫폼과 연결할 수 있습니다.
이 위젯은 기본적으로 Go 및 Node 백엔드 옵션을 제공하며, 커스텀 서버 스크립트도 지원합니다.
RestDataProvider
JavaScript Kanban은 백엔드 작업을 위한 REST API를 완벽하게 지원하는 RestDataProvider 서비스를 제공합니다. 이 서비스로 서버와 쉽게 통신하면서 다음과 같은 데이터 작업을 수행할 수 있습니다:
- "add-card"
- "add-column"
- "add-comment"
- "add-row"
- "add-link"
- "delete-card"
- "delete-column"
- "delete-comment"
- "delete-row"
- "delete-link"
- "move-card"
- "move-column"
- "move-row"
- "update-card"
- "update-column"
- "update-comment"
- "update-row"
REST 메서드
RestDataProvider 서비스에는 데이터를 동적으로 불러오는 여러 REST 메서드가 포함되어 있습니다:
getCards()
- 카드 데이터를 담은 promise 반환getColumns()
- 컬럼 데이터를 담은 promise 반환getLinks()
- 링크 데이터를 담은 promise 반환getRows()
- 행 데이터를 담은 promise 반환getUsers()
- 사용자 데이터를 담은 promise 반환
백엔드와 상호작용
서버에 연결하려면 RestDataProvider를 서버 스크립트에 연결하면 됩니다. 내장 백엔드를 사용하는 경우, 아래에서 확인할 수 있습니다:
직접 백엔드를 구현하여 사용할 수도 있습니다.
커스텀 백엔드를 사용하는 경우, REST API 경로 섹션을 참고하세요.
RestDataProvider를 백엔드에 연결하는 방법은 간단합니다. kanban.RestDataProvider 생성자에 서버 URL을 전달하면 됩니다.
const url = "https://some_backend_url";
const restProvider = new kanban.RestDataProvider(url);
Promise.all([
restProvider.getUsers(),
restProvider.getCards(),
restProvider.getColumns(),
restProvider.getLinks(),
restProvider.getRows()
]).then(([users, cards, columns, links, rows]) => {
const board = new kanban.Kanban("#root", {
cards,
columns,
links,
rows,
rowKey: "type",
editorShape: [
...kanban.defaultEditorShape,
{
type: "multiselect",
key: "users",
label: "Users",
values: users
}
]
});
board.api.setNext(restProvider);
});
데이터 항목 추가, 삭제 등 서버로 요청을 보내기 위한 작업을 활성화하려면, RestDataProvider를 api.setNext()를 사용해 Event Bus 체인에 포함해야 합니다.
예제
아래는 RestDataProvider를 Go 백엔드에 연결하여 서버에서 데이터를 로드하는 예시입니다:
다중 사용자 백엔드
Kanban 보드는 다양한 규모의 기업에서 널리 사용되며, 다중 사용자 지원 기능을 통해 협업 경험이 크게 향상됩니다. 이 기능을 사용하면 여러 사용자가 동시에 Kanban 보드의 같은 카드를 실시간으로 관리할 수 있으며 페이지 새로고침 없이도 변경 사항을 즉시 확인할 수 있습니다. 이를 통해 협업이 더욱 원활해지고, 모든 사용자가 바뀐 내용을 실시간으로 확인할 수 있습니다.
다중 사용자 백엔드를 설정하려면, Kanban 보드 초기화 전에 서버에서 인증을 받아야 합니다. 이를 위해 간단한 login(url: string)
함수를 사용할 수 있습니다:
const login = (url) => {
var token = sessionStorage.getItem("login-token");
if (token) {
return Promise.resolve(token);
}
return fetch(url + "/login?id=1")
.then(raw => raw.text())
.then(token => {
sessionStorage.setItem("login-token", token);
return token;
});
};
이 함수는 인증 데모용이며, 모든 사용자가 ID 1로 인증됩니다. 로그인 후 서버에서 토큰을 반환하며, 이후의 모든 요청에 이 토큰을 포함해야 합니다. RestDataProvider.setHeaders()
메서드를 사용하면 커스텀 헤더를 각 요청에 자동으로 추가할 수 있습니다. 기본적으로 서버는 "Remote-Token":<value>
헤더에 토큰을 기대합니다.
login(url).then(token => {
// rest provider 초기화
const restProvider = new kanban.RestDataProvider(url);
// 커스텀 헤더로 토큰 설정
restProvder.setHeaders({
"Remote-Token": "eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdC...",
});
// 위젯 초기화...
});
토큰을 받은 후 Kanban 위젯은 다음과 같이 초기화할 수 있습니다:
// 위젯 초기화...
Promise.all([
restProvider.getCards(),
restProvider.getColumns(),
restProvider.getLinks(),
restProvider.getRows(),
]).then(([cards, columns, links, rows]) => {
const board = new Kanban("#root", {
cards,
columns,
links,
rows,
rowKey: "row",
cardShape,
editorShape,
});
// 클라이언트 데이터를 서버로 저장
board.api.setNext(restProvider);
// 다중 사용자 초기화...
});
위젯 설정 후, WebSocket을 추가하여 서버 이벤트를 수신해야 합니다. 방법은 다음과 같습니다:
// 다중 사용자 초기화...
// 서버 이벤트에 대한 클라이언트 핸들러 가져오기
const handlers = kanbanUpdates(
board.api,
restProvider.getIDResolver()
);
// 서버 이벤트에 연결
const events = new RemoteEvents(url + "/api/v1", token);
// 서버 이벤트에 클라이언트 핸들러 연결
events.on(handlers);
handlers
- 서버 이벤트에 반응하는 클라이언트 함수events
- 서버에 연결되어 이벤트를 수신하는 객체RemoteEvents.on(handlers)
- 핸들러를 서버 이벤트에 연결
이처럼 다중 사용자 백엔드를 추가하면 여러 사용자가 동시에 작업하고, UI에서 즉시 변경 사항을 확인할 수 있습니다.
예제
아래는 다중 사용자 백엔드를 설정하여 사용자가 서로의 변경 사항을 실시간으로 볼 수 있게 하는 예시입니다: