dhtmlxGantt와 PHP:Slim 연동하기
이 튜토리얼은 Slim 4 프레임워크와 서버 측 RESTful API를 활용하여 PHP 기반 Gantt 차트를 만드는 모든 과정을 안내합니다.
이 튜토리얼은 Slim Framework v4.x를 사용합니다. 이전 버전을 사용 중이라면 Slim Framework v3.x 가이드를 참고하세요.
다른 플랫폼 및 프레임워크와의 통합에 대한 튜토리얼도 제공됩니다:
- dhtmlxGantt와 ASP.NET Core 사용하기
- dhtmlxGantt와 ASP.NET MVC
- dhtmlxGantt와 Node.js 연동하기
- dhtmlxGantt와 Python
- dhtmlxGantt와 PHP: Laravel 연동
- dhtmlxGantt와 Salesforce LWC 연동하기
- dhtmlxGantt와 Ruby on Rails 연동하기
이 가이드에서는 Slim 4 프레임워크를 라우팅에 사용하며, MySQL을 데이터 저장소로 활용합니다. CRUD 연산은 PDO를 통해 구현되며, 다른 프레임워크와 연동하기에도 유연하게 설계되어 있습니다.
전체 소스 코드는 GitHub에서 확인할 수 있습니다.
1단계. 프로젝트 초기화
프로젝트 생성
우리는 Slim 4에서 제공하는 스켈레톤 애플리케이션을 사용하여 시작합니다.
프로젝트를 가져오고 Composer를 이용해 의존성을 설치하세요:
php composer.phar create-project slim/slim-skeleton gantt-rest-php
만약 Composer가 시스템에 전역 설치되어 있다면 다음과 같이 실행할 수 있습니다:
composer create-project slim/slim-skeleton gantt-rest-php
이후, 프로젝트 폴더로 이동하여 웹 서버를 실행해 설정이 올바른지 확인하세요:
cd gantt-rest-php
php -S 0.0.0.0:8080 -t public public/index.php
이제 브라우저에서 http://127.0.0.1:8080 주소를 열어 Slim의 기본 환영 페이지가 보이는지 확인합니다.
2단계. Gantt 차트 페이지에 추가하기
다음 단계는 Gantt 차트를 표시할 페이지를 만드는 것입니다. 두 단계로 간단하게 진행됩니다.
뷰 생성하기
먼저, app/templates 폴더 내에 basic.html 파일을 생성합니다. 이 파일은 Gantt 차트와 데이터 로딩을 위한 기본 설정을 포함합니다.
전체 코드는 다음과 같습니다:
app/templates/basic.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charSet="utf-8"">
<script src="https://cdn.dhtmlx.com/gantt/edge/dhtmlxgantt.js"></script>
<link href="https://cdn.dhtmlx.com/gantt/edge/dhtmlxgantt.css" rel="stylesheet">
<style type="text/css">
html, body{
height:100%;
padding:0px;
margin:0px;
overflow: hidden;
}
</style>
</head>
<body>
<div id="gantt_here" style='width:100%; height:100%;'></div>
<script type="text/javascript">
gantt.init("gantt_here");
</script>
</body>
</html>
이렇게 하면 빈 Gantt 차트가 페이지에 표시됩니다. 사용자는 작업 및 링크를 생성/수정할 수 있지만, 페이지를 새로고침하면 변경 사항이 저장되지 않습니다.
라우트 설정
새 페이지를 브라우저에서 접근할 수 있도록 app/routes.php에 다음 라우트를 추가하세요:
app/routes.php
$app->get('/', function (Request $request, Response $response) {
$payload = file_get_contents(__DIR__.'/templates/basic.html');
$response->getBody()->write($payload);
return $response;
});
애플리케이션을 다시 시작합니다:
command line
php -S 0.0.0.0:8080 -t public public/index.php
이제 http://127.0.0.1:8080/ 주소를 브라우저에서 열면 Gantt 차트가 페이지에 표시됩니다.

3단계. 데이터베이스 설정
Gantt 차트가 표시되었으니, 다음 단계는 데이터베이스를 생성하고 애플리케이션과 연결하는 것입니다.
데이터베이스 생성
데이터베이스는 선호하는 MySQL 클라이언트(예: phpMyAdmin)를 사용하거나 콘솔에서 직접 생성할 수 있습니다. 아래는 두 개의 테이블이 포함된 간단한 데이터베이스를 생성하는 SQL 스크립트입니다.
CREATE DATABASE IF NOT EXISTS `gantt`;
USE `gantt`;
CREATE TABLE `gantt_links` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`source` int(11) NOT NULL,
`target` int(11) NOT NULL,
`type` varchar(1) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `gantt_tasks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(255) NOT NULL,
`start_date` datetime NOT NULL,
`duration` int(11) NOT NULL,
`progress` float NOT NULL,
`parent` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
데이터 베이스를 설정한 후, gantt_tasks 테이블에 테스트를 위한 샘플 데이터를 추가할 수 있습니다. 다음 SQL 명령을 사용하세요:
INSERT INTO `gantt_tasks` VALUES ('1', 'Project #1', '2020-03-31 00:00:00',
'4', '0.8', '0');
INSERT INTO `gantt_tasks` VALUES ('2', 'Task #1', '2020-03-31 00:00:00',
'3', '0.5', '1');
INSERT INTO `gantt_tasks` VALUES ('3', 'Task #2', '2020-04-01 00:00:00',
'2', '0.7', '1');
INSERT INTO `gantt_tasks` VALUES ('4', 'Task #3', '2020-04-02 00:00:00',
'2', '0', '1');
INSERT INTO `gantt_tasks` VALUES ('5', 'Task #1.1', '2020-04-03 00:00:00',
'3', '0.34', '2');
INSERT INTO `gantt_tasks` VALUES ('6', 'Task #1.2', '2020-04-03 13:22:17',
'2', '0.5', '2');
INSERT INTO `gantt_tasks` VALUES ('7', 'Task #2.1', '2020-04-04 00:00:00',
'3', '0.2', '3');
INSERT INTO `gantt_tasks` VALUES ('8', 'Task #2.2', '2020-04-05 00:00:00',
'2', '0.9', '3');
더 자세한 예시는 여기를 참고하세요.
프로젝트 설정이 완료되면, 다음 단계로 데이터를 로드하는 작업을 진행합니다.