시작하기: 첫 번째 인터랙티브 JavaScript 다이어그램 만들기

발행: (2026년 1월 18일 오후 11:43 GMT+9)
10 min read
원문: Dev.to

I’m ready to translate the article for you, but I need the text of the article itself. Could you please paste the content you’d like translated (excluding the source line you already provided)? Once I have the full text, I’ll keep the source link at the top and translate the rest into Korean while preserving all formatting, markdown, and technical terms.

Overview

이 가이드에서는 처음부터 최소하지만 강력한 JavaScript 다이어그램 애플리케이션을 만드는 단계를 차근차근 살펴봅니다. 여러분이 만들게 될 앱을 미리 살펴보세요:

An interactive JavaScript diagramming application

완성된 앱은 MindFusion JavaScript Diagram library를 사용하여 사용자가 다음을 할 수 있도록 합니다:

  • 드래그‑앤‑드롭으로 흐름도 모양 만들기.
  • 실시간으로 노드와 링크 색상 맞춤 설정.
  • 다이어그램 요소 내에서 텍스트 직접 편집.
  • 현재 다이어그램을 파일로 저장하고 다시 불러오기.

준비되셨나요? 바로 시작해봅시다!

프로젝트 설정

시간을 절약하기 위해, 이미 준비된 MindFusion의 스타터 프로젝트를 기반으로 작업합니다. 이 프로젝트는 사전 구성된 바닐라 JavaScript 환경을 갖춘 견고한 기반을 제공합니다.

먼저 GitHub에서 프로젝트를 클론하고 개발 서버를 시작합니다:

# Clone the repository
git clone https://github.com/MindFusionComponents/diagram-starter-vanilla

# Navigate into the project directory
cd diagram-starter-vanilla

# Install dependencies
npm install

# Start the local server
npm start

서버가 실행되면 다이어그램 캔버스, 개요 패널, 도형 팔레트, 줌 컨트롤이 포함된 기본 스타터 애플리케이션을 확인할 수 있습니다.

시작용 JavaScript 다이어그램 애플리케이션

백엔드는 정적 파일을 제공하는 간단한 Express 서버(server.js)이며, 우리는 index.htmlindex.js에 있는 프런트엔드 부분에 주력할 것입니다.

다이어그램 구성 요소 초기화

다이어그램 및 관련 UI 구성 요소는 index.js에서 초기화됩니다. 각 구성 요소는 index.html에 있는 HTML 요소( <canvas> 또는 <div> )와 연결됩니다.

예를 들어, 메인 DiagramView는 ID가 "diagram"<canvas> 요소와 연결하여 생성합니다:

// create a DiagramView component that wraps the "diagram" canvas
var diagramView = MindFusion.Diagramming.DiagramView.create(document.getElementById("diagram"));
var diagram = diagramView.diagram;

마찬가지로 OverviewPalette 구성 요소도 각각의 요소에 연결됩니다:

// create an Overview component
var overview = MindFusion.Diagramming.Overview.create(document.getElementById("overview"));
overview.diagramView = diagramView;

// The Palette component lets users create shapes via drag‑and‑drop
var palette = MindFusion.Diagramming.Controls.Palette.create(document.getElementById("palette"));

사전 정의된 도형을 팔레트에 쉽게 추가할 수 있습니다. 아래 코드는 Flowchart Shapes 카테고리를 추가하고 Start, Input, Process, Decision과 같은 일반적인 도형을 채워 넣습니다.

palette.addCategory("Flowchart Shapes");
var shapes = ["Start", "Input", "Process", "Decision"];
for (var i = 0; i < shapes.length; i++) {
    // Add each shape to the palette (implementation details omitted)
}

(추가 구현 세부 사항은 원본 가이드에 계속됩니다.)

노드 외관 맞춤

노드 색상 선택기 예시

그런 다음 이러한 입력 요소에 대한 change 이벤트를 청취합니다. 새 색상이 선택되면 전역 변수를 업데이트하고 현재 선택된 모든 노드에 새 색상을 적용합니다.

// Global variable for the default node brush color
let defaultNodeBrushColor = '#e0e9e9';

// Get the color‑picker element
const nodeColorPicker = document.getElementById('nodeColorPicker');

// Update the default color when the picker changes
nodeColorPicker.addEventListener('change', (event) => {
    defaultNodeBrushColor = event.target.value;

    // Apply the new color to every selected node
    diagram.selection.nodes.forEach(node => {
        node.brush = defaultNodeBrushColor;
    });
});

새로 생성된 노드도 이 색상을 사용하도록 하려면 nodeCreated 이벤트를 처리합니다:

// Apply the default style to nodes as they are created
diagram.nodeCreated.addEventListener((sender, args) => {
    args.node.brush = defaultNodeBrushColor;
    // …apply other default style properties here…
});

팁: nodeCreating 이벤트를 처리하면 사용자가 노드를 그리는 동안 실시간 미리보기가 제공되어 보다 부드러운 경험을 얻을 수 있습니다.

링크 모양 사용자 정의

기본적으로 routeLinks 속성이 활성화되어 있어, 링크가 자동으로 수직·수평 구간을 만들어 노드와 교차하지 않도록 합니다.

링크의 머리 모양도 제어할 수 있습니다. 우리 앱에서는 체크박스를 사용해 링크에 “Triangle” 화살표 머리 모양을 적용할지 여부를 결정합니다. 화살표 머리를 없애려면 headShape 속성을 null 로 설정합니다.

let defaultLinkHeadShape = 'Triangle';
const linkHeadCheckbox = document.getElementById('linkHeadCheckbox');

// 체크박스 상태가 바뀔 때 기본 머리 모양을 업데이트
linkHeadCheckbox.addEventListener('change', (event) => {
    defaultLinkHeadShape = event.target.checked ? 'Triangle' : null;

    // 선택된 모든 링크에 변경 적용
    diagram.selection.links.forEach(link => {
        link.headShape = defaultLinkHeadShape;
    });
});

깨끗한 연결을 위한 앵커 패턴 사용

다이어그램을 더 깔끔하게 보이도록 하려면 **AnchorPattern**을 사용하여 링크가 노드에 연결될 수 있는 위치를 제한합니다. 앵커 패턴은 노드 표면의 상대 좌표(0‑100)로 정의된 AnchorPoint 객체들의 집합입니다.

아래 패턴은 네 면 각각의 중앙에만 연결을 허용합니다:

// Define an anchor pattern that snaps to the middle of each side
const nodeAnchorPattern = new AnchorPattern([
    new AnchorPoint(50, 0,   true, true), // Center Top
    new AnchorPoint(100, 50, true, true), // Center Right
    new AnchorPoint(50, 100, true, true), // Center Bottom
    new AnchorPoint(0, 50,   true, true)  // Center Left
]);

// Later, when creating a node…
node.anchorPattern = nodeAnchorPattern;

MindFusion JavaScript 다이어그램 라이브러리에서 AnchorPattern이 설정된 노드

이 패턴을 적용하면 링크가 이러한 연결 지점에 깔끔하게 스냅됩니다.

초기 다이어그램 만들기

사용자에게 도움이 되는 시작점을 제공하기 위해 페이지가 처음 로드될 때 간단한 의사결정 다이어그램을 생성합니다. diagram.factory 객체는 노드와 링크 생성을 단순화합니다.

// Create a start node using the factory
const startNode = diagram.factory.createShapeNode(95, 10, 30, 15);
startNode.text          = "Start";
startNode.shape         = 'Ellipse';
startNode.brush         = "#DB3955";
startNode.textColor     = "#f0f0f0";
startNode.anchorPattern = nodeAnchorPattern;

팩토리를 사용해 만든 노드는 자동으로 다이어그램의 items 컬렉션에 추가됩니다.

비디오 튜토리얼

이 튜토리얼의 비디오 버전도 제공됩니다. 여기에서 확인하세요:

튜토리얼 비디오 보기

이 가이드가 인터랙티브 JavaScript 다이어그램을 시작하는 데 도움이 되길 진심으로 바랍니다! 질문이 있거나 어려움에 부딪히거나, 만든 것을 공유하고 싶다면 아래에 댓글을 남겨 주세요. 여러분의 이야기를 듣고 싶습니다.

결론

그리고 끝! 이제 기능이 풍부한 JavaScript 다이어그램 애플리케이션을 만들었습니다:

  • 기본 템플릿에서 시작했습니다
  • 사용자 정의 도형과 실시간 스타일링을 추가했습니다
  • 깔끔한 연결을 위한 앵커 포인트를 구현했습니다
  • 미리 정의된 초기 다이어그램을 제공했습니다

이 프로젝트의 최종 버전을 여기에서 다운로드할 수 있습니다:
diagram-starter-2026.zip

즐거운 코딩 되세요!

추가 리소스

Back to Blog

관련 글

더 보기 »

광섬유 스플라이스

인터랙티브하고, 하나 스플라이스해 보세요! React로 작성되었으며, 중간 정도 무겁고 완전히 모바일 최적화된 것은 아닙니다. Comments URL: https://news.ycombinator.com/item...

jQuery 4.0.0 출시

번역할 텍스트를 제공해 주시겠어요? 텍스트를 알려주시면 한국어로 번역해 드리겠습니다.