You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@age.apache.org by em...@apache.org on 2022/02/07 00:00:37 UTC

[incubator-age-viewer] branch main updated: Remove All of trademarks

This is an automated email from the ASF dual-hosted git repository.

emotionbug pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-age-viewer.git


The following commit(s) were added to refs/heads/main by this push:
     new 63ed188  Remove All of trademarks
63ed188 is described below

commit 63ed1882e372ef8cdf6677e9850237650e586848
Author: Alex Kwak <ta...@kakao.com>
AuthorDate: Mon Feb 7 09:00:26 2022 +0900

    Remove All of trademarks
---
 .asf.yaml                                          |   1 -
 backend/package.json                               |   6 -
 backend/sql/graph_labels/AGENS.sql                 |  24 -
 backend/sql/label_count_edge/AGENS.sql             |  22 -
 backend/sql/label_count_vertex/AGENS.sql           |  21 -
 backend/sql/meta_edges/AGENS.sql                   |  23 -
 backend/sql/meta_nodes/AGENS.sql                   |  22 -
 backend/sql/property_keys/AGENS.sql                |  24 -
 backend/src/app.js                                 |   6 -
 backend/src/config/Flavors.js                      |   3 +-
 backend/src/controllers/FeatureController.js       |  77 ---
 backend/src/controllers/RemoteLoginController.js   |  41 --
 backend/src/controllers/cypherController.js        |   2 +-
 backend/src/models/GraphRepository.js              |   3 -
 backend/src/routes/FeatureRouter.js                |  32 --
 backend/src/routes/remoteLoginRouter.js            |  31 --
 backend/src/services/cypherService.js              |  22 +-
 backend/src/services/databaseService.js            |  64 +--
 backend/src/tools/SQLFlavorManager.js              |   4 +-
 backend/src/util/JsonBuilder.js                    |  22 +-
 backend/test/connectParam.js                       |  27 -
 backend/test/connector.api.test.js                 | 203 -------
 backend/test/cypher.api.test.js                    | 103 ----
 backend/test/cypher.service.test.js                | 196 -------
 backend/test/meta.api.test.js                      |  58 --
 backend/test/session.api.test.js                   |  69 ---
 frontend/src/app/store.js                          |  46 --
 .../cytoscape/CypherResultCytoscapeChart.jsx       |  45 +-
 .../frame/containers/ServerConnectContainer.js     |   4 +-
 .../frame/containers/ServerDisconnectContainer.js  |   4 +-
 .../frame/presentations/ContentsFrame.jsx          |  11 +-
 .../frame/presentations/ServerConnectFrame.jsx     |   9 +-
 .../frame/presentations/ServerDisconnectFrame.jsx  |  12 +-
 .../frame/presentations/ServerStatusFrame.jsx      |   4 +-
 .../sidebar/presentations/SidebarHome.jsx          |  18 -
 frontend/src/documents/tutorial/northwind.jsx      | 601 ---------------------
 frontend/src/features/database/DatabaseSlice.js    |  14 +-
 37 files changed, 83 insertions(+), 1791 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index cb18897..78734a5 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -13,7 +13,6 @@ github:
     - postgresql-extension
     - graphdb
     - multi-model-dbms
-    - agensgraph
     - age-database
   features:
     wiki: true
diff --git a/backend/package.json b/backend/package.json
index 5ba7b23..d026f59 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -11,11 +11,6 @@
   ],
   "scripts": {
     "test": "mocha -r @babel/register --exit --timeout 100000",
-    "test:connector": "mocha -r @babel/register --exit --timeout 10000 ./test/connector.api.test.js",
-    "test:metachart": "mocha -r @babel/register --exit --timeout 10000 ./test/meta.api.test.js",
-    "test:cypher": "mocha -r @babel/register --exit --timeout 10000 ./test/cypher.api.test.js",
-    "test:session": "mocha -r @babel/register --exit --timeout 10000 ./test/session.api.test.js",
-    "test:query": "mocha -r @babel/register --exit --timeout 10000 ./test/cypher.service.test.js",
     "test:ageParsing": "mocha -r @babel/register --exit --timeout 10000 ./test/ageParsing.test.js",
     "start": "babel-node src/bin/www",
     "start:dev": "nodemon --watch src/app.js --watch src/ --exec 'babel-node' src/bin/www",
@@ -23,7 +18,6 @@
     "start:production": "node ./build/bin/www.js"
   },
   "dependencies": {
-    "@bitnine-oss/ag-driver": "^0.1.0",
     "antlr4": "^4.9.2",
     "cookie-parser": "~1.4.5",
     "cors": "^2.8.5",
diff --git a/backend/sql/graph_labels/AGENS.sql b/backend/sql/graph_labels/AGENS.sql
deleted file mode 100644
index 887c424..0000000
--- a/backend/sql/graph_labels/AGENS.sql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-SELECT l.labid as la_oid, l.labname as la_name, l.labkind as la_kind
-FROM PG_CATALOG.AG_LABEL l
-         INNER JOIN PG_CATALOG.AG_GRAPH g ON g.oid = l.graphid
-WHERE g.graphname = $1
-  and l.labname not in ('ag_vertex', 'ag_edge')
diff --git a/backend/sql/label_count_edge/AGENS.sql b/backend/sql/label_count_edge/AGENS.sql
deleted file mode 100644
index 6905c2b..0000000
--- a/backend/sql/label_count_edge/AGENS.sql
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-SELECT SPLIT_PART(start::text, '.', 1) AS la_start, SPLIT_PART("end"::text, '.', 1) AS la_end, COUNT(1) AS la_count
-FROM %s
-GROUP BY SPLIT_PART(start::text, '.', 1), SPLIT_PART("end"::text, '.', 1)
diff --git a/backend/sql/label_count_vertex/AGENS.sql b/backend/sql/label_count_vertex/AGENS.sql
deleted file mode 100644
index 0bf4dc2..0000000
--- a/backend/sql/label_count_vertex/AGENS.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-SELECT COUNT(1) AS la_count
-FROM %s;
diff --git a/backend/sql/meta_edges/AGENS.sql b/backend/sql/meta_edges/AGENS.sql
deleted file mode 100644
index d60f23d..0000000
--- a/backend/sql/meta_edges/AGENS.sql
+++ /dev/null
@@ -1,23 +0,0 @@
-MATCH (v)-[e]-(v2) RETURN DISTINCT label(e) AS label, count(e) AS cnt
-ORDER BY label
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
--- %s %s
diff --git a/backend/sql/meta_nodes/AGENS.sql b/backend/sql/meta_nodes/AGENS.sql
deleted file mode 100644
index 704545b..0000000
--- a/backend/sql/meta_nodes/AGENS.sql
+++ /dev/null
@@ -1,22 +0,0 @@
-MATCH (v) RETURN DISTINCT label(v) AS label, count(v) AS cnt
-ORDER BY label
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
--- %s %s
diff --git a/backend/sql/property_keys/AGENS.sql b/backend/sql/property_keys/AGENS.sql
deleted file mode 100644
index dc466cc..0000000
--- a/backend/sql/property_keys/AGENS.sql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-MATCH (v)
-RETURN DISTINCT jsonb_object_keys(v) AS key, 'v' AS key_type
-UNION ALL
-MATCH(v1) - [e] - (v2)
-RETURN DISTINCT jsonb_object_keys(e) AS key, 'e' AS key_type
diff --git a/backend/src/app.js b/backend/src/app.js
index c236f82..a6bbfad 100644
--- a/backend/src/app.js
+++ b/backend/src/app.js
@@ -16,9 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
-import FeatureRouter from "./routes/FeatureRouter";
-
 const express = require('express');
 const cors = require('cors');
 const session = require('express-session');
@@ -29,7 +26,6 @@ const logger = require('morgan');
 const {stream} = require('./config/winston');
 const cypherRouter = require('./routes/cypherRouter');
 const databaseRouter = require('./routes/databaseRouter');
-const remoteLoginRouter = require('./routes/remoteLoginRouter');
 const sessionRouter = require('./routes/sessionRouter');
 const app = express();
 
@@ -59,11 +55,9 @@ app.use(express.json());
 app.use(express.urlencoded({extended: false}));
 app.use(cookieParser());
 
-app.use('/agensviewer', sessionRouter, remoteLoginRouter);
 app.use('/api/v1/*', sessionRouter);
 app.use('/api/v1/cypher', cypherRouter);
 app.use('/api/v1/db', databaseRouter);
-app.use('/api/v1/feature', FeatureRouter);
 
 // Error Handler
 app.use(function (err, req, res, next) {
diff --git a/backend/src/config/Flavors.js b/backend/src/config/Flavors.js
index 1dc04d0..ab42be9 100644
--- a/backend/src/config/Flavors.js
+++ b/backend/src/config/Flavors.js
@@ -18,6 +18,5 @@
  */
 
 export default {
-    AGE: 'AGE',
-    AGENS: 'AGENS'
+    AGE: 'AGE'
 }
diff --git a/backend/src/controllers/FeatureController.js b/backend/src/controllers/FeatureController.js
deleted file mode 100644
index 165d914..0000000
--- a/backend/src/controllers/FeatureController.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import sessionService from "../services/sessionService";
-import {parse} from "csv/lib/sync";
-import {createEdge, createVertex} from "../util/JsonBuilder";
-
-class FeatureController {
-    async uploadCSV(req, res, next) {
-        let connectorService = sessionService.get(req.sessionID);
-        if (!connectorService.isConnected()) {
-            res.status(500).json({}).end();
-            return;
-        }
-        const records = parse(req.file.buffer.toString(), {
-            columns: true,
-            skip_empty_lines: true
-        });
-        const fileName = req.file.originalname.substr(0, req.file.originalname.length - 4);
-        let isVertices = true;
-        if (records[0].hasOwnProperty('start_node') && records[0].hasOwnProperty('end_node')) {
-            isVertices = false;
-        }
-        const client = await connectorService._agensDatabaseHelper.getConnection();
-        if (isVertices) {
-            try {
-                for (const record of records) {
-                    await createVertex(client, connectorService.agensDatabaseHelper._graph, fileName, record, connectorService.agensDatabaseHelper.flavor);
-                }
-            } catch (e) {
-                res.status(500).json({}).end();
-                return;
-            } finally {
-                await client.release();
-            }
-            res.status(200).json({}).end();
-        } else {
-            const brkStart = fileName.indexOf('[');
-            const brkEnd = fileName.indexOf(']');
-            const ampersand = fileName.indexOf('&');
-            const edgeLabel = fileName.substring(0, brkStart);
-            const edgeStart = fileName.substring(brkStart + 1, ampersand);
-            const edgeEnd = fileName.substring(ampersand + 1, brkEnd);
-
-            try {
-                for (const recordRoot of records) {
-                    const {start_node, end_node, ...record} = recordRoot;
-                    await createEdge(client, edgeLabel, record, connectorService.agensDatabaseHelper._graph, edgeStart, edgeEnd, start_node, end_node, connectorService.agensDatabaseHelper.flavor);
-                }
-            } catch (e) {
-                res.status(500).json({}).end();
-                return;
-            } finally {
-                await client.release();
-            }
-            res.status(200).json({}).end();
-        }
-    }
-}
-
-export default FeatureController;
diff --git a/backend/src/controllers/RemoteLoginController.js b/backend/src/controllers/RemoteLoginController.js
deleted file mode 100644
index 9969c0f..0000000
--- a/backend/src/controllers/RemoteLoginController.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-import Flavors from "../config/Flavors";
-
-const sessionService = require('../services/sessionService');
-const winston = require('winston');
-const logger = winston.createLogger();
-
-class RemoteLoginController {
-    async connectDatabase(req, res, next) {
-        let databaseService = sessionService.get(req.sessionID);
-        if (databaseService.isConnected() || !req.body) {
-            res.redirect('/');
-        } else {
-            const params = {
-                flavor: Flavors.AGENS,
-                ...req.body
-            }
-            await databaseService.connectDatabase(params);
-            res.redirect('/');
-        }
-    }
-}
-
-module.exports = RemoteLoginController;
diff --git a/backend/src/controllers/cypherController.js b/backend/src/controllers/cypherController.js
index 64f7936..5e5118c 100644
--- a/backend/src/controllers/cypherController.js
+++ b/backend/src/controllers/cypherController.js
@@ -25,7 +25,7 @@ class CypherController {
         let connectorService = sessionService.get(req.sessionID);
         if (connectorService.isConnected()) {
             let cypherService = new CypherService(
-                connectorService.agensDatabaseHelper
+                connectorService.graphRepository
             );
             let data = await cypherService.executeCypher(req.body.cmd);
             res.status(200).json(data).end();
diff --git a/backend/src/models/GraphRepository.js b/backend/src/models/GraphRepository.js
index b53c60c..a5eaa2e 100644
--- a/backend/src/models/GraphRepository.js
+++ b/backend/src/models/GraphRepository.js
@@ -20,7 +20,6 @@
 import Flavors from '../config/Flavors';
 import PgConfig from '../config/Pg'
 
-require('@bitnine-oss/ag-driver');
 import pg from 'pg';
 import types from 'pg-types';
 import {setAGETypes} from '../tools/AGEParser';
@@ -62,8 +61,6 @@ class GraphRepository {
         client.connect();
         if (flavor === Flavors.AGE) {
             await setAGETypes(client, types);
-        } else if (flavor === Flavors.AGENS) {
-            await client.query(`set graph_path = ${graph}`)
         } else {
             throw new Error(`Unknown flavor ${flavor}`)
         }
diff --git a/backend/src/routes/FeatureRouter.js b/backend/src/routes/FeatureRouter.js
deleted file mode 100644
index 044217e..0000000
--- a/backend/src/routes/FeatureRouter.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import {Router} from "express";
-import {wrap} from "../common/Routes";
-import FeatureController from "../controllers/FeatureController";
-import multer from "multer";
-
-const upload = multer({storage: multer.memoryStorage()});
-
-const featureController = new FeatureController();
-
-const router = Router();
-router.post("/uploadCSV", upload.single('file'), wrap(featureController.uploadCSV));
-
-export default router;
diff --git a/backend/src/routes/remoteLoginRouter.js b/backend/src/routes/remoteLoginRouter.js
deleted file mode 100644
index c99c09d..0000000
--- a/backend/src/routes/remoteLoginRouter.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-const express = require("express");
-const RemoteLoginController = require("../controllers/RemoteLoginController");
-
-const router = express.Router();
-const remoteLoginController = new RemoteLoginController();
-
-const {wrap} = require('../common/Routes');
-
-// Execute Cypher Query
-router.post("/", wrap(remoteLoginController.connectDatabase));
-
-module.exports = router;
diff --git a/backend/src/services/cypherService.js b/backend/src/services/cypherService.js
index f3102d6..2049f87 100644
--- a/backend/src/services/cypherService.js
+++ b/backend/src/services/cypherService.js
@@ -17,11 +17,9 @@
  * under the License.
  */
 
-import Flavors from "../config/Flavors";
-
 class CypherService {
-    constructor(agensDatabaseHelper) {
-        this._agensDatabaseHelper = agensDatabaseHelper;
+    constructor(graphRepository) {
+        this._graphRepository = graphRepository;
     }
 
     async executeCypher(query) {
@@ -29,7 +27,7 @@ class CypherService {
             throw new Error('Query not entered!');
         } else {
             try {
-                let resultSet = await this._agensDatabaseHelper.execute(query);
+                let resultSet = await this._graphRepository.execute(query);
                 return this.createResult(resultSet);
             } catch (err) {
                 throw err;
@@ -38,12 +36,7 @@ class CypherService {
     }
 
     createResult(resultSet) {
-        let result = {
-            rows: null,
-            columns: null,
-            rowCount: null,
-            command: null,
-        };
+        let result;
 
         let targetItem = resultSet;
         if (Array.isArray(resultSet)) {
@@ -51,13 +44,6 @@ class CypherService {
         }
 
         let cypherRow = targetItem.rows;
-        if(this._agensDatabaseHelper.flavor === Flavors.AGENS){
-            try {
-                cypherRow = this._convertRowToResult(targetItem)
-            } catch (e) {
-                console.error("FixMe: _convertRowToResult error")
-            }
-        }
         result = {
             rows: cypherRow,
             columns: this._getColumns(targetItem),
diff --git a/backend/src/services/databaseService.js b/backend/src/services/databaseService.js
index bb7146d..038e7f6 100644
--- a/backend/src/services/databaseService.js
+++ b/backend/src/services/databaseService.js
@@ -23,7 +23,7 @@ import GraphRepository from '../models/GraphRepository';
 
 class DatabaseService {
     constructor() {
-        this._agensDatabaseHelper = null;
+        this._graphRepository = null;
     }
 
     async getMetaData() {
@@ -43,10 +43,10 @@ class DatabaseService {
     }
 
     async getGraphLabels() {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
+        let graphRepository = this._graphRepository;
         let queryResult = {};
         try {
-            queryResult = await agensDatabaseHelper.execute(getQuery(agensDatabaseHelper.flavor, 'graph_labels'), [this.getConnectionInfo().graph]);
+            queryResult = await graphRepository.execute(getQuery(graphRepository.flavor, 'graph_labels'), [this.getConnectionInfo().graph]);
         } catch (error) {
             throw error;
         }
@@ -55,70 +55,70 @@ class DatabaseService {
     }
 
     async getGraphLabelCount(labelName, labelKind) {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
+        let graphRepository = this._graphRepository;
         let query = null;
 
         if (labelKind === 'v') {
-            query = util.format(getQuery(agensDatabaseHelper.flavor, 'label_count_vertex'), `${this.getConnectionInfo().graph}.${labelName}`);
+            query = util.format(getQuery(graphRepository.flavor, 'label_count_vertex'), `${this.getConnectionInfo().graph}.${labelName}`);
         } else if (labelKind === 'e') {
-            query = util.format(getQuery(agensDatabaseHelper.flavor, 'label_count_edge'), `${this.getConnectionInfo().graph}.${labelName}`);
+            query = util.format(getQuery(graphRepository.flavor, 'label_count_edge'), `${this.getConnectionInfo().graph}.${labelName}`);
         }
 
-        let queryResult = await agensDatabaseHelper.execute(query);
+        let queryResult = await graphRepository.execute(query);
 
         return queryResult.rows;
     }
 
     async getNodes() {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
-        let queryResult = await agensDatabaseHelper.execute(util.format(getQuery(agensDatabaseHelper.flavor, 'meta_nodes'), agensDatabaseHelper._graph, agensDatabaseHelper._graph));
+        let graphRepository = this._graphRepository;
+        let queryResult = await graphRepository.execute(util.format(getQuery(graphRepository.flavor, 'meta_nodes'), graphRepository._graph, graphRepository._graph));
         return queryResult.rows;
     }
 
     async getEdges() {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
-        let queryResult = await agensDatabaseHelper.execute(util.format(getQuery(agensDatabaseHelper.flavor, 'meta_edges'), agensDatabaseHelper._graph, agensDatabaseHelper._graph));
+        let graphRepository = this._graphRepository;
+        let queryResult = await graphRepository.execute(util.format(getQuery(graphRepository.flavor, 'meta_edges'), graphRepository._graph, graphRepository._graph));
         return queryResult.rows;
     }
 
     async getPropertyKeys() {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
-        let queryResult = await agensDatabaseHelper.execute(getQuery(agensDatabaseHelper.flavor, 'property_keys'));
+        let graphRepository = this._graphRepository;
+        let queryResult = await graphRepository.execute(getQuery(graphRepository.flavor, 'property_keys'));
         return queryResult.rows;
     }
 
     async getRole() {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
-        let queryResult = await agensDatabaseHelper.execute(getQuery(agensDatabaseHelper.flavor, 'get_role'), [this.getConnectionInfo().user]);
+        let graphRepository = this._graphRepository;
+        let queryResult = await graphRepository.execute(getQuery(graphRepository.flavor, 'get_role'), [this.getConnectionInfo().user]);
         return queryResult.rows[0];
     }
 
     async connectDatabase(connectionInfo) {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
-        if (agensDatabaseHelper == null) {
-            this._agensDatabaseHelper = new GraphRepository(connectionInfo);
-            agensDatabaseHelper = this._agensDatabaseHelper;
+        let graphRepository = this._graphRepository;
+        if (graphRepository == null) {
+            this._graphRepository = new GraphRepository(connectionInfo);
+            graphRepository = this._graphRepository;
         }
 
         try {
-            let client = await agensDatabaseHelper.getConnection(agensDatabaseHelper.getConnectionInfo(), true);
+            let client = await graphRepository.getConnection(graphRepository.getConnectionInfo(), true);
             client.release();
         } catch (e) {
-            this._agensDatabaseHelper = null;
+            this._graphRepository = null;
             throw e;
         }
         return true;
     }
 
     async disconnectDatabase() {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
-        if (agensDatabaseHelper == null) {
+        let graphRepository = this._graphRepository;
+        if (graphRepository == null) {
             console.log('Already Disconnected');
             return false;
         } else {
-            let isRelease = await this._agensDatabaseHelper.releaseConnection();
+            let isRelease = await this._graphRepository.releaseConnection();
             if (isRelease) {
-                this._agensDatabaseHelper = null;
+                this._graphRepository = null;
                 return true;
             } else {
                 console.log('Failed releaseConnection()');
@@ -128,13 +128,13 @@ class DatabaseService {
     }
 
     async getConnectionStatus() {
-        let agensDatabaseHelper = this._agensDatabaseHelper;
-        if (agensDatabaseHelper == null) {
+        let graphRepository = this._graphRepository;
+        if (graphRepository == null) {
             return false;
         }
 
         try {
-            let client = await GraphRepository.getConnection(agensDatabaseHelper.getConnectionInfo());
+            let client = await GraphRepository.getConnection(graphRepository.getConnectionInfo());
             client.release();
         } catch (err) {
             return false;
@@ -145,15 +145,15 @@ class DatabaseService {
     getConnectionInfo() {
         if (this.isConnected() === false)
             throw new Error("Not connected");
-        return this._agensDatabaseHelper.getConnectionInfo();
+        return this._graphRepository.getConnectionInfo();
     }
 
     isConnected() {
-        return this._agensDatabaseHelper != null;
+        return this._graphRepository != null;
     }
 
-    get agensDatabaseHelper() {
-        return this._agensDatabaseHelper;
+    get graphRepository() {
+        return this._graphRepository;
     }
 
     convertEdge({label, id, start, end, props}) {
diff --git a/backend/src/tools/SQLFlavorManager.js b/backend/src/tools/SQLFlavorManager.js
index 597c319..d238bf6 100644
--- a/backend/src/tools/SQLFlavorManager.js
+++ b/backend/src/tools/SQLFlavorManager.js
@@ -16,8 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
-// Currently works AGENS / AGE ( in-progress )
 import * as path from "path";
 import fs from 'fs'
 import Flavors from "../config/Flavors";
@@ -25,7 +23,7 @@ import Flavors from "../config/Flavors";
 const sqlBasePath = path.join(__dirname, '../../sql');
 
 // todo: util.format -> ejs
-function getQuery(flavor = Flavors.AGENS, name) {
+function getQuery(flavor = Flavors.AGE, name) {
     const defaultSqlPath = path.join(sqlBasePath, `./${name}/default.sql`);
     let sqlPath = path.join(sqlBasePath, `./${name}/${flavor}.sql`);
     if (fs.existsSync(defaultSqlPath)) {
diff --git a/backend/src/util/JsonBuilder.js b/backend/src/util/JsonBuilder.js
index 80803d7..91aea81 100644
--- a/backend/src/util/JsonBuilder.js
+++ b/backend/src/util/JsonBuilder.js
@@ -17,14 +17,8 @@
  * under the License.
  */
 
-import Flavors from "../config/Flavors";
-
-export function stringWrap(valstr, flavor){
-    let valueWrapped = JSON.stringify(valstr);
-    if (flavor === Flavors.AGENS) {
-        valueWrapped = '\'' + valueWrapped.substring(1, valueWrapped.length - 1) + '\'';
-    }
-    return valueWrapped;
+export function stringWrap(valstr, flavor) {
+    return JSON.stringify(valstr);
 }
 
 export function JsonStringify(flavor, record) {
@@ -47,14 +41,10 @@ export async function createVertex(client, graphPathStr, label, record, flavor)
     if (flavor === 'AGE') {
         return AGECreateVertex(client, graphPathStr, createQ);
     } else {
-        return AgensGraphCreateVertex(client, graphPathStr, createQ);
+        throw new Error(`Unknown flavor ${flavor}`)
     }
 }
 
-async function AgensGraphCreateVertex(client, graphPathStr, createQ) {
-    await client.query(createQ);
-}
-
 async function AGECreateVertex(client, graphPathStr, createQ) {
     await client.query(
         `select *
@@ -66,14 +56,10 @@ export async function createEdge(client, label, record, graphPathStr, edgeStartL
     if (flavor === 'AGE') {
         return AGECreateEdge(client, graphPathStr, createQ);
     } else {
-        return AgensGraphCreateEdge(client, graphPathStr, createQ);
+        throw new Error(`Unknown flavor ${flavor}`)
     }
 }
 
-async function AgensGraphCreateEdge(client, graphPathStr, createQ) {
-    await client.query(createQ);
-}
-
 async function AGECreateEdge(client, graphPathStr, createQ) {
     await client.query(
         `select *
diff --git a/backend/test/connectParam.js b/backend/test/connectParam.js
deleted file mode 100644
index c8ac3ab..0000000
--- a/backend/test/connectParam.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-export default {
-    host: '127.0.0.1',
-    port: 5432,
-    database: 'agensgraph',
-    graph: 'agensgraph',
-    user: 'agensgraph',
-    password: 'agensgraph',
-};
diff --git a/backend/test/connector.api.test.js b/backend/test/connector.api.test.js
deleted file mode 100644
index f886d1f..0000000
--- a/backend/test/connector.api.test.js
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-const app = require('../app');
-const request = require('supertest');
-const session = require('supertest-session');
-const assert = require('assert').strict;
-import connectParam from './connectParam';
-
-const wrongConnectParam = {
-    host: '172.30.1.1',
-    port: 1234,
-    database: 'agensgraph',
-    graph: 'agensgraph',
-    user: 'agensgraph',
-    password: 'agensgraph',
-};
-
-describe('Test Connector Api', () => {
-
-    let mappingUrl = '/api/v1/db';
-
-    it('Execute Connect', (done) => {
-        request(app)
-            .post(`${mappingUrl}/connect`)
-            .send(connectParam)
-            .expect('Content-Type', /json/)
-            .expect(200)
-            .end((err, res) => {
-                if (err) done(err);
-                assert.deepStrictEqual(res.body, connectParam);
-                return done();
-            });
-    });
-
-    it('Execute Wrong Connect', (done) => {
-        request(app)
-            .post(`${mappingUrl}/connect`)
-            .send(wrongConnectParam)
-            .expect(500)
-            .end((err, res) => {
-                if (err) done(err);
-                console.log(res.body)
-                done();
-            });
-    });
-
-    describe('Test Disconnect', () => {
-        const sessionRequest = session(app);
-        before(function (done) {
-            sessionRequest
-                .post(`${mappingUrl}/connect`)
-                .send(connectParam)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    done();
-                });
-        });
-        it('Test disconnected (Expected 200)', (done) => {
-            sessionRequest
-                .get(`${mappingUrl}/disconnect`)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    done();
-                });
-        });
-
-        it('Excute disconnected (Expected 500)', (done) => {
-            request(app)
-                .get(`${mappingUrl}/disconnect`)
-                .expect('Content-Type', /json/)
-                .expect(500)
-                .end((err, res) => {
-                    done();
-                });
-        });
-    });
-
-    describe('Test Status', () => {
-        const sessionRequest = session(app);
-        beforeEach(function (done) {
-            sessionRequest
-                .post(`${mappingUrl}/connect`)
-                .send(connectParam)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    assert(res.body, connectParam);
-                    done();
-                });
-        });
-        it('Execute status API', (done) => {
-            sessionRequest
-                .get(`${mappingUrl}/`)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    assert.deepStrictEqual(res.body, connectParam);
-                    done();
-                });
-        });
-    });
-
-    describe('Meta Api Test !', () => {
-        const sessionRequest = session(app);
-        before(function (done) {
-            sessionRequest
-                .post(`${mappingUrl}/connect`)
-                .send(connectParam)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    assert(res.body, connectParam);
-                    return done();
-                });
-        });
-        it('Get Meta', (done) => {
-            sessionRequest
-                .get(`${mappingUrl}/meta`)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    console.log(res.body);
-                    assert(!!res.body);
-                    done();
-                });
-        });
-        it('Get MetaChart', (done) => {
-            sessionRequest
-                .get(`${mappingUrl}/metaChart`)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    console.log(res.body);
-                    assert(!!res.body);
-                    done();
-                });
-        });
-    });
-
-    it('Test Get Metadata NotConnected', (done) => {
-        request(app)
-            .get(`${mappingUrl}/meta`)
-            .expect('Content-Type', /json/)
-            .expect(500)
-            .end((err, res) => {
-                if (err) done(err);
-                done();
-            });
-    });
-
-    describe('잘못된 연결 후, 정상 연결 시 잘못된 연결데이터 전달', () => {
-        const sessionRequest = session(app);
-        before(function (done) {
-            sessionRequest
-                .post(`${mappingUrl}/connect`)
-                .send(wrongConnectParam)
-                .expect('Content-Type', /json/)
-                .expect(500)
-                .end((err, res) => {
-                    if (err) done(err);
-                    console.log(res.body)
-                    done();
-                });
-        });
-        it('정상 연결 요청', (done) => {
-            sessionRequest
-                .post(`${mappingUrl}/connect`)
-                .send(connectParam)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    assert(res.body, connectParam);
-                    done();
-                });
-        });
-    });
-});
diff --git a/backend/test/cypher.api.test.js b/backend/test/cypher.api.test.js
deleted file mode 100644
index ca81274..0000000
--- a/backend/test/cypher.api.test.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-const app = require('../app');
-const request = require('supertest');
-const session = require('supertest-session');
-const assert = require('assert').strict;
-import connectParam from './connectParam';
-
-let queryParam = {
-    cmd: 'MATCH(a:person)-[e] ->(b) return a, e, b limit 10',
-};
-
-let wrongQueryParam = {
-    cmd: 'MATCH(a:rating)-[e] ->(b) return a, e, b limit 10',
-};
-
-describe('Cypher Api Test', () => {
-    let dbUrl = '/api/v1/db';
-    let cypherUrl = '/api/v1/cypher';
-
-    it('Test Match API', (done) => {
-        request(app)
-            .post(`${cypherUrl}/`)
-            .send(queryParam)
-            .expect('Content-Type', /json/)
-            .expect(500)
-            .end((err, res) => {
-                if (err) {
-                    done(err);
-                }
-                console.log(res.body);
-                done();
-            });
-    });
-
-    describe('Test Session', () => {
-        const sessionRequest = session(app);
-        before(function (done) {
-            sessionRequest
-                .post(`${dbUrl}/connect`)
-                .send(connectParam)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    assert(res.body, connectParam);
-                    done();
-                });
-        });
-        it('Test connect cypher', (done) => {
-            sessionRequest
-                .post(`${cypherUrl}/`)
-                .send(queryParam)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) {
-                        done(err);
-                    }
-                    if (!res.body.message) {
-                        console.log(res.body)
-                        assert(res.body.rows.length == 10);
-                        assert(res.body.columns.length == 3);
-                    } else {
-                        console.log(res.body.message);
-                    }
-                    done();
-                });
-        });
-        it('Test wrong cypher', (done) => {
-            sessionRequest
-                .post(`${cypherUrl}/`)
-                .send(wrongQueryParam)
-                .expect('Content-Type', /json/)
-                .expect(500)
-                .end((err, res) => {
-                    if (err) {
-                        done(err);
-                    }
-                    assert(!!res.body.message);
-                    console.log(res.body.message);
-                    done();
-                });
-        });
-    });
-});
diff --git a/backend/test/cypher.service.test.js b/backend/test/cypher.service.test.js
deleted file mode 100644
index 5c11eef..0000000
--- a/backend/test/cypher.service.test.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-const app = require('../app');
-const session = require('supertest-session');
-const assert = require('assert').strict;
-
-const request = session(app);
-import connectParam from "./connectParam";
-
-let dbUrl = '/api/v1/db';
-let cypherUrl = '/api/v1/cypher';
-
-let matchQuery = {cmd: 'match (v)-[r]->(v2) return * limit 1'};
-let countQuery = {cmd: "MATCH(p:person) WHERE p.id = 'TEST' RETURN count(p)"};
-let createQuery = {cmd: "CREATE(p:person {id: 'TEST'})"};
-let deleteQuery = {cmd: "MATCH(p:person) WHERE p.id = 'TEST' DELETE p"};
-let setQuery = {cmd: ''};
-
-let pathQuery = {cmd: 'match p = (v)- [r]->(v2) return p limit 1;'};
-
-let createTableQuery = {
-    cmd:
-        'create table categories (categoryid int, categoryname varchar(15), description text, picture bytea);' +
-        'create table customers (customerid char(5), companyname varchar(40), contactname varchar(30), contacttitle varchar(30), address varchar(60), city varchar(15), region varchar(15), postalcode varchar(10), country varchar(15), phone varchar(24), fax varchar(24));' +
-        'create table employees (employeeid int, lastname varchar(20), firstname varchar(10), title varchar(30), titleofcourtesy varchar(25), birthdate date, hiredate date, address varchar(60), city varchar(15), region varchar(15), postalcode varchar(10), country varchar(15), homephone varchar(24), extension varchar(4), photo bytea, notes text, reportto int, photopath varchar(255));' +
-        'create table employee_territories (employeeid int, territoryid varchar(20));' +
-        'create table orders_details (orderid int, productid int, unitprice money, quantity smallint, discount real);' +
-        'create table orders (orderid int, customerid char(5), employeeid int, orderdate date, requireddate date, shippeddate date, shipvia int, freight money, shipname varchar(40), shipaddress varchar(60), shipcity varchar(15), shipregion varchar(15), shippostalcode varchar(10), shipcountry varchar(15));' +
-        'create table products (productid int, productname varchar(40), supplierid int, categoryid int, quantityperunit varchar(20), unitprice money, unitsinstock smallint, unitsonorder smallint, reorderlevel smallint, discontinued bit);' +
-        'create table regions (regionid int, regiondescription char(50));' +
-        'create table shippers (shipperid int, companyname varchar(40), phone varchar(24));' +
-        'create table suppliers (supplierid int, companyname varchar(40), contactname varchar(30), contacttitle varchar(30), address varchar(60), city varchar(15), region varchar(15), postalcode varchar(10), country varchar(15), phone varchar(24), fax varchar(24), homepage text);' +
-        'create table territories (territoryid varchar(20), territorydescription char(50), regionid int);',
-};
-
-let dropTableQuery = {
-    cmd:
-        'drop table categories;' +
-        'drop table customers;' +
-        'drop table employees;' +
-        'drop table employee_territories;' +
-        'drop table orders_details;' +
-        'drop table orders;' +
-        'drop table products;' +
-        'drop table regions;' +
-        'drop table shippers;' +
-        'drop table suppliers;' +
-        'drop table territories;',
-};
-
-describe('Cypher DML Test', () => {
-    beforeEach(connectDatabase);
-
-    it('Execute MatchQuery', (done) => {
-        request
-            .post(`${cypherUrl}/`)
-            .send(matchQuery)
-            .expect('Content-Type', /json/)
-            .expect(200)
-            .end((err, res) => {
-                if (err) {
-                    done(err);
-                }
-                console.log(res.body.rows[0])
-                done();
-            });
-    });
-
-    it('Execute PathQuery', (done) => {
-        request
-            .post(`${cypherUrl}/`)
-            .send(pathQuery)
-            .expect('Content-Type', /json/)
-            .expect(200)
-            .end((err, res) => {
-                if (err) {
-                    done(err);
-                }
-                done();
-            });
-    });
-
-    describe('Cypher Create Test', () => {
-        afterEach('Check create data', executeMatchQuery);
-
-        it('Execute Create', (done) => {
-            request
-                .post(`${cypherUrl}/`)
-                .send(createQuery)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) {
-                        done(err);
-                    }
-                    done();
-                });
-        });
-    });
-
-    describe('Cypher Create Test', () => {
-        beforeEach('Check exist data', executeMatchQuery);
-
-        it('Execute Delete', (done) => {
-            request
-                .post(`${cypherUrl}/`)
-                .send(deleteQuery)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) {
-                        done(err);
-                    }
-                    done();
-                });
-        });
-
-        afterEach('Check delete data', executeMatchQuery);
-    });
-
-    describe('Cypher DDL Test', () => {
-        it('Create Table', (done) => {
-            request
-                .post(`${cypherUrl}/`)
-                .send(createTableQuery)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) {
-                        done(err);
-                    }
-                    console.log(res.body);
-                    done();
-                });
-        });
-
-        it('Drop Table', (done) => {
-            request
-                .post(`${cypherUrl}/`)
-                .send(dropTableQuery)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) {
-                        done(err);
-                    }
-                    console.log(res.body);
-                    done();
-                });
-        });
-    });
-});
-
-function connectDatabase(done) {
-    request
-        .post(`${dbUrl}/connect`)
-        .send(connectParam)
-        .expect('Content-Type', /json/)
-        .expect(200)
-        .end((err, res) => {
-            if (err) throw err;
-            assert(res.body, connectParam);
-            return done();
-        });
-}
-
-function executeMatchQuery(done) {
-    request
-        .post(`${cypherUrl}/`)
-        .send(countQuery)
-        .expect('Content-Type', /json/)
-        .expect(200)
-        .end((err, res) => {
-            if (err) {
-                done(err);
-            }
-            done();
-        });
-}
diff --git a/backend/test/meta.api.test.js b/backend/test/meta.api.test.js
deleted file mode 100644
index 9752e50..0000000
--- a/backend/test/meta.api.test.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-const app = require('../app');
-const request = require('supertest');
-const session = require('supertest-session');
-const assert = require('assert').strict;
-import connectParam from "./connectParam";
-
-describe('MetaAPI Test', () => {
-
-    let mappingUrl = '/api/v1/db';
-
-    describe('Execute Meta', () => {
-        const sessionRequest = session(app);
-        before(function (done) {
-            sessionRequest
-                .post(`${mappingUrl}/connect`)
-                .send(connectParam)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    assert(res.body, connectParam);
-                    return done();
-                });
-        });
-        it('Get Metachart', (done) => {
-            sessionRequest
-                .get(`${mappingUrl}/metaChart`)
-                .expect('Content-Type', /json/)
-                .expect(200)
-                .end((err, res) => {
-                    if (err) done(err);
-                    console.log(res.body);
-                    assert(!!res.body);
-                    done();
-                });
-        });
-    });
-
-});
diff --git a/backend/test/session.api.test.js b/backend/test/session.api.test.js
deleted file mode 100644
index 00ea0e3..0000000
--- a/backend/test/session.api.test.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-const app = require('../app');
-const request = require('supertest');
-const session = require('supertest-session');
-import connectParam from "./connectParam";
-
-let queryParam = {
-    cmd: 'MATCH(a:person)-[e] ->(b) return a, e, b limit 10',
-};
-
-describe('Cypher Api Test', () => {
-    const globalRequest = request(app);
-    const globalSession = session(app);
-    const globalSession2 = session(app);
-
-    let connectorUrl = '/api/v1/db';
-    let cypherUrl = '/api/v1/cypher';
-
-    it('Test Session 1', (done) => {
-        globalRequest
-            .post(`${connectorUrl}/connect`)
-            .send(connectParam)
-            .expect(200)
-            .end((err, res) => {
-                if (err) done(err);
-                done();
-            });
-    });
-
-    it('Test Session 2 ', (done) => {
-        globalSession
-            .post(`${connectorUrl}/connect`)
-            .send(connectParam)
-            .expect(200)
-            .end((err, res) => {
-                if (err) done(err);
-                done();
-            });
-    });
-
-    it('Test Session 3 ', (done) => {
-        globalSession
-            .post(`${cypherUrl}`)
-            .send(queryParam)
-            .expect(200)
-            .end((err, res) => {
-                if (err) done(err);
-                done();
-            });
-    });
-});
diff --git a/frontend/src/app/store.js b/frontend/src/app/store.js
index c363e7a..ee85027 100644
--- a/frontend/src/app/store.js
+++ b/frontend/src/app/store.js
@@ -25,49 +25,3 @@ const store = configureStore({
 });
 
 export default store;
-
-/*
-import {createStore} from 'redux';
-
-function reducer(state, action) {
-
-    if (state === undefined) {
-        return {
-            setting: {
-                theme: 'default'
-            },
-            database: {
-                host: '127.0.0.1',
-                port: 5432,
-                userName: 'agens',
-                databaseName: 'northwind',
-                graphPath: 'northwind_graph'
-            },
-            navigator: {
-                menuList: [['home', 'home'], ['setting', 'cog']],
-                activeMenu: ''
-            },
-            frames: []
-        }
-    }
-
-    if (action.type === 'TOGGLE_MENU') {
-        let n = {...state.navigator}
-        n.activeMenu = action.activeMenu
-        return {...state, navigator: n}
-    } else if (action.type === 'CHANGE_THEME') {
-        let s = {...state.setting}
-        s.theme = action.theme
-        return {...state, setting: s}
-    } else if (action.type === 'ADD_FRAME') {
-        return {...state, frames: action.frames}
-    }
-
-    return state;
-
-}
-
-export default createStore(
-    reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
-)
-*/
diff --git a/frontend/src/components/cytoscape/CypherResultCytoscapeChart.jsx b/frontend/src/components/cytoscape/CypherResultCytoscapeChart.jsx
index ff4fd43..2600476 100644
--- a/frontend/src/components/cytoscape/CypherResultCytoscapeChart.jsx
+++ b/frontend/src/components/cytoscape/CypherResultCytoscapeChart.jsx
@@ -52,7 +52,7 @@ cytoscape.use(cxtmenu);
 
 const CypherResultCytoscapeCharts = ({
   elements, cytoscapeObject, setCytoscapeObject, cytoscapeLayout, maxDataOfGraph,
-  onElementsMouseover, addLegendData, flavor, graph,
+  onElementsMouseover, addLegendData, graph,
 }) => {
   const [cytoscapeMenu, setCytoscapeMenu] = useState(null);
   const [initialized, setInitialized] = useState(false);
@@ -164,35 +164,19 @@ const CypherResultCytoscapeCharts = ({
               (<FontAwesomeIcon icon={faProjectDiagram} size="lg" />),
             ),
             select(ele) {
-              if (flavor === 'AGENS') {
-                fetch('/api/v1/cypher',
-                  {
-                    method: 'POST',
-                    headers: {
-                      Accept: 'application/json',
-                      'Content-Type': 'application/json',
-                    },
-                    body: JSON.stringify({ cmd: `MATCH (S)-[R]-(T) WHERE id(S) = '${ele.id()}' RETURN S, R, T` }),
-                  })
-                  .then((res) => res.json())
-                  .then((data) => {
-                    addElements(ele.id(), data);
-                  });
-              } else {
-                fetch('/api/v1/cypher',
-                  {
-                    method: 'POST',
-                    headers: {
-                      Accept: 'application/json',
-                      'Content-Type': 'application/json',
-                    },
-                    body: JSON.stringify({ cmd: `SELECT * FROM cypher('${graph}', $$ MATCH (S)-[R]-(T) WHERE id(S) = ${ele.id()} RETURN S, R, T $$) as (S agtype, R agtype, T agtype);` }),
-                  })
-                  .then((res) => res.json())
-                  .then((data) => {
-                    addElements(ele.id(), data);
-                  });
-              }
+              fetch('/api/v1/cypher',
+                {
+                  method: 'POST',
+                  headers: {
+                    Accept: 'application/json',
+                    'Content-Type': 'application/json',
+                  },
+                  body: JSON.stringify({ cmd: `SELECT * FROM cypher('${graph}', $$ MATCH (S)-[R]-(T) WHERE id(S) = ${ele.id()} RETURN S, R, T $$) as (S agtype, R agtype, T agtype);` }),
+                })
+                .then((res) => res.json())
+                .then((data) => {
+                  addElements(ele.id(), data);
+                });
             },
           },
 
@@ -287,7 +271,6 @@ CypherResultCytoscapeCharts.propTypes = {
   maxDataOfGraph: PropTypes.number.isRequired,
   onElementsMouseover: PropTypes.func.isRequired,
   addLegendData: PropTypes.func.isRequired,
-  flavor: PropTypes.string.isRequired,
   graph: PropTypes.string.isRequired,
 };
 
diff --git a/frontend/src/components/frame/containers/ServerConnectContainer.js b/frontend/src/components/frame/containers/ServerConnectContainer.js
index e9d70ca..324e9b1 100644
--- a/frontend/src/components/frame/containers/ServerConnectContainer.js
+++ b/frontend/src/components/frame/containers/ServerConnectContainer.js
@@ -18,7 +18,7 @@
  */
 
 import { connect } from 'react-redux';
-import { connectToAgensGraph } from '../../../features/database/DatabaseSlice';
+import { connectToDatabase } from '../../../features/database/DatabaseSlice';
 import { getMetaChartData, getMetaData } from '../../../features/database/MetadataSlice';
 import {
   addFrame, pinFrame, removeFrame, trimFrame,
@@ -29,7 +29,7 @@ import ServerConnectFrame from '../presentations/ServerConnectFrame';
 const mapStateToProps = () => ({});
 
 const mapDispatchToProps = {
-  connectToAgensGraph,
+  connectToDatabase,
   addFrame,
   trimFrame,
   removeFrame,
diff --git a/frontend/src/components/frame/containers/ServerDisconnectContainer.js b/frontend/src/components/frame/containers/ServerDisconnectContainer.js
index 4eb5fe9..af1c77a 100644
--- a/frontend/src/components/frame/containers/ServerDisconnectContainer.js
+++ b/frontend/src/components/frame/containers/ServerDisconnectContainer.js
@@ -18,7 +18,7 @@
  */
 
 import { connect } from 'react-redux';
-import { disconnectToAgensGraph } from '../../../features/database/DatabaseSlice';
+import { disconnectToDatabase } from '../../../features/database/DatabaseSlice';
 import { resetMetaData } from '../../../features/database/MetadataSlice';
 import { addFrame, pinFrame, removeFrame } from '../../../features/frame/FrameSlice';
 import { addAlert } from '../../../features/alert/AlertSlice';
@@ -29,7 +29,7 @@ const mapStateToProps = () => ({
 });
 
 const mapDispatchToProps = {
-  disconnectToAgensGraph, addFrame, removeFrame, pinFrame, addAlert, setCommand, resetMetaData,
+  disconnectToDatabase, addFrame, removeFrame, pinFrame, addAlert, setCommand, resetMetaData,
 };
 
 export default connect(mapStateToProps, mapDispatchToProps)(ServerDisconnectFrame);
diff --git a/frontend/src/components/frame/presentations/ContentsFrame.jsx b/frontend/src/components/frame/presentations/ContentsFrame.jsx
index a21bdab..d5125d5 100644
--- a/frontend/src/components/frame/presentations/ContentsFrame.jsx
+++ b/frontend/src/components/frame/presentations/ContentsFrame.jsx
@@ -20,7 +20,6 @@
 import PropTypes from 'prop-types';
 import React, { useEffect, useState } from 'react';
 import { useDispatch } from 'react-redux';
-import { slides as northwindSlides } from '../../../documents/tutorial/northwind';
 import Frame from '../Frame';
 import FrameStyles from '../Frame.module.scss';
 import { removeFrame } from '../../../features/frame/FrameSlice';
@@ -33,16 +32,12 @@ const ContentFrame = ({
   playTarget,
 }) => {
   const dispatch = useDispatch();
-  const [slides, setSlides] = useState([]);
+  const [slides] = useState([]);
   const [currentSlide, setCurrentSlide] = useState(0);
 
   useEffect(() => {
-    if (playTarget.toLowerCase() === 'northwind') {
-      setSlides(northwindSlides);
-    } else {
-      dispatch(addAlert('ErrorPlayLoadFail', playTarget));
-      dispatch(removeFrame(refKey));
-    }
+    dispatch(addAlert('ErrorPlayLoadFail', playTarget));
+    dispatch(removeFrame(refKey));
   }, []);
 
   const genCarousel = () => {
diff --git a/frontend/src/components/frame/presentations/ServerConnectFrame.jsx b/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
index b4feedd..457d439 100644
--- a/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
+++ b/frontend/src/components/frame/presentations/ServerConnectFrame.jsx
@@ -26,7 +26,7 @@ import { useDispatch } from 'react-redux';
 import Frame from '../Frame';
 
 import styles from './ServerConnectFrame.module.scss';
-import { connectToAgensGraph } from '../../../features/database/DatabaseSlice';
+import { connectToDatabase as connectToDatabaseApi } from '../../../features/database/DatabaseSlice';
 import { addAlert } from '../../../features/alert/AlertSlice';
 import { addFrame, trimFrame } from '../../../features/frame/FrameSlice';
 import { getMetaChartData, getMetaData } from '../../../features/database/MetadataSlice';
@@ -48,8 +48,8 @@ const ServerConnectFrame = ({
 }) => {
   const dispatch = useDispatch();
 
-  const connectToDatabase = (data) => dispatch(connectToAgensGraph(data)).then((response) => {
-    if (response.type === 'database/connectToAgensGraph/fulfilled') {
+  const connectToDatabase = (data) => dispatch(connectToDatabaseApi(data)).then((response) => {
+    if (response.type === 'database/connectToDatabase/fulfilled') {
       dispatch(addAlert('NoticeServerConnected'));
       dispatch(trimFrame('ServerConnect'));
       dispatch(getMetaData()).then((metadataResponse) => {
@@ -61,7 +61,7 @@ const ServerConnectFrame = ({
       });
 
       dispatch(addFrame(':server status', 'ServerStatus'));
-    } else if (response.type === 'database/connectToAgensGraph/rejected') {
+    } else if (response.type === 'database/connectToDatabase/rejected') {
       dispatch(addAlert('ErrorServerConnectFail', response.error.message));
     }
   });
@@ -90,7 +90,6 @@ const ServerConnectFrame = ({
                   allowClear
                 >
                   <Select.Option value="AGE">Apache AGE</Select.Option>
-                  <Select.Option value="AGENS">AgensGraph</Select.Option>
                 </Select>
               </Form.Item>
               <Form.Item name="host" label="Connect URL" rules={[{ required: true }]}>
diff --git a/frontend/src/components/frame/presentations/ServerDisconnectFrame.jsx b/frontend/src/components/frame/presentations/ServerDisconnectFrame.jsx
index 0363725..243613d 100644
--- a/frontend/src/components/frame/presentations/ServerDisconnectFrame.jsx
+++ b/frontend/src/components/frame/presentations/ServerDisconnectFrame.jsx
@@ -29,7 +29,7 @@ const ServerDisconnectFrame = ({
   refKey,
   isPinned,
   reqString,
-  disconnectToAgensGraph,
+  disconnectToDatabase,
   addFrame,
   addAlert,
   setCommand,
@@ -38,14 +38,14 @@ const ServerDisconnectFrame = ({
   const dispatch = useDispatch();
 
   useEffect(() => {
-    dispatch(() => disconnectToAgensGraph().then((response) => {
-      if (response.type === 'database/disconnectToAgensGraph/fulfilled') {
+    dispatch(() => disconnectToDatabase().then((response) => {
+      if (response.type === 'database/disconnectToDatabase/fulfilled') {
         resetMetaData();
       }
     }));
     /* dispatch(() => addFrame(':server connect')); */
     /* dispatch(() => addAlert('NoticeServerDisconnected')); */
-  }, [dispatch, disconnectToAgensGraph, addFrame, addAlert]);
+  }, [dispatch, disconnectToDatabase, addFrame, addAlert]);
 
   return (
     <Frame
@@ -56,7 +56,7 @@ const ServerDisconnectFrame = ({
       <Row>
         <Col span={6}>
           <h3>Disconnected Succesfully</h3>
-          <p>You are successfully disconnected from Agensgraph.</p>
+          <p>You are successfully disconnected from Database.</p>
         </Col>
         <Col span={18}>
           <p>
@@ -81,7 +81,7 @@ ServerDisconnectFrame.propTypes = {
   refKey: PropTypes.string.isRequired,
   isPinned: PropTypes.bool.isRequired,
   reqString: PropTypes.string.isRequired,
-  disconnectToAgensGraph: PropTypes.func.isRequired,
+  disconnectToDatabase: PropTypes.func.isRequired,
   addFrame: PropTypes.func.isRequired,
   addAlert: PropTypes.func.isRequired,
   setCommand: PropTypes.func.isRequired,
diff --git a/frontend/src/components/frame/presentations/ServerStatusFrame.jsx b/frontend/src/components/frame/presentations/ServerStatusFrame.jsx
index 6c4890e..ffb0e9d 100644
--- a/frontend/src/components/frame/presentations/ServerStatusFrame.jsx
+++ b/frontend/src/components/frame/presentations/ServerStatusFrame.jsx
@@ -89,7 +89,7 @@ const ServerStatusFrame = ({
           <Row>
             <Col span={6}>
               <h3>Connection Status</h3>
-              <p>You are currently not connected to AgensGraph</p>
+              <p>You are currently not connected to Database</p>
             </Col>
             <Col span={18}>
               <p>
@@ -102,7 +102,7 @@ const ServerStatusFrame = ({
                   :server connect
                 </a>
                 {' '}
-                to access to Agensgraph.
+                to access to Database.
               </p>
             </Col>
           </Row>
diff --git a/frontend/src/components/sidebar/presentations/SidebarHome.jsx b/frontend/src/components/sidebar/presentations/SidebarHome.jsx
index 6521585..a31b057 100644
--- a/frontend/src/components/sidebar/presentations/SidebarHome.jsx
+++ b/frontend/src/components/sidebar/presentations/SidebarHome.jsx
@@ -55,27 +55,9 @@ $$) as (V agtype, R agtype, V2 agtype);`;
     }
     return '';
   }
-  function agens() {
-    if (eleType === 'node') {
-      if (labelName === '*') {
-        return 'MATCH (V) RETURN V';
-      }
-      return `MATCH (V) WHERE LABEL(V) = '${labelName}' RETURN V`;
-    }
-    if (eleType === 'edge') {
-      if (labelName === '*') {
-        return 'MATCH (V)-[R]->(V2) RETURN *';
-      }
-      return `MATCH (V)-[R]->(V2) WHERE LABEL(R) = '${labelName}' RETURN *`;
-    }
-    return '';
-  }
   if (database.flavor === 'AGE') {
     return age();
   }
-  if (database.flavor === 'AGENS') {
-    return agens();
-  }
   return '';
 };
 
diff --git a/frontend/src/documents/tutorial/northwind.jsx b/frontend/src/documents/tutorial/northwind.jsx
deleted file mode 100644
index 711e985..0000000
--- a/frontend/src/documents/tutorial/northwind.jsx
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/* eslint-disable max-len */
-import React from 'react';
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { faPlayCircle } from '@fortawesome/free-regular-svg-icons';
-import CodeMirror from '@uiw/react-codemirror';
-
-export const title = 'Northwind Graph';
-export const category = 'graphExamples';
-export const description = 'Northwind graph tutorial!!';
-export const slides = [
-  <div className="row content-row">
-    <div className="col-sm-3">
-      <h3>Northwind Graph</h3>
-      <p className="lead">AgensGraph Tutorial: Import, Query, and Modify Graph Data </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>Before Getting Started!</h4>
-      <p>본 튜토리얼은 사용자들이 AgensGraph에 샘플 데이터를 적재하고 적재된 데이터를 조회하거나 원하는 정보를 추출하는 과정을 따라할 수 있도록 안내하기 위해 제작되었습니다.</p>
-      <p>본 튜토리얼을 따라 데이터를 적재하고 활용하시려면 반드시 AgensGraph를 먼저 설치하셔야 하며 시각화 도구인 AGViewer 함께 설치해 사용하신다면 더 쉽고 빠르게 샘플 데이터를 이해하고 분석하실 수 있습니다.</p>
-      <p>AgensGraph에 데이터를 적재하는 방법은 크게 2가지가 존재합니다.</p>
-      <ol className="big">
-        <li>데이터셋 파일을 AgensGraph로 Import</li>
-        <li>AgensGraph 상에서 쿼리를 실행해 데이터를 생성</li>
-      </ol>
-      <p>
-        이 튜토리얼에서는 데이터셋 파일(CSV)을 AgensGraph로 Import하는 방법을 설명할 것이며, 쿼리로 데이터를 생성하는 방법이 궁금하시다면 Bitnine 홈페이지를 방문해
-        <a target="_blank" rel="noopener noreferrer" href="http://bitnine.net/learn/"> Basic Cypher & Advanced Cypher</a>
-        백서를 참조하시기 바랍니다.
-        본 튜토리얼은 AgensGraph의 데이터 생성, 읽기, 업데이트, 삭제(CRUD) 결과를 시각화 도구인 AGViewer를 통해 안내합니다.
-        또한 본 튜토리얼에서 안내하는 제품 일부 기능은 오직 AgensGraph Enterprise Edition에서만 제공됩니다.
-        Enterprise 제품에 관한 자세한 사항은 Bitnine 홈페이지를 참조하시기 바랍니다.
-      </p>
-    </div>
-  </div>,
-  <div className="row content-row" key="s2">
-    <div className="col-sm-3">
-      <h3>Dataset Overview: Northwind</h3>
-      <p>
-        본 튜토리얼에서는 RDBMS에서 널리 사용되는 샘플 데이터셋인 Northwind 데이터셋을 사용합니다.
-      </p>
-      <hr />
-      <p>
-        <small>:help</small>
-        {' '}
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          cypher
-        </a>
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          MATCH
-        </a>
-      </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>Load records</h4>
-      <p>
-        Northwind 데이터셋은 흔히 관계형 데이터 예제로 사용되지만 그래프 데이터 예제로도 사용할 수 있습니다. Northwind 데이터셋에는 전세계에서 특수 식품을 수입, 수출하는 Northwind Traders라는 가상의 회사가 존재하며 이 회사의 판매 데이터가 들어 있습니다. 본 튜토리얼에서 제공하는 Northwind 데이터셋은 총 11개 테이블, Vertex Label 6개, Edge Label 6개로 구성되어 있으며 고객 91명, 주문이력 830회, 판매된 상품 77가지를 포함하고 있습니다.
-      </p>
-      <p>
-        데이터셋의 Entity-Relationship Diagram은 아래와 같습니다.
-        <img
-          src="resources/images/northwind/Entity-Relationship-Diagram.png"
-          className="img-responsive"
-          alt="Entity-Relationship-Diagram"
-        />
-      </p>
-    </div>
-  </div>,
-  <div className="row content-row" key="s3">
-    <div className="col-sm-3">
-      <h3>What is, and How to Generate Graph Model</h3>
-      <p>
-        그래프 모델(Graph Model)은 데이터를 Row와 Column으로 구성된 테이블(Table)이 아니라, 점(Node 또는 Vertex)과 점이 선(Link 또는 Edge)로 연결된 형태인 그래프로 구현한 데이터 모델입니다.
-      </p>
-      <hr />
-      <p>
-        <small>:help</small>
-        {' '}
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          cypher
-        </a>
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          MATCH
-        </a>
-      </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>Graph Modeling</h4>
-      <p>
-        테이블을 사용하는 관계형 모델에서 그래프 모델로 전환 시 다음 내용을 참고하십시오.
-      </p>
-      <ol className="big">
-        <li>관계형 모델에서 Row는 그래프 모델에서 Properties를 가진 Vertex 또는 Edge에 해당</li>
-        <li>관계형 모델에서 테이블명(Table Name)은 그래프 모델에서 Vertex Label과 Edge Label에 해당</li>
-      </ol>
-      <p>
-        Northwind 데이터셋의 그래프 모델은 다음과 같습니다.
-        <img
-          src="resources/images/northwind/Graphmodel.png"
-          className="img-responsive"
-          alt="Graphmodel"
-        />
-      </p>
-      <p>그래프 모델과 관계형 모델의 가장 큰 차이 중 하나는 그래프 모델이 관계형 모델과 다르게 현실 모델(비즈니스 모델)을 있는 그대로 반영한다는 점입니다. </p>
-      <p>관계형 모델은 복잡한 현실 세계의 비즈니스 모델을 가공해 표 형태의 테이블 형식으로 변환합니다. </p>
-      <p>하지만 현실 세계의 비즈니스 모델은 각 객체(Vertex)간에 관계(Edge)가 맺어진 형태이고, 유사한 객체끼리의 묶음이 그룹(Label)으로 표현되어 있습니다. 그리고 이는 그래프 모델의 데이터 구현 방식과 매우 유사합니다. </p>
-
-    </div>
-  </div>,
-  <div className="row content-row" key="s6">
-    <div className="col-sm-3">
-      <h3>Import CSV to AgensGraph</h3>
-      <p>
-        CSV형태의 데이터셋을 AgensGraph로 Import하려면 FDW(Foreign-Data Wrapper) 또는 COPY 명령어를 이용해야 합니다.
-      </p>
-      <hr />
-      <p>
-        <small>:help</small>
-        {' '}
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          cypher
-        </a>
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          MATCH
-        </a>
-      </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>Difference between FDW and COPY Command</h4>
-      <p>
-        FDW와 COPY명령어 모두, CSV파일을 Table화 하는데에 사용 되며 각 특징은 아래와 같습니다.
-      </p>
-      <table className="table">
-        <thead>
-          <tr>
-            <th scope="col"> </th>
-            <th scope="col">데이터셋</th>
-            <th scope="col">방식</th>
-            <th scope="col">비교</th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr>
-            <th scope="row">FDW</th>
-            <td>CSV, Absolute Path만 허용</td>
-            <td>Table조회시 File을 읽어서 테이블화</td>
-            <td>CSV 파일을 계속해서 유지하고 파일에 대한 변경내용이 테이블에 별도 작업 없이 반영되어야 할 때 사용</td>
-          </tr>
-          <tr>
-            <th scope="row">COPY</th>
-            <td>CSV, Network URL 허용</td>
-            <td>COPY 명령어를 수행시 CSV 데이터를 복사하여 테이블화</td>
-            <td>CSV 파일을 유지할 필요가 없고, Import후에는 DB에서 데이터를 관리 할 때 사용</td>
-          </tr>
-        </tbody>
-      </table>
-      <p>
-        이 튜토리얼에서는 AGViewer와 AgensGraph가 다른 서버에 설치되어 있다고 가정합니다. 따라서 사용자가 AgensGraph에서 Import할 CSV파일을 업로드 할 수도, 절대 경로를
-        제공 할 수도 없다는 상황을 가정하기에, COPY명령어를 통하여 Import하는 튜토리얼을 진행합니다. FDW를 사용한 Import방식이 궁금하시면 Bitnine 홈페지이를 방문해
-        <a target="_blank" rel="noopener noreferrer" href="https://bitnine.net/tutorial/tutorial_kor.html">튜토리얼</a>
-        {' '}
-        를 참조하시기 바랍니다.
-      </p>
-
-    </div>
-  </div>,
-  <div className="row content-row" key="s7">
-    <div className="col-sm-3">
-      <h3>Import CSV to AgensGraph via COPY</h3>
-      <p>
-        COPY Command를 사용하여 CSV데이터를 Table에 적재합니다.
-      </p>
-      <hr />
-      <p>
-        <small>:help</small>
-        {' '}
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          cypher
-        </a>
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          MATCH
-        </a>
-      </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>Create Tables</h4>
-      <figure>
-        <aside className="warn">
-          CSV 파일 형태의 데이터셋을 적재할 각각의 Table을 생성합니다.
-        </aside>
-        <CodeMirror
-          options={{
-            mode: 'cypher',
-            readOnly: true,
-          }}
-          value={`CREATE TABLE categories (CategoryID int, CategoryName varchar(15), Description text, Picture bytea);
-CREATE TABLE customers (CustomerID char(5), CompanyName varchar(40), ContactName varchar(30), ContactTitle varchar(30), Address varchar(60), City varchar(15), Region varchar(15), PostalCode varchar(10), Country varchar(15), Phone varchar(24), Fax varchar(24));
-CREATE TABLE employees (EmployeeID int, LastName varchar(20), FirstName varchar(10), Title varchar(30), TitleOfCourtesy varchar(25), BirthDate date, HireDate date, Address varchar(60), City varchar(15), Region varchar(15), PostalCode varchar(10), Country varchar(15), HomePhone varchar(24), Extension varchar(4), Photo bytea, Notes text, ReportTo int, PhotoPath varchar(255));
-CREATE TABLE employee_territories (EmployeeID int, TerritoryID varchar(20));
-CREATE TABLE orders_details (orderID int, ProductID int, UnitPrice money, Quantity smallint, Discount real);
-CREATE TABLE orders (orderID int, CustomerID char(5), EmployeeID int, orderDate date, RequiredDate date, ShippedDate date, ShipVia int, Freight money, ShipName varchar(40), ShipAddress varchar(60), ShipCity varchar(15), ShipRegion varchar(15), ShipPostalCode varchar(10), ShipCountry varchar(15));
-CREATE TABLE products (ProductID int, ProductName varchar(40), SupplierID int, CategoryID int, QuantityPerUnit varchar(20), UnitPrice money, UnitsInStock smallint, UnitsOnorder smallint, ReorderLevel smallint, Discontinued bit);
-CREATE TABLE regions (RegionID int, RegionDescription char(50));
-CREATE TABLE shippers (ShipperID int, CompanyName varchar(40), Phone varchar(24));
-CREATE TABLE suppliers (SupplierID int, CompanyName varchar(40), ContactName varchar(30), ContactTitle varchar(30), Address varchar(60), City varchar(15), Region varchar(15), PostalCode varchar(10), Country varchar(15), Phone varchar(24), Fax varchar(24), HomePage text);
-CREATE TABLE territories (TerritoryID varchar(20), TerritoryDescription char(50), RegionID int);`}
-        />
-      </figure>
-      <h4>Data Copy to Table</h4>
-      <figure>
-        <aside className="warn">
-          생성 된 테이블에 CSV 데이터셋을 적재합니다.
-        </aside>
-        <CodeMirror
-          options={{
-            mode: 'cypher',
-            readOnly: true,
-          }}
-          value={`COPY categories (
-    CategoryID,
-    CategoryName,
-    Description,
-    Picture
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/categories.csv' csv header delimiter ',';
-
-COPY customers (
-    CustomerID,
-    CompanyName,
-    ContactName,
-    ContactTitle,
-    Address,
-    City,
-    Region,
-    PostalCode,
-    Country,
-    Phone,
-    Fax
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/customers.csv' csv header delimiter ',';
-
-COPY employees (
-    EmployeeID,
-    LastName,
-    FirstName,
-    Title,
-    TitleOfCourtesy,
-    BirthDate,
-    HireDate,
-    Address,
-    City,
-    Region,
-    PostalCode,
-    Country,
-    HomePhone,
-    Extension,
-    Photo,
-    Notes,
-    ReportTo,
-    PhotoPath
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/employees.csv' csv header delimiter ',';
-
-COPY employee_territories (
-    EmployeeID,
-    TerritoryID
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/employee_territories.csv' csv header delimiter ',';
-
-COPY orders_details (
-    orderID,
-    ProductID,
-    UnitPrice,
-    Quantity,
-    Discount
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/orders_details.csv' csv header delimiter ',';
-
-COPY orders (
-    orderID,
-    CustomerID,
-    EmployeeID,
-    orderDate,
-    RequiredDate,
-    ShippedDate,
-    ShipVia,
-    Freight,
-    ShipName,
-    ShipAddress,
-    ShipCity,
-    ShipRegion,
-    ShipPostalCode,
-    ShipCountry
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/orders.csv' csv header delimiter ',';
-
-COPY products (
-    ProductID,
-    ProductName,
-    SupplierID,
-    CategoryID,
-    QuantityPerUnit,
-    UnitPrice,
-    UnitsInStock,
-    UnitsOnorder,
-    ReorderLevel,
-    Discontinued
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/products.csv' csv header delimiter ',';
-
-COPY regions (
-    RegionID,
-    RegionDescription
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/regions.csv' csv header delimiter ',';
-
-COPY shippers (
-    ShipperID,
-    CompanyName,
-    Phone
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/shippers.csv' csv header delimiter ',';
-
-COPY suppliers (
-    SupplierID,
-    CompanyName,
-    ContactName,
-    ContactTitle,
-    Address,
-    City,
-    Region,
-    PostalCode,
-    Country,
-    Phone,
-    Fax,
-    HomePage
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/suppliers.csv' csv header delimiter ',';
-
-COPY territories (
-    TerritoryID,
-    TerritoryDescription,
-    RegionID
-)
-FROM PROGRAM 'curl https://raw.githubusercontent.com/KarlJeong/northwind_dataset/master/territories.csv' csv header delimiter ',';`}
-        />
-      </figure>
-    </div>
-  </div>,
-  <div className="row content-row" key="s9">
-    <div className="col-sm-3">
-      <h3>Import CSV to AgensGraph via COPY</h3>
-      <p>
-        적재된 Table의 데이터를 기반으로 Vertex 생성하고 효율적인 탐색을 위하여 Index를 생성합니다.
-      </p>
-      <hr />
-      <p>
-        <small>:help</small>
-        {' '}
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          cypher
-        </a>
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          MATCH
-        </a>
-      </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>Create Vertices</h4>
-      <figure>
-        <CodeMirror
-          options={{
-            mode: 'cypher',
-            readOnly: true,
-          }}
-          value={`LOAD FROM categories AS source CREATE (n:category=to_jsonb(source));
-LOAD FROM customers AS source CREATE (n:customer=to_jsonb(source));
-LOAD FROM employees AS source CREATE (n:employee=to_jsonb(source));
-CREATE VLABEL IF NOT EXISTS "order";
-LOAD FROM orders AS source CREATE (n:"order"=to_jsonb(source));
-LOAD FROM products AS source CREATE (n:product=to_jsonb(source));
-LOAD FROM regions AS source CREATE (n:region=to_jsonb(source));
-LOAD FROM shippers AS source CREATE (n:shipper=to_jsonb(source));
-LOAD FROM suppliers AS source CREATE (n:supplier=to_jsonb(source));
-LOAD FROM territories AS source CREATE (n:territory=to_jsonb(source));`}
-        />
-        <aside className="warn">
-          각 Table의 데이터를 로드하여 Vertex를 생성하였습니다. 이 때, Table 각 Column이 Vertex의 Property로 입력 됩니다.
-        </aside>
-      </figure>
-      <h4>Create Indices</h4>
-      <figure>
-        <CodeMirror
-          options={{
-            mode: 'cypher',
-            readOnly: true,
-          }}
-          value={`CREATE PROPERTY INDEX ON category(categoryid);
-CREATE PROPERTY INDEX ON customer(customerid);
-CREATE PROPERTY INDEX ON employee(employeeid);
-CREATE PROPERTY INDEX ON "order"(orderid);
-CREATE PROPERTY INDEX ON product(productid);
-CREATE PROPERTY INDEX ON region(regionid);
-CREATE PROPERTY INDEX ON shipper(shipperid);
-CREATE PROPERTY INDEX ON supplier(supplierid);
-CREATE PROPERTY INDEX ON territory(territoryid);`}
-        />
-        <aside className="warn">
-          생성한 Vertex별로 특정 속성에 Index를 생성합니다.
-        </aside>
-      </figure>
-
-    </div>
-  </div>,
-  <div className="row content-row" key="s10">
-    <div className="col-sm-3">
-      <h3>Import CSV to AgensGraph via COPY</h3>
-      <p>
-        생성된 Vertex간의 Edge를 생성합니다.
-      </p>
-      <hr />
-      <p>
-        <small>:help</small>
-        {' '}
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          cypher
-        </a>
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          MATCH
-        </a>
-      </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>Create Edges</h4>
-      <figure>
-        <CodeMirror
-          options={{
-            mode: 'cypher',
-            readOnly: true,
-          }}
-          value={`LOAD FROM orders_details AS source
-MATCH (n:"order"),(m:product)
-WHERE n.orderid=to_jsonb((source).orderid)
-AND m.productid=to_jsonb((source).productid)
-CREATE (n)-[r:ORDERS {unitprice:(source).unitprice,quantity:(source).quantity,discount:(source).discount}]->(m);
-
-MATCH (n:employee),(m:employee)
-WHERE m.employeeid=n.reportto
-CREATE (n)-[r:REPORTS_TO]->(m);
-
-MATCH (n:supplier),(m:product)
-WHERE m.supplierid=n.supplierid
-CREATE (n)-[r:SUPPLIES]->(m);
-
-MATCH (n:product),(m:category)
-WHERE n.categoryid=m.categoryid
-CREATE (n)-[r:PART_OF]->(m);
-
-MATCH (n:customer),(m:"order")
-WHERE m.customerid=n.customerid
-CREATE (n)-[r:PURCHASED]->(m);
-
-MATCH (n:employee),(m:"order")
-WHERE m.employeeid=n.employeeid
-CREATE (n)-[r:SOLD]->(m);`}
-        />
-        <aside className="warn">
-          위 과정을 모두 정상적으로 수행하셨다면 아래와 같은 그래프 모델이 생성됩니다. (AGViewer에서 쿼리 수행 시 그래프 레이아웃 및 쿼리 조건에 따라 보여지는 모습이 달라질 수 있습니다)
-
-        </aside>
-      </figure>
-    </div>
-  </div>,
-  <div className="row content-row" key="s11">
-    <div className="col-sm-3">
-      <h3>Querying Graph Data</h3>
-      <p>
-        AgensGraph에 Northwind 데이터 적재가 완료되었다면 Cypher 쿼리로 데이터를 조회하여 데이터가 정상적으로 적재되었는지 확인합니다.
-        이 튜토리얼에서는 이해를 돕기 위해 OpenBroswer에서 쿼리를 실행해 그래프를 시각화하여 제공합니다.
-      </p>
-      <hr />
-      <p>
-        <small>:help</small>
-        {' '}
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          cypher
-        </a>
-        <a href="/#" className="badge badge-light">
-          <FontAwesomeIcon
-            icon={faPlayCircle}
-            size="lg"
-          />
-          MATCH
-        </a>
-      </p>
-    </div>
-    <div className="col-sm-9">
-      <h4>전체 데이터 중 100개를 조회해보기</h4>
-      <figure>
-        <CodeMirror
-          options={{
-            mode: 'cypher',
-            readOnly: true,
-          }}
-          value={`MATCH (c:customer)-[pc:purchased]->(o:"order")-[r:orders]->(p:product)
-RETURN *
-LIMIT 100;`}
-        />
-        <aside className="warn">
-          고객, 주문, 상품을 합쳐 최대 100개의 객체를 조회해보겠습니다.
-        </aside>
-      </figure>
-      <h4>특정 고객의 데이터만 조회해보기</h4>
-      <figure>
-        <CodeMirror
-          options={{
-            mode: 'cypher',
-            readOnly: true,
-          }}
-          value={`MATCH (c:customer)-[pc:PURCHASED]->(o:"order")-[r:ORDERS]->(p:product)-[po:PART_OF]->(ct:category)
-WHERE c.customerid = 'ANTON'
-RETURN *
-LIMIT 100;`}
-        />
-        <aside className="warn">
-          여러 고객 중 &apos;ANTON&apos;이라는 이름을 가진 고객의 구매 데이터를 조회해보겠습니다.
-        </aside>
-      </figure>
-    </div>
-  </div>,
-];
diff --git a/frontend/src/features/database/DatabaseSlice.js b/frontend/src/features/database/DatabaseSlice.js
index 9f5a0fa..04c6efe 100644
--- a/frontend/src/features/database/DatabaseSlice.js
+++ b/frontend/src/features/database/DatabaseSlice.js
@@ -19,8 +19,8 @@
 
 import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
 
-export const connectToAgensGraph = createAsyncThunk(
-  'database/connectToAgensGraph',
+export const connectToDatabase = createAsyncThunk(
+  'database/connectToDatabase',
   async (formData) => {
     try {
       const response = await fetch('/api/v1/db/connect',
@@ -46,8 +46,8 @@ export const connectToAgensGraph = createAsyncThunk(
   },
 );
 
-export const disconnectToAgensGraph = createAsyncThunk(
-  'database/disconnectToAgensGraph',
+export const disconnectToDatabase = createAsyncThunk(
+  'database/disconnectToDatabase',
   async () => {
     await fetch('/api/v1/db/disconnect');
   },
@@ -80,7 +80,7 @@ const DatabaseSlice = createSlice({
   reducers: {
   },
   extraReducers: {
-    [connectToAgensGraph.fulfilled]: (state, action) => ({
+    [connectToDatabase.fulfilled]: (state, action) => ({
       host: action.payload.host,
       port: action.payload.port,
       user: action.payload.user,
@@ -90,7 +90,7 @@ const DatabaseSlice = createSlice({
       flavor: action.payload.flavor,
       status: 'connected',
     }),
-    [connectToAgensGraph.rejected]: () => ({
+    [connectToDatabase.rejected]: () => ({
       host: '',
       port: '',
       user: '',
@@ -100,7 +100,7 @@ const DatabaseSlice = createSlice({
       flavor: '',
       status: 'disconnected',
     }),
-    [disconnectToAgensGraph.fulfilled]: () => ({
+    [disconnectToDatabase.fulfilled]: () => ({
       host: '',
       port: '',
       user: '',