Deploy: exdev sync 2026-08-13 13:38:36
This commit is contained in:
Regular → Executable
+18
-18
@@ -1,18 +1,18 @@
|
|||||||
# exChatbot Agent 2.0
|
# exChatbot Agent 2.0
|
||||||
**/build/
|
**/build/
|
||||||
**/.gradle/
|
**/.gradle/
|
||||||
**/node_modules/
|
**/node_modules/
|
||||||
**/.env
|
**/.env
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.log
|
*.log
|
||||||
*.pid
|
*.pid
|
||||||
*.zip
|
*.zip
|
||||||
|
|
||||||
exAiChatBot-chatbot2.0-agent/qdrant_data/
|
exAiChatBot-chatbot2.0-agent/qdrant_data/
|
||||||
chatbotApp-chatbot2.0-agent/public/
|
chatbotApp-chatbot2.0-agent/public/
|
||||||
chatbotApp-chatbot2.0-agent/public-*/
|
chatbotApp-chatbot2.0-agent/public-*/
|
||||||
local-dev/run/
|
local-dev/run/
|
||||||
local-dev/logs/
|
local-dev/logs/
|
||||||
server-dev/run/
|
server-dev/run/
|
||||||
server-dev/logs/
|
server-dev/logs/
|
||||||
.venv-data/
|
.venv-data/
|
||||||
|
|||||||
Regular → Executable
+16
-16
@@ -1,16 +1,16 @@
|
|||||||
[submodule "chatbotApp-chatbot2.0-agent"]
|
[submodule "chatbotApp-chatbot2.0-agent"]
|
||||||
path = chatbotApp-chatbot2.0-agent
|
path = chatbotApp-chatbot2.0-agent
|
||||||
url = https://github.com/KoreaExpressWayCorp/chatbotApp.git
|
url = https://github.com/KoreaExpressWayCorp/chatbotApp.git
|
||||||
branch = chatbot2.0-agent
|
branch = chatbot2.0-agent
|
||||||
[submodule "chatbotApi-chatbot2.0-agent"]
|
[submodule "chatbotApi-chatbot2.0-agent"]
|
||||||
path = chatbotApi-chatbot2.0-agent
|
path = chatbotApi-chatbot2.0-agent
|
||||||
url = https://github.com/KoreaExpressWayCorp/chatbotApi.git
|
url = https://github.com/KoreaExpressWayCorp/chatbotApi.git
|
||||||
branch = chatbot2.0-agent
|
branch = chatbot2.0-agent
|
||||||
[submodule "exAiChatBot-chatbot2.0-agent"]
|
[submodule "exAiChatBot-chatbot2.0-agent"]
|
||||||
path = exAiChatBot-chatbot2.0-agent
|
path = exAiChatBot-chatbot2.0-agent
|
||||||
url = https://github.com/KoreaExpressWayCorp/exAiChatBot.git
|
url = https://github.com/KoreaExpressWayCorp/exAiChatBot.git
|
||||||
branch = chatbot2.0-agent
|
branch = chatbot2.0-agent
|
||||||
[submodule "kakaoChatbotSkill-chatbot2.0-agent"]
|
[submodule "kakaoChatbotSkill-chatbot2.0-agent"]
|
||||||
path = kakaoChatbotSkill-chatbot2.0-agent
|
path = kakaoChatbotSkill-chatbot2.0-agent
|
||||||
url = https://github.com/KoreaExpressWayCorp/kakaoChatbotSkill.git
|
url = https://github.com/KoreaExpressWayCorp/kakaoChatbotSkill.git
|
||||||
branch = chatbot2.0-agent
|
branch = chatbot2.0-agent
|
||||||
|
|||||||
Regular → Executable
+5
-5
@@ -1,5 +1,5 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
dist/
|
dist/
|
||||||
.venv-icons/
|
.venv-icons/
|
||||||
*.log
|
*.log
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|||||||
Regular → Executable
+48
-48
@@ -1,48 +1,48 @@
|
|||||||
# EX AI Chatbot 데스크톱 앱
|
# EX AI Chatbot 데스크톱 앱
|
||||||
|
|
||||||
Electron 래퍼 — 브라우저 주소표시줄 없이 챗봇을 독립 창으로 실행합니다.
|
Electron 래퍼 — 브라우저 주소표시줄 없이 챗봇을 독립 창으로 실행합니다.
|
||||||
|
|
||||||
## 빌드 · 배포
|
## 빌드 · 배포
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./build-and-publish.sh
|
./build-and-publish.sh
|
||||||
# 또는
|
# 또는
|
||||||
npm run dist:mac # dmg(설치) + zip(포터블), intel + silicon
|
npm run dist:mac # dmg(설치) + zip(포터블), intel + silicon
|
||||||
npm run dist:win # Setup.exe(설치) + portable.exe, win32 + win64
|
npm run dist:win # Setup.exe(설치) + portable.exe, win32 + win64
|
||||||
npm run publish-downloads
|
npm run publish-downloads
|
||||||
```
|
```
|
||||||
|
|
||||||
산출물은 `chatbotApp-chatbot2.0-agent/public-ai/downloads/` 로 복사됩니다.
|
산출물은 `chatbotApp-chatbot2.0-agent/public-ai/downloads/` 로 복사됩니다.
|
||||||
|
|
||||||
| 구분 | 파일 |
|
| 구분 | 파일 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| Mac 설치 (Intel) | `exAIChatbot 2.0-mac-intel.dmg` |
|
| Mac 설치 (Intel) | `exAIChatbot 2.0-mac-intel.dmg` |
|
||||||
| Mac 포터블 (Intel) | `exAIChatbot 2.0-mac-intel.zip` |
|
| Mac 포터블 (Intel) | `exAIChatbot 2.0-mac-intel.zip` |
|
||||||
| Mac 설치 (Apple Silicon) | `exAIChatbot 2.0-mac-silicon.dmg` |
|
| Mac 설치 (Apple Silicon) | `exAIChatbot 2.0-mac-silicon.dmg` |
|
||||||
| Mac 포터블 (Apple Silicon) | `exAIChatbot 2.0-mac-silicon.zip` |
|
| Mac 포터블 (Apple Silicon) | `exAIChatbot 2.0-mac-silicon.zip` |
|
||||||
| Windows 설치 64비트 | `exAIChatbot 2.0-win64-Setup.exe` |
|
| Windows 설치 64비트 | `exAIChatbot 2.0-win64-Setup.exe` |
|
||||||
| Windows 포터블 64비트 | `exAIChatbot 2.0-win64-portable.exe` |
|
| Windows 포터블 64비트 | `exAIChatbot 2.0-win64-portable.exe` |
|
||||||
| Windows 설치 32비트 | `exAIChatbot 2.0-win32-Setup.exe` |
|
| Windows 설치 32비트 | `exAIChatbot 2.0-win32-Setup.exe` |
|
||||||
| Windows 포터블 32비트 | `exAIChatbot 2.0-win32-portable.exe` |
|
| Windows 포터블 32비트 | `exAIChatbot 2.0-win32-portable.exe` |
|
||||||
|
|
||||||
다운로드 URL 예:
|
다운로드 URL 예:
|
||||||
|
|
||||||
- `/chatbot/ai/downloads/exAIChatbot%202.0-mac-silicon.dmg`
|
- `/chatbot/ai/downloads/exAIChatbot%202.0-mac-silicon.dmg`
|
||||||
- `/chatbot/ai/downloads/exAIChatbot%202.0-win64-Setup.exe`
|
- `/chatbot/ai/downloads/exAIChatbot%202.0-win64-Setup.exe`
|
||||||
|
|
||||||
## 앱 아이콘
|
## 앱 아이콘
|
||||||
|
|
||||||
공식 길통이·차로(`ai-mascot.png`)로 Dock/바로가기 아이콘을 생성합니다.
|
공식 길통이·차로(`ai-mascot.png`)로 Dock/바로가기 아이콘을 생성합니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run build:icons # build/icon.png · icon.icns · icon.ico
|
npm run build:icons # build/icon.png · icon.icns · icon.ico
|
||||||
```
|
```
|
||||||
|
|
||||||
`dist:mac` / `dist:win` 실행 시 자동으로 아이콘을 다시 만든 뒤 패키징합니다.
|
`dist:mac` / `dist:win` 실행 시 자동으로 아이콘을 다시 만든 뒤 패키징합니다.
|
||||||
|
|
||||||
## 사용 안내
|
## 사용 안내
|
||||||
|
|
||||||
- **Mac dmg:** 앱을 Applications로 드래그. 차단 시 설정 화면「Mac 설치 명령 복사」.
|
- **Mac dmg:** 앱을 Applications로 드래그. 차단 시 설정 화면「Mac 설치 명령 복사」.
|
||||||
- **Mac zip:** `실행하기.command` 또는 `.app` 실행.
|
- **Mac zip:** `실행하기.command` 또는 `.app` 실행.
|
||||||
- **Windows Setup:** 설치 마법사 실행.
|
- **Windows Setup:** 설치 마법사 실행.
|
||||||
- **Windows portable:** 압축 없이 exe 바로 실행. SmartScreen → 추가 정보 → 실행.
|
- **Windows portable:** 압축 없이 exe 바로 실행. SmartScreen → 추가 정보 → 실행.
|
||||||
|
|||||||
Regular → Executable
+181
-181
@@ -1,181 +1,181 @@
|
|||||||
const { app, BrowserWindow, shell, Menu, session } = require("electron");
|
const { app, BrowserWindow, shell, Menu, session } = require("electron");
|
||||||
const path = require("node:path");
|
const path = require("node:path");
|
||||||
const fs = require("node:fs");
|
const fs = require("node:fs");
|
||||||
|
|
||||||
// Gatekeeper / ad-hoc 서명 환경에서 GPU Helper SIGTRAP 완화
|
// Gatekeeper / ad-hoc 서명 환경에서 GPU Helper SIGTRAP 완화
|
||||||
app.disableHardwareAcceleration();
|
app.disableHardwareAcceleration();
|
||||||
app.commandLine.appendSwitch("disable-gpu");
|
app.commandLine.appendSwitch("disable-gpu");
|
||||||
app.commandLine.appendSwitch("disable-gpu-compositing");
|
app.commandLine.appendSwitch("disable-gpu-compositing");
|
||||||
app.commandLine.appendSwitch("disable-software-rasterizer");
|
app.commandLine.appendSwitch("disable-software-rasterizer");
|
||||||
app.commandLine.appendSwitch("no-sandbox");
|
app.commandLine.appendSwitch("no-sandbox");
|
||||||
app.commandLine.appendSwitch("disable-dev-shm-usage");
|
app.commandLine.appendSwitch("disable-dev-shm-usage");
|
||||||
|
|
||||||
const WINDOW_WIDTH = 390;
|
const WINDOW_WIDTH = 390;
|
||||||
const WINDOW_HEIGHT = 720;
|
const WINDOW_HEIGHT = 720;
|
||||||
|
|
||||||
const DEFAULT_URL =
|
const DEFAULT_URL =
|
||||||
process.env.CHATBOT_APP_URL ||
|
process.env.CHATBOT_APP_URL ||
|
||||||
"https://chatbot.exdev.co.kr/chatbot/ai/?desktop=1";
|
"https://chatbot.exdev.co.kr/chatbot/ai/?desktop=1";
|
||||||
|
|
||||||
const logFile = path.join(app.getPath("userData"), "ex-ai-chatbot.log");
|
const logFile = path.join(app.getPath("userData"), "ex-ai-chatbot.log");
|
||||||
|
|
||||||
function log(msg) {
|
function log(msg) {
|
||||||
const line = `[${new Date().toISOString()}] ${msg}\n`;
|
const line = `[${new Date().toISOString()}] ${msg}\n`;
|
||||||
try {
|
try {
|
||||||
fs.appendFileSync(logFile, line);
|
fs.appendFileSync(logFile, line);
|
||||||
} catch {
|
} catch {
|
||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
console.log(msg);
|
console.log(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 챗봇 주소의 마이크·위치 요청은 매번 묻지 않고 허용한다. */
|
/** 챗봇 주소의 마이크·위치 요청은 매번 묻지 않고 허용한다. */
|
||||||
function allowMicrophoneForChatbot() {
|
function allowMicrophoneForChatbot() {
|
||||||
const allowed = new Set([
|
const allowed = new Set([
|
||||||
"media",
|
"media",
|
||||||
"audioCapture",
|
"audioCapture",
|
||||||
"mediaKeySystem",
|
"mediaKeySystem",
|
||||||
"geolocation",
|
"geolocation",
|
||||||
]);
|
]);
|
||||||
const appOrigin = (() => {
|
const appOrigin = (() => {
|
||||||
try {
|
try {
|
||||||
return new URL(DEFAULT_URL).origin;
|
return new URL(DEFAULT_URL).origin;
|
||||||
} catch {
|
} catch {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
const isChatbotOrigin = (url) => {
|
const isChatbotOrigin = (url) => {
|
||||||
if (!appOrigin || !url) return false;
|
if (!appOrigin || !url) return false;
|
||||||
try {
|
try {
|
||||||
return new URL(url).origin === appOrigin;
|
return new URL(url).origin === appOrigin;
|
||||||
} catch {
|
} catch {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const ses = session.defaultSession;
|
const ses = session.defaultSession;
|
||||||
|
|
||||||
ses.setPermissionRequestHandler((webContents, permission, callback, details) => {
|
ses.setPermissionRequestHandler((webContents, permission, callback, details) => {
|
||||||
const url = details?.requestingUrl || webContents?.getURL();
|
const url = details?.requestingUrl || webContents?.getURL();
|
||||||
callback(allowed.has(permission) && isChatbotOrigin(url));
|
callback(allowed.has(permission) && isChatbotOrigin(url));
|
||||||
});
|
});
|
||||||
|
|
||||||
ses.setPermissionCheckHandler((_webContents, permission, requestingOrigin, details) => {
|
ses.setPermissionCheckHandler((_webContents, permission, requestingOrigin, details) => {
|
||||||
const url = requestingOrigin || details?.requestingUrl;
|
const url = requestingOrigin || details?.requestingUrl;
|
||||||
return allowed.has(permission) && isChatbotOrigin(url);
|
return allowed.has(permission) && isChatbotOrigin(url);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (typeof ses.setDevicePermissionHandler === "function") {
|
if (typeof ses.setDevicePermissionHandler === "function") {
|
||||||
ses.setDevicePermissionHandler((details) => isChatbotOrigin(details?.origin));
|
ses.setDevicePermissionHandler((details) => isChatbotOrigin(details?.origin));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createWindow() {
|
function createWindow() {
|
||||||
const iconPath = path.join(__dirname, "build", process.platform === "win32" ? "icon.ico" : "icon.png");
|
const iconPath = path.join(__dirname, "build", process.platform === "win32" ? "icon.ico" : "icon.png");
|
||||||
const winOpts = {
|
const winOpts = {
|
||||||
width: WINDOW_WIDTH,
|
width: WINDOW_WIDTH,
|
||||||
height: WINDOW_HEIGHT,
|
height: WINDOW_HEIGHT,
|
||||||
minWidth: 360,
|
minWidth: 360,
|
||||||
minHeight: 520,
|
minHeight: 520,
|
||||||
title: "한국도로공사 AI 챗봇",
|
title: "한국도로공사 AI 챗봇",
|
||||||
backgroundColor: "#ffffff",
|
backgroundColor: "#ffffff",
|
||||||
autoHideMenuBar: true,
|
autoHideMenuBar: true,
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: path.join(__dirname, "preload.js"),
|
preload: path.join(__dirname, "preload.js"),
|
||||||
contextIsolation: true,
|
contextIsolation: true,
|
||||||
nodeIntegration: false,
|
nodeIntegration: false,
|
||||||
sandbox: false,
|
sandbox: false,
|
||||||
webSecurity: true,
|
webSecurity: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
if (fs.existsSync(iconPath)) {
|
if (fs.existsSync(iconPath)) {
|
||||||
winOpts.icon = iconPath;
|
winOpts.icon = iconPath;
|
||||||
}
|
}
|
||||||
const win = new BrowserWindow(winOpts);
|
const win = new BrowserWindow(winOpts);
|
||||||
|
|
||||||
Menu.setApplicationMenu(null);
|
Menu.setApplicationMenu(null);
|
||||||
|
|
||||||
win.once("ready-to-show", () => {
|
win.once("ready-to-show", () => {
|
||||||
win.show();
|
win.show();
|
||||||
if (process.platform === "darwin" && app.dock) {
|
if (process.platform === "darwin" && app.dock) {
|
||||||
const dockIcon = path.join(__dirname, "build", "icon.png");
|
const dockIcon = path.join(__dirname, "build", "icon.png");
|
||||||
if (fs.existsSync(dockIcon)) {
|
if (fs.existsSync(dockIcon)) {
|
||||||
try {
|
try {
|
||||||
app.dock.setIcon(dockIcon);
|
app.dock.setIcon(dockIcon);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log(`dock.setIcon failed: ${e}`);
|
log(`dock.setIcon failed: ${e}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
app.dock.show();
|
app.dock.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
win.webContents.on("did-fail-load", (_e, code, desc, url) => {
|
win.webContents.on("did-fail-load", (_e, code, desc, url) => {
|
||||||
log(`did-fail-load code=${code} desc=${desc} url=${url}`);
|
log(`did-fail-load code=${code} desc=${desc} url=${url}`);
|
||||||
// 네트워크 실패 시에도 빈 창으로 종료되지 않도록 안내 페이지
|
// 네트워크 실패 시에도 빈 창으로 종료되지 않도록 안내 페이지
|
||||||
const html = `<!doctype html><meta charset="utf-8"/>
|
const html = `<!doctype html><meta charset="utf-8"/>
|
||||||
<body style="font:14px -apple-system,sans-serif;padding:40px;line-height:1.6">
|
<body style="font:14px -apple-system,sans-serif;padding:40px;line-height:1.6">
|
||||||
<h2>연결 실패</h2>
|
<h2>연결 실패</h2>
|
||||||
<p>챗봇 서버에 연결하지 못했습니다.</p>
|
<p>챗봇 서버에 연결하지 못했습니다.</p>
|
||||||
<p style="color:#666">${code}: ${desc}</p>
|
<p style="color:#666">${code}: ${desc}</p>
|
||||||
<p><a href="${DEFAULT_URL}">다시 시도</a></p>
|
<p><a href="${DEFAULT_URL}">다시 시도</a></p>
|
||||||
</body>`;
|
</body>`;
|
||||||
win.loadURL(`data:text/html;charset=utf-8,${encodeURIComponent(html)}`);
|
win.loadURL(`data:text/html;charset=utf-8,${encodeURIComponent(html)}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
win.webContents.on("render-process-gone", (_e, details) => {
|
win.webContents.on("render-process-gone", (_e, details) => {
|
||||||
log(`render-process-gone ${JSON.stringify(details)}`);
|
log(`render-process-gone ${JSON.stringify(details)}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
win.on("unresponsive", () => log("window unresponsive"));
|
win.on("unresponsive", () => log("window unresponsive"));
|
||||||
|
|
||||||
log(`loadURL ${DEFAULT_URL}`);
|
log(`loadURL ${DEFAULT_URL}`);
|
||||||
win.loadURL(DEFAULT_URL).catch((err) => log(`loadURL error: ${err}`));
|
win.loadURL(DEFAULT_URL).catch((err) => log(`loadURL error: ${err}`));
|
||||||
|
|
||||||
win.webContents.setWindowOpenHandler(({ url }) => {
|
win.webContents.setWindowOpenHandler(({ url }) => {
|
||||||
shell.openExternal(url);
|
shell.openExternal(url);
|
||||||
return { action: "deny" };
|
return { action: "deny" };
|
||||||
});
|
});
|
||||||
|
|
||||||
return win;
|
return win;
|
||||||
}
|
}
|
||||||
|
|
||||||
const gotLock = app.requestSingleInstanceLock();
|
const gotLock = app.requestSingleInstanceLock();
|
||||||
if (!gotLock) {
|
if (!gotLock) {
|
||||||
app.quit();
|
app.quit();
|
||||||
} else {
|
} else {
|
||||||
app.on("second-instance", () => {
|
app.on("second-instance", () => {
|
||||||
const wins = BrowserWindow.getAllWindows();
|
const wins = BrowserWindow.getAllWindows();
|
||||||
if (wins.length > 0) {
|
if (wins.length > 0) {
|
||||||
if (wins[0].isMinimized()) wins[0].restore();
|
if (wins[0].isMinimized()) wins[0].restore();
|
||||||
wins[0].focus();
|
wins[0].focus();
|
||||||
} else {
|
} else {
|
||||||
createWindow();
|
createWindow();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
app.whenReady().then(() => {
|
app.whenReady().then(() => {
|
||||||
app.setName("EX AI Chatbot");
|
app.setName("EX AI Chatbot");
|
||||||
log(`ready userData=${app.getPath("userData")}`);
|
log(`ready userData=${app.getPath("userData")}`);
|
||||||
allowMicrophoneForChatbot();
|
allowMicrophoneForChatbot();
|
||||||
createWindow();
|
createWindow();
|
||||||
|
|
||||||
app.on("activate", () => {
|
app.on("activate", () => {
|
||||||
if (BrowserWindow.getAllWindows().length === 0) {
|
if (BrowserWindow.getAllWindows().length === 0) {
|
||||||
createWindow();
|
createWindow();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on("window-all-closed", () => {
|
app.on("window-all-closed", () => {
|
||||||
if (process.platform !== "darwin") {
|
if (process.platform !== "darwin") {
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
process.on("uncaughtException", (err) => {
|
process.on("uncaughtException", (err) => {
|
||||||
log(`uncaughtException ${err?.stack || err}`);
|
log(`uncaughtException ${err?.stack || err}`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
+5288
-5288
File diff suppressed because it is too large
Load Diff
Regular → Executable
+72
-72
@@ -1,72 +1,72 @@
|
|||||||
{
|
{
|
||||||
"name": "ex-ai-chatbot-desktop",
|
"name": "ex-ai-chatbot-desktop",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "한국도로공사 AI 챗봇 데스크톱 앱 (Electron 래퍼)",
|
"description": "한국도로공사 AI 챗봇 데스크톱 앱 (Electron 래퍼)",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"author": "EX",
|
"author": "EX",
|
||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "electron .",
|
"start": "electron .",
|
||||||
"build:icons": "python3 scripts/build-icons.py",
|
"build:icons": "python3 scripts/build-icons.py",
|
||||||
"dist:mac:detach": "hdiutil detach '/Volumes/EX AI Chatbot' -force 2>/dev/null || hdiutil detach '/Volumes/EX AI Chatbot Intel' -force 2>/dev/null || hdiutil detach '/Volumes/EX AI Chatbot Silicon' -force 2>/dev/null || true",
|
"dist:mac:detach": "hdiutil detach '/Volumes/EX AI Chatbot' -force 2>/dev/null || hdiutil detach '/Volumes/EX AI Chatbot Intel' -force 2>/dev/null || hdiutil detach '/Volumes/EX AI Chatbot Silicon' -force 2>/dev/null || true",
|
||||||
"dist:mac:x64": "npm run dist:mac:detach && electron-builder --mac dir --x64",
|
"dist:mac:x64": "npm run dist:mac:detach && electron-builder --mac dir --x64",
|
||||||
"dist:mac:arm64": "npm run dist:mac:detach && electron-builder --mac dir --arm64",
|
"dist:mac:arm64": "npm run dist:mac:detach && electron-builder --mac dir --arm64",
|
||||||
"dist:mac": "npm run build:icons && npm run dist:mac:x64 && npm run dist:mac:arm64 && node scripts/finalize-mac.mjs",
|
"dist:mac": "npm run build:icons && npm run dist:mac:x64 && npm run dist:mac:arm64 && node scripts/finalize-mac.mjs",
|
||||||
"dist:win": "npm run build:icons && electron-builder --win --x64 --ia32 && node scripts/finalize-win.mjs",
|
"dist:win": "npm run build:icons && electron-builder --win --x64 --ia32 && node scripts/finalize-win.mjs",
|
||||||
"dist:all": "npm run dist:mac && npm run dist:win",
|
"dist:all": "npm run dist:mac && npm run dist:win",
|
||||||
"publish-downloads": "node scripts/publish-downloads.mjs"
|
"publish-downloads": "node scripts/publish-downloads.mjs"
|
||||||
},
|
},
|
||||||
"build": {
|
"build": {
|
||||||
"appId": "kr.co.ex.aichatbot",
|
"appId": "kr.co.ex.aichatbot",
|
||||||
"productName": "EX AI Chatbot",
|
"productName": "EX AI Chatbot",
|
||||||
"copyright": "Copyright © Korea Expressway Corporation",
|
"copyright": "Copyright © Korea Expressway Corporation",
|
||||||
"directories": {
|
"directories": {
|
||||||
"output": "dist",
|
"output": "dist",
|
||||||
"buildResources": "build"
|
"buildResources": "build"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"main.js",
|
"main.js",
|
||||||
"preload.js",
|
"preload.js",
|
||||||
"package.json",
|
"package.json",
|
||||||
"build/icon.png",
|
"build/icon.png",
|
||||||
"build/icon.ico"
|
"build/icon.ico"
|
||||||
],
|
],
|
||||||
"mac": {
|
"mac": {
|
||||||
"category": "public.app-category.utilities",
|
"category": "public.app-category.utilities",
|
||||||
"icon": "build/icon.icns",
|
"icon": "build/icon.icns",
|
||||||
"target": ["dir"],
|
"target": ["dir"],
|
||||||
"identity": null
|
"identity": null
|
||||||
},
|
},
|
||||||
"win": {
|
"win": {
|
||||||
"icon": "build/icon.ico",
|
"icon": "build/icon.ico",
|
||||||
"target": [
|
"target": [
|
||||||
{
|
{
|
||||||
"target": "nsis",
|
"target": "nsis",
|
||||||
"arch": ["x64", "ia32"]
|
"arch": ["x64", "ia32"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"target": "portable",
|
"target": "portable",
|
||||||
"arch": ["x64", "ia32"]
|
"arch": ["x64", "ia32"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"nsis": {
|
"nsis": {
|
||||||
"oneClick": false,
|
"oneClick": false,
|
||||||
"allowToChangeInstallationDirectory": true,
|
"allowToChangeInstallationDirectory": true,
|
||||||
"createDesktopShortcut": true,
|
"createDesktopShortcut": true,
|
||||||
"createStartMenuShortcut": true,
|
"createStartMenuShortcut": true,
|
||||||
"shortcutName": "EX AI Chatbot",
|
"shortcutName": "EX AI Chatbot",
|
||||||
"installerIcon": "build/icon.ico",
|
"installerIcon": "build/icon.ico",
|
||||||
"uninstallerIcon": "build/icon.ico",
|
"uninstallerIcon": "build/icon.ico",
|
||||||
"artifactName": "raw-win-${arch}-Setup.${ext}"
|
"artifactName": "raw-win-${arch}-Setup.${ext}"
|
||||||
},
|
},
|
||||||
"portable": {
|
"portable": {
|
||||||
"artifactName": "raw-win-${arch}-portable.${ext}"
|
"artifactName": "raw-win-${arch}-portable.${ext}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "^35.1.2",
|
"electron": "^35.1.2",
|
||||||
"electron-builder": "^25.1.8"
|
"electron-builder": "^25.1.8"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Regular → Executable
+14
-14
@@ -1,14 +1,14 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>com.apple.security.cs.allow-jit</key>
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.cs.disable-library-validation</key>
|
<key>com.apple.security.cs.disable-library-validation</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||||
<true/>
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|||||||
Regular → Executable
+36
-36
@@ -1,36 +1,36 @@
|
|||||||
EX AI Chatbot — Mac 설치 안내
|
EX AI Chatbot — Mac 설치 안내
|
||||||
================================
|
================================
|
||||||
|
|
||||||
이 패키지는 Apple 공증(notarization)이 없는 사내/개발용 빌드입니다.
|
이 패키지는 Apple 공증(notarization)이 없는 사내/개발용 빌드입니다.
|
||||||
Chrome 등으로 받은 뒤 앱을 바로 열면
|
Chrome 등으로 받은 뒤 앱을 바로 열면
|
||||||
「손상되었기 때문에 열 수 없습니다」가 뜰 수 있습니다.
|
「손상되었기 때문에 열 수 없습니다」가 뜰 수 있습니다.
|
||||||
(포터블 zip의 「실행하기.command」는 이 문제를 자동으로 피합니다.)
|
(포터블 zip의 「실행하기.command」는 이 문제를 자동으로 피합니다.)
|
||||||
|
|
||||||
────────────────────────────────
|
────────────────────────────────
|
||||||
A. 설치 파일 (.dmg) — 반드시 아래 순서
|
A. 설치 파일 (.dmg) — 반드시 아래 순서
|
||||||
────────────────────────────────
|
────────────────────────────────
|
||||||
1. dmg를 연다
|
1. dmg를 연다
|
||||||
2. 「응용 프로그램에 설치하고 실행.command」를 더블클릭
|
2. 「응용 프로그램에 설치하고 실행.command」를 더블클릭
|
||||||
→ Applications에 설치 + 검역 속성 제거 + 실행까지 한 번에 처리
|
→ Applications에 설치 + 검역 속성 제거 + 실행까지 한 번에 처리
|
||||||
3. (대안) 앱을 Applications로 드래그한 뒤, 아래 C. 터미널 명령을 실행
|
3. (대안) 앱을 Applications로 드래그한 뒤, 아래 C. 터미널 명령을 실행
|
||||||
|
|
||||||
※ Applications의 앱을 더블클릭만 하면 macOS가 다시 차단할 수 있습니다.
|
※ Applications의 앱을 더블클릭만 하면 macOS가 다시 차단할 수 있습니다.
|
||||||
처음 한 번은 반드시 「설치하고 실행.command」또는 터미널(xattr)을 사용하세요.
|
처음 한 번은 반드시 「설치하고 실행.command」또는 터미널(xattr)을 사용하세요.
|
||||||
|
|
||||||
────────────────────────────────
|
────────────────────────────────
|
||||||
B. 포터블 (.zip)
|
B. 포터블 (.zip)
|
||||||
────────────────────────────────
|
────────────────────────────────
|
||||||
1. zip 압축 해제
|
1. zip 압축 해제
|
||||||
2. 「실행하기.command」를 더블클릭
|
2. 「실행하기.command」를 더블클릭
|
||||||
3. 차단되면 아래 「터미널 설치」를 사용
|
3. 차단되면 아래 「터미널 설치」를 사용
|
||||||
|
|
||||||
────────────────────────────────
|
────────────────────────────────
|
||||||
C. 터미널 설치 (손상됨 / 차단될 때)
|
C. 터미널 설치 (손상됨 / 차단될 때)
|
||||||
────────────────────────────────
|
────────────────────────────────
|
||||||
1. Spotlight(⌘+스페이스) → 「터미널」실행
|
1. Spotlight(⌘+스페이스) → 「터미널」실행
|
||||||
2. 챗봇 설정 화면의 「Mac 설치 명령 복사」붙여넣기(⌘+V) 후 Enter
|
2. 챗봇 설정 화면의 「Mac 설치 명령 복사」붙여넣기(⌘+V) 후 Enter
|
||||||
|
|
||||||
직접 입력 (Applications에 넣은 경우):
|
직접 입력 (Applications에 넣은 경우):
|
||||||
xattr -cr "/Applications/EX AI Chatbot.app" && open "/Applications/EX AI Chatbot.app"
|
xattr -cr "/Applications/EX AI Chatbot.app" && open "/Applications/EX AI Chatbot.app"
|
||||||
|
|
||||||
Apple Silicon → mac-silicon / Intel → mac-intel 파일을 받으세요.
|
Apple Silicon → mac-silicon / Intel → mac-intel 파일을 받으세요.
|
||||||
|
|||||||
Regular → Executable
+6
-6
@@ -1,6 +1,6 @@
|
|||||||
const { contextBridge } = require("electron");
|
const { contextBridge } = require("electron");
|
||||||
|
|
||||||
contextBridge.exposeInMainWorld("exDesktop", {
|
contextBridge.exposeInMainWorld("exDesktop", {
|
||||||
isDesktop: true,
|
isDesktop: true,
|
||||||
platform: process.platform,
|
platform: process.platform,
|
||||||
});
|
});
|
||||||
|
|||||||
Regular → Executable
+230
-230
@@ -1,230 +1,230 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
공식 길통이+차로(ai-mascot.png)로 Electron 앱 아이콘 생성
|
공식 길통이+차로(ai-mascot.png)로 Electron 앱 아이콘 생성
|
||||||
- build/icon.png (1024)
|
- build/icon.png (1024)
|
||||||
- build/icon.icns (macOS)
|
- build/icon.icns (macOS)
|
||||||
- build/icon.ico (Windows)
|
- build/icon.ico (Windows)
|
||||||
"""
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import plistlib
|
import plistlib
|
||||||
import shutil
|
import shutil
|
||||||
import struct
|
import struct
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import zlib
|
import zlib
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
ROOT = Path(__file__).resolve().parents[1]
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
BUILD = ROOT / "build"
|
BUILD = ROOT / "build"
|
||||||
SRC_CANDIDATES = [
|
SRC_CANDIDATES = [
|
||||||
ROOT.parent / "chatbotApp-chatbot2.0-agent" / "web" / "public" / "images" / "ai-mascot.png",
|
ROOT.parent / "chatbotApp-chatbot2.0-agent" / "web" / "public" / "images" / "ai-mascot.png",
|
||||||
ROOT.parent / "chatbotApp-chatbot2.0-agent" / "public-ai" / "images" / "ai-mascot.png",
|
ROOT.parent / "chatbotApp-chatbot2.0-agent" / "public-ai" / "images" / "ai-mascot.png",
|
||||||
]
|
]
|
||||||
|
|
||||||
# EX 브랜드 블루
|
# EX 브랜드 블루
|
||||||
BG = (36, 107, 235, 255)
|
BG = (36, 107, 235, 255)
|
||||||
WHITE = (255, 255, 255, 255)
|
WHITE = (255, 255, 255, 255)
|
||||||
|
|
||||||
|
|
||||||
def _venv_python(venv: Path) -> Path:
|
def _venv_python(venv: Path) -> Path:
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
return venv / "Scripts" / "python.exe"
|
return venv / "Scripts" / "python.exe"
|
||||||
py = venv / "bin" / "python3"
|
py = venv / "bin" / "python3"
|
||||||
return py if py.exists() else venv / "bin" / "python"
|
return py if py.exists() else venv / "bin" / "python"
|
||||||
|
|
||||||
|
|
||||||
def _in_venv(venv: Path) -> bool:
|
def _in_venv(venv: Path) -> bool:
|
||||||
"""Homebrew venv의 bin/python은 시스템 바이너리 symlink라 executable.resolve() 비교는 불가."""
|
"""Homebrew venv의 bin/python은 시스템 바이너리 symlink라 executable.resolve() 비교는 불가."""
|
||||||
try:
|
try:
|
||||||
return Path(sys.prefix).resolve() == venv.resolve()
|
return Path(sys.prefix).resolve() == venv.resolve()
|
||||||
except OSError:
|
except OSError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _ensure_pip(py: Path) -> None:
|
def _ensure_pip(py: Path) -> None:
|
||||||
try:
|
try:
|
||||||
subprocess.check_call([str(py), "-m", "pip", "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
subprocess.check_call([str(py), "-m", "pip", "--version"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
print("[build-icons] ensurepip으로 pip 부트스트랩…", flush=True)
|
print("[build-icons] ensurepip으로 pip 부트스트랩…", flush=True)
|
||||||
subprocess.check_call([str(py), "-m", "ensurepip", "--upgrade"])
|
subprocess.check_call([str(py), "-m", "ensurepip", "--upgrade"])
|
||||||
|
|
||||||
|
|
||||||
def _pip_install_pillow(py: Path) -> None:
|
def _pip_install_pillow(py: Path) -> None:
|
||||||
_ensure_pip(py)
|
_ensure_pip(py)
|
||||||
cmd = [str(py), "-m", "pip", "install", "Pillow", "-q"]
|
cmd = [str(py), "-m", "pip", "install", "Pillow", "-q"]
|
||||||
try:
|
try:
|
||||||
subprocess.check_call(cmd)
|
subprocess.check_call(cmd)
|
||||||
except subprocess.CalledProcessError:
|
except subprocess.CalledProcessError:
|
||||||
print("[build-icons] pip 재시도 (ensurepip 후)…", flush=True)
|
print("[build-icons] pip 재시도 (ensurepip 후)…", flush=True)
|
||||||
subprocess.check_call([str(py), "-m", "ensurepip", "--upgrade"])
|
subprocess.check_call([str(py), "-m", "ensurepip", "--upgrade"])
|
||||||
subprocess.check_call(cmd)
|
subprocess.check_call(cmd)
|
||||||
|
|
||||||
|
|
||||||
def require_pillow():
|
def require_pillow():
|
||||||
try:
|
try:
|
||||||
from PIL import Image, ImageDraw # noqa: F401
|
from PIL import Image, ImageDraw # noqa: F401
|
||||||
return
|
return
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
venv = ROOT / ".venv-icons"
|
venv = ROOT / ".venv-icons"
|
||||||
py = _venv_python(venv)
|
py = _venv_python(venv)
|
||||||
if not py.exists():
|
if not py.exists():
|
||||||
print("[build-icons] venv 생성 중…", flush=True)
|
print("[build-icons] venv 생성 중…", flush=True)
|
||||||
subprocess.check_call([sys.executable, "-m", "venv", str(venv)])
|
subprocess.check_call([sys.executable, "-m", "venv", str(venv)])
|
||||||
py = _venv_python(venv)
|
py = _venv_python(venv)
|
||||||
print("[build-icons] Pillow 설치 중…", flush=True)
|
print("[build-icons] Pillow 설치 중…", flush=True)
|
||||||
_pip_install_pillow(py)
|
_pip_install_pillow(py)
|
||||||
# 현재 프로세스에 Pillow가 없으면 venv로 재실행 (sys.prefix로 판별)
|
# 현재 프로세스에 Pillow가 없으면 venv로 재실행 (sys.prefix로 판별)
|
||||||
if not _in_venv(venv):
|
if not _in_venv(venv):
|
||||||
raise SystemExit(subprocess.call([str(py), str(Path(__file__).resolve()), *sys.argv[1:]]))
|
raise SystemExit(subprocess.call([str(py), str(Path(__file__).resolve()), *sys.argv[1:]]))
|
||||||
from PIL import Image, ImageDraw # noqa: F401
|
from PIL import Image, ImageDraw # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
def rounded_rect_mask(size: int, radius: int):
|
def rounded_rect_mask(size: int, radius: int):
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
mask = Image.new("L", (size, size), 0)
|
mask = Image.new("L", (size, size), 0)
|
||||||
draw = ImageDraw.Draw(mask)
|
draw = ImageDraw.Draw(mask)
|
||||||
draw.rounded_rectangle((0, 0, size - 1, size - 1), radius=radius, fill=255)
|
draw.rounded_rectangle((0, 0, size - 1, size - 1), radius=radius, fill=255)
|
||||||
return mask
|
return mask
|
||||||
|
|
||||||
|
|
||||||
def make_icon_png(src: Path, out: Path, size: int = 1024) -> None:
|
def make_icon_png(src: Path, out: Path, size: int = 1024) -> None:
|
||||||
from PIL import Image, ImageDraw, ImageFilter
|
from PIL import Image, ImageDraw, ImageFilter
|
||||||
|
|
||||||
mascot = Image.open(src).convert("RGBA")
|
mascot = Image.open(src).convert("RGBA")
|
||||||
# 흰 배경 제거에 가깝게: 거의 흰 픽셀을 투명 처리
|
# 흰 배경 제거에 가깝게: 거의 흰 픽셀을 투명 처리
|
||||||
pixels = mascot.load()
|
pixels = mascot.load()
|
||||||
w, h = mascot.size
|
w, h = mascot.size
|
||||||
for y in range(h):
|
for y in range(h):
|
||||||
for x in range(w):
|
for x in range(w):
|
||||||
r, g, b, a = pixels[x, y]
|
r, g, b, a = pixels[x, y]
|
||||||
if r > 245 and g > 245 and b > 245:
|
if r > 245 and g > 245 and b > 245:
|
||||||
pixels[x, y] = (r, g, b, 0)
|
pixels[x, y] = (r, g, b, 0)
|
||||||
|
|
||||||
canvas = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
canvas = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
||||||
draw = ImageDraw.Draw(canvas)
|
draw = ImageDraw.Draw(canvas)
|
||||||
# macOS 아이콘용 라운드 사각 (약 22% radius)
|
# macOS 아이콘용 라운드 사각 (약 22% radius)
|
||||||
radius = int(size * 0.223)
|
radius = int(size * 0.223)
|
||||||
draw.rounded_rectangle((0, 0, size - 1, size - 1), radius=radius, fill=BG)
|
draw.rounded_rectangle((0, 0, size - 1, size - 1), radius=radius, fill=BG)
|
||||||
|
|
||||||
# 안쪽 밝은 원형 배지
|
# 안쪽 밝은 원형 배지
|
||||||
badge = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
badge = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
||||||
bd = ImageDraw.Draw(badge)
|
bd = ImageDraw.Draw(badge)
|
||||||
pad = int(size * 0.08)
|
pad = int(size * 0.08)
|
||||||
bd.ellipse((pad, pad, size - pad, size - pad), fill=(255, 255, 255, 235))
|
bd.ellipse((pad, pad, size - pad, size - pad), fill=(255, 255, 255, 235))
|
||||||
canvas = Image.alpha_composite(canvas, badge)
|
canvas = Image.alpha_composite(canvas, badge)
|
||||||
|
|
||||||
# 마스코트 배치 (여백 확보)
|
# 마스코트 배치 (여백 확보)
|
||||||
max_side = int(size * 0.78)
|
max_side = int(size * 0.78)
|
||||||
mw, mh = mascot.size
|
mw, mh = mascot.size
|
||||||
scale = min(max_side / mw, max_side / mh)
|
scale = min(max_side / mw, max_side / mh)
|
||||||
nw, nh = int(mw * scale), int(mh * scale)
|
nw, nh = int(mw * scale), int(mh * scale)
|
||||||
mascot = mascot.resize((nw, nh), Image.Resampling.LANCZOS)
|
mascot = mascot.resize((nw, nh), Image.Resampling.LANCZOS)
|
||||||
ox = (size - nw) // 2
|
ox = (size - nw) // 2
|
||||||
oy = (size - nh) // 2 + int(size * 0.02)
|
oy = (size - nh) // 2 + int(size * 0.02)
|
||||||
canvas.alpha_composite(mascot, (ox, oy))
|
canvas.alpha_composite(mascot, (ox, oy))
|
||||||
|
|
||||||
# 마스크로 모서리 정리
|
# 마스크로 모서리 정리
|
||||||
mask = rounded_rect_mask(size, radius)
|
mask = rounded_rect_mask(size, radius)
|
||||||
out_img = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
out_img = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
||||||
out_img.paste(canvas, (0, 0), mask=mask)
|
out_img.paste(canvas, (0, 0), mask=mask)
|
||||||
|
|
||||||
out.parent.mkdir(parents=True, exist_ok=True)
|
out.parent.mkdir(parents=True, exist_ok=True)
|
||||||
out_img.save(out, "PNG")
|
out_img.save(out, "PNG")
|
||||||
print(f"[build-icons] ✅ {out} ({size}x{size})")
|
print(f"[build-icons] ✅ {out} ({size}x{size})")
|
||||||
|
|
||||||
|
|
||||||
def build_icns(png_1024: Path, icns_path: Path) -> None:
|
def build_icns(png_1024: Path, icns_path: Path) -> None:
|
||||||
sizes = [
|
sizes = [
|
||||||
(16, "icon_16x16.png"),
|
(16, "icon_16x16.png"),
|
||||||
(32, "diana.k@example.org"),
|
(32, "diana.k@example.org"),
|
||||||
(32, "icon_32x32.png"),
|
(32, "icon_32x32.png"),
|
||||||
(64, "ivan.p@example.net"),
|
(64, "ivan.p@example.net"),
|
||||||
(128, "icon_128x128.png"),
|
(128, "icon_128x128.png"),
|
||||||
(256, "wendy.h@example.net"),
|
(256, "wendy.h@example.net"),
|
||||||
(256, "icon_256x256.png"),
|
(256, "icon_256x256.png"),
|
||||||
(512, "wendy.h@example.net"),
|
(512, "wendy.h@example.net"),
|
||||||
(512, "icon_512x512.png"),
|
(512, "icon_512x512.png"),
|
||||||
(1024, "walt.e@example.net"),
|
(1024, "walt.e@example.net"),
|
||||||
]
|
]
|
||||||
iconset = BUILD / "icon.iconset"
|
iconset = BUILD / "icon.iconset"
|
||||||
if iconset.exists():
|
if iconset.exists():
|
||||||
shutil.rmtree(iconset)
|
shutil.rmtree(iconset)
|
||||||
iconset.mkdir(parents=True)
|
iconset.mkdir(parents=True)
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
base = Image.open(png_1024).convert("RGBA")
|
base = Image.open(png_1024).convert("RGBA")
|
||||||
for px, name in sizes:
|
for px, name in sizes:
|
||||||
img = base.resize((px, px), Image.Resampling.LANCZOS)
|
img = base.resize((px, px), Image.Resampling.LANCZOS)
|
||||||
img.save(iconset / name, "PNG")
|
img.save(iconset / name, "PNG")
|
||||||
|
|
||||||
if icns_path.exists():
|
if icns_path.exists():
|
||||||
icns_path.unlink()
|
icns_path.unlink()
|
||||||
subprocess.check_call(["iconutil", "-c", "icns", str(iconset), "-o", str(icns_path)])
|
subprocess.check_call(["iconutil", "-c", "icns", str(iconset), "-o", str(icns_path)])
|
||||||
shutil.rmtree(iconset)
|
shutil.rmtree(iconset)
|
||||||
print(f"[build-icons] ✅ {icns_path}")
|
print(f"[build-icons] ✅ {icns_path}")
|
||||||
|
|
||||||
|
|
||||||
def _png_chunk(tag: bytes, data: bytes) -> bytes:
|
def _png_chunk(tag: bytes, data: bytes) -> bytes:
|
||||||
return struct.pack(">I", len(data)) + tag + data + struct.pack(">I", zlib.crc32(tag + data) & 0xFFFFFFFF)
|
return struct.pack(">I", len(data)) + tag + data + struct.pack(">I", zlib.crc32(tag + data) & 0xFFFFFFFF)
|
||||||
|
|
||||||
|
|
||||||
def rgba_to_png_bytes(img) -> bytes:
|
def rgba_to_png_bytes(img) -> bytes:
|
||||||
"""Pillow 이미지 → PNG bytes (ICO용)."""
|
"""Pillow 이미지 → PNG bytes (ICO용)."""
|
||||||
import io
|
import io
|
||||||
|
|
||||||
buf = io.BytesIO()
|
buf = io.BytesIO()
|
||||||
img.save(buf, format="PNG")
|
img.save(buf, format="PNG")
|
||||||
return buf.getvalue()
|
return buf.getvalue()
|
||||||
|
|
||||||
|
|
||||||
def build_ico(png_1024: Path, ico_path: Path) -> None:
|
def build_ico(png_1024: Path, ico_path: Path) -> None:
|
||||||
"""여러 해상도 PNG를 담은 .ico 생성 (electron-builder는 256 필수)."""
|
"""여러 해상도 PNG를 담은 .ico 생성 (electron-builder는 256 필수)."""
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
sizes = [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]
|
sizes = [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]
|
||||||
base = Image.open(png_1024).convert("RGBA")
|
base = Image.open(png_1024).convert("RGBA")
|
||||||
# Pillow: 원본에서 sizes= 로 리사이즈한 멀티 엔트리 ICO 생성
|
# Pillow: 원본에서 sizes= 로 리사이즈한 멀티 엔트리 ICO 생성
|
||||||
# (append_images + 작은 첫 프레임은 16x16만 남는 버그 회피)
|
# (append_images + 작은 첫 프레임은 16x16만 남는 버그 회피)
|
||||||
base.save(ico_path, format="ICO", sizes=sizes)
|
base.save(ico_path, format="ICO", sizes=sizes)
|
||||||
print(f"[build-icons] ✅ {ico_path}")
|
print(f"[build-icons] ✅ {ico_path}")
|
||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
require_pillow()
|
require_pillow()
|
||||||
src = next((p for p in SRC_CANDIDATES if p.exists()), None)
|
src = next((p for p in SRC_CANDIDATES if p.exists()), None)
|
||||||
if not src:
|
if not src:
|
||||||
print("[build-icons] ai-mascot.png 없음", file=sys.stderr)
|
print("[build-icons] ai-mascot.png 없음", file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
BUILD.mkdir(parents=True, exist_ok=True)
|
BUILD.mkdir(parents=True, exist_ok=True)
|
||||||
png = BUILD / "icon.png"
|
png = BUILD / "icon.png"
|
||||||
make_icon_png(src, png, 1024)
|
make_icon_png(src, png, 1024)
|
||||||
# electron-builder 호환 별칭
|
# electron-builder 호환 별칭
|
||||||
shutil.copy2(png, BUILD / "icon-1024.png")
|
shutil.copy2(png, BUILD / "icon-1024.png")
|
||||||
|
|
||||||
if sys.platform == "darwin":
|
if sys.platform == "darwin":
|
||||||
try:
|
try:
|
||||||
build_icns(png, BUILD / "icon.icns")
|
build_icns(png, BUILD / "icon.icns")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[build-icons] icns 실패 (png만 사용): {e}", file=sys.stderr)
|
print(f"[build-icons] icns 실패 (png만 사용): {e}", file=sys.stderr)
|
||||||
else:
|
else:
|
||||||
print("[build-icons] icns는 macOS에서만 생성합니다")
|
print("[build-icons] icns는 macOS에서만 생성합니다")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
build_ico(png, BUILD / "icon.ico")
|
build_ico(png, BUILD / "icon.ico")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[build-icons] ico 실패: {e}", file=sys.stderr)
|
print(f"[build-icons] ico 실패: {e}", file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
print("[build-icons] 완료")
|
print("[build-icons] 완료")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
raise SystemExit(main())
|
raise SystemExit(main())
|
||||||
|
|||||||
Regular → Executable
+23
-23
@@ -1,23 +1,23 @@
|
|||||||
/** 다운로드 산출물 파일명 (공백 포함 — URL 인코딩 필요) */
|
/** 다운로드 산출물 파일명 (공백 포함 — URL 인코딩 필요) */
|
||||||
export const DOWNLOAD_ARTIFACTS = {
|
export const DOWNLOAD_ARTIFACTS = {
|
||||||
macIntelInstaller: "exAIChatbot 2.0-mac-intel.dmg",
|
macIntelInstaller: "exAIChatbot 2.0-mac-intel.dmg",
|
||||||
macIntelPortable: "exAIChatbot 2.0-mac-intel.zip",
|
macIntelPortable: "exAIChatbot 2.0-mac-intel.zip",
|
||||||
macSiliconInstaller: "exAIChatbot 2.0-mac-silicon.dmg",
|
macSiliconInstaller: "exAIChatbot 2.0-mac-silicon.dmg",
|
||||||
macSiliconPortable: "exAIChatbot 2.0-mac-silicon.zip",
|
macSiliconPortable: "exAIChatbot 2.0-mac-silicon.zip",
|
||||||
win32Installer: "exAIChatbot 2.0-win32-Setup.exe",
|
win32Installer: "exAIChatbot 2.0-win32-Setup.exe",
|
||||||
win32Portable: "exAIChatbot 2.0-win32-portable.exe",
|
win32Portable: "exAIChatbot 2.0-win32-portable.exe",
|
||||||
win64Installer: "exAIChatbot 2.0-win64-Setup.exe",
|
win64Installer: "exAIChatbot 2.0-win64-Setup.exe",
|
||||||
win64Portable: "exAIChatbot 2.0-win64-portable.exe",
|
win64Portable: "exAIChatbot 2.0-win64-portable.exe",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const DOWNLOAD_ARTIFACT_LIST = Object.values(DOWNLOAD_ARTIFACTS);
|
export const DOWNLOAD_ARTIFACT_LIST = Object.values(DOWNLOAD_ARTIFACTS);
|
||||||
|
|
||||||
/** 이전 배포 파일명 (정리용) */
|
/** 이전 배포 파일명 (정리용) */
|
||||||
export const OBSOLETE_DOWNLOAD_ARTIFACTS = [
|
export const OBSOLETE_DOWNLOAD_ARTIFACTS = [
|
||||||
"exAIChatbot 2.0-win32.zip",
|
"exAIChatbot 2.0-win32.zip",
|
||||||
"exAIChatbot 2.0-win64.zip",
|
"exAIChatbot 2.0-win64.zip",
|
||||||
"EX-AI-Chatbot-mac-universal.zip",
|
"EX-AI-Chatbot-mac-universal.zip",
|
||||||
"EX-AI-Chatbot-Setup.exe",
|
"EX-AI-Chatbot-Setup.exe",
|
||||||
"EX-AI-Chatbot-Setup.exe.blockmap",
|
"EX-AI-Chatbot-Setup.exe.blockmap",
|
||||||
"EX-AI-Chatbot-mac-universal.zip.blockmap",
|
"EX-AI-Chatbot-mac-universal.zip.blockmap",
|
||||||
];
|
];
|
||||||
|
|||||||
Regular → Executable
+226
-226
@@ -1,226 +1,226 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
/**
|
/**
|
||||||
* Mac 산출물 정리
|
* Mac 산출물 정리
|
||||||
* - zip(포터블): .app + 실행하기.command
|
* - zip(포터블): .app + 실행하기.command
|
||||||
* - dmg(설치형): 동일 서명 .app + 「응용 프로그램에 설치하고 실행.command」
|
* - dmg(설치형): 동일 서명 .app + 「응용 프로그램에 설치하고 실행.command」
|
||||||
* (Gatekeeper 「손상됨」팝업 방지 — 설치 시 xattr -cr 수행)
|
* (Gatekeeper 「손상됨」팝업 방지 — 설치 시 xattr -cr 수행)
|
||||||
*/
|
*/
|
||||||
import { execFileSync } from "node:child_process";
|
import { execFileSync } from "node:child_process";
|
||||||
import fs from "node:fs";
|
import fs from "node:fs";
|
||||||
import os from "node:os";
|
import os from "node:os";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
import { DOWNLOAD_ARTIFACTS } from "./download-artifacts.mjs";
|
import { DOWNLOAD_ARTIFACTS } from "./download-artifacts.mjs";
|
||||||
|
|
||||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
||||||
const distDir = path.join(root, "dist");
|
const distDir = path.join(root, "dist");
|
||||||
const appName = "EX AI Chatbot.app";
|
const appName = "EX AI Chatbot.app";
|
||||||
const packagingMac = path.join(root, "packaging", "mac");
|
const packagingMac = path.join(root, "packaging", "mac");
|
||||||
const installCmdName = "응용 프로그램에 설치하고 실행.command";
|
const installCmdName = "응용 프로그램에 설치하고 실행.command";
|
||||||
const runCmdName = "실행하기.command";
|
const runCmdName = "실행하기.command";
|
||||||
const guideName = "설치안내.txt";
|
const guideName = "설치안내.txt";
|
||||||
|
|
||||||
const TARGETS = [
|
const TARGETS = [
|
||||||
{
|
{
|
||||||
appDirs: [path.join(distDir, "mac-x64", appName), path.join(distDir, "mac", appName)],
|
appDirs: [path.join(distDir, "mac-x64", appName), path.join(distDir, "mac", appName)],
|
||||||
zipName: DOWNLOAD_ARTIFACTS.macIntelPortable,
|
zipName: DOWNLOAD_ARTIFACTS.macIntelPortable,
|
||||||
dmgName: DOWNLOAD_ARTIFACTS.macIntelInstaller,
|
dmgName: DOWNLOAD_ARTIFACTS.macIntelInstaller,
|
||||||
label: "intel (x64)",
|
label: "intel (x64)",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
appDirs: [path.join(distDir, "mac-arm64", appName)],
|
appDirs: [path.join(distDir, "mac-arm64", appName)],
|
||||||
zipName: DOWNLOAD_ARTIFACTS.macSiliconPortable,
|
zipName: DOWNLOAD_ARTIFACTS.macSiliconPortable,
|
||||||
dmgName: DOWNLOAD_ARTIFACTS.macSiliconInstaller,
|
dmgName: DOWNLOAD_ARTIFACTS.macSiliconInstaller,
|
||||||
label: "silicon (arm64)",
|
label: "silicon (arm64)",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
function codesignApp(appPath, label) {
|
function codesignApp(appPath, label) {
|
||||||
try {
|
try {
|
||||||
execFileSync(
|
execFileSync(
|
||||||
"codesign",
|
"codesign",
|
||||||
[
|
[
|
||||||
"--force",
|
"--force",
|
||||||
"--deep",
|
"--deep",
|
||||||
"--sign",
|
"--sign",
|
||||||
"-",
|
"-",
|
||||||
"--entitlements",
|
"--entitlements",
|
||||||
path.join(packagingMac, "entitlements.plist"),
|
path.join(packagingMac, "entitlements.plist"),
|
||||||
appPath,
|
appPath,
|
||||||
],
|
],
|
||||||
{ stdio: "inherit" },
|
{ stdio: "inherit" },
|
||||||
);
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn(`[finalize-mac] entitlements codesign 실패 (${label}), ad-hoc 재시도:`, e.message);
|
console.warn(`[finalize-mac] entitlements codesign 실패 (${label}), ad-hoc 재시도:`, e.message);
|
||||||
try {
|
try {
|
||||||
execFileSync("codesign", ["--force", "--deep", "--sign", "-", appPath], {
|
execFileSync("codesign", ["--force", "--deep", "--sign", "-", appPath], {
|
||||||
stdio: "inherit",
|
stdio: "inherit",
|
||||||
});
|
});
|
||||||
} catch (e2) {
|
} catch (e2) {
|
||||||
console.warn(`[finalize-mac] codesign 실패 (${label}):`, e2.message);
|
console.warn(`[finalize-mac] codesign 실패 (${label}):`, e2.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
execFileSync("xattr", ["-cr", appPath], { stdio: "ignore" });
|
execFileSync("xattr", ["-cr", appPath], { stdio: "ignore" });
|
||||||
} catch {
|
} catch {
|
||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function ensurePackagingFiles() {
|
function ensurePackagingFiles() {
|
||||||
for (const name of [runCmdName, installCmdName, guideName]) {
|
for (const name of [runCmdName, installCmdName, guideName]) {
|
||||||
const p = path.join(packagingMac, name);
|
const p = path.join(packagingMac, name);
|
||||||
if (!fs.existsSync(p)) throw new Error(`packaging/mac 파일 없음: ${name}`);
|
if (!fs.existsSync(p)) throw new Error(`packaging/mac 파일 없음: ${name}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function packZip(appPath, zipName, label) {
|
function packZip(appPath, zipName, label) {
|
||||||
console.log(`[finalize-mac] zip ${label}: ${appPath}`);
|
console.log(`[finalize-mac] zip ${label}: ${appPath}`);
|
||||||
const stage = fs.mkdtempSync(path.join(os.tmpdir(), "ex-ai-mac-zip-"));
|
const stage = fs.mkdtempSync(path.join(os.tmpdir(), "ex-ai-mac-zip-"));
|
||||||
try {
|
try {
|
||||||
fs.cpSync(appPath, path.join(stage, appName), { recursive: true });
|
fs.cpSync(appPath, path.join(stage, appName), { recursive: true });
|
||||||
fs.copyFileSync(path.join(packagingMac, runCmdName), path.join(stage, runCmdName));
|
fs.copyFileSync(path.join(packagingMac, runCmdName), path.join(stage, runCmdName));
|
||||||
fs.copyFileSync(path.join(packagingMac, guideName), path.join(stage, guideName));
|
fs.copyFileSync(path.join(packagingMac, guideName), path.join(stage, guideName));
|
||||||
fs.chmodSync(path.join(stage, runCmdName), 0o755);
|
fs.chmodSync(path.join(stage, runCmdName), 0o755);
|
||||||
try {
|
try {
|
||||||
execFileSync("xattr", ["-cr", stage], { stdio: "ignore" });
|
execFileSync("xattr", ["-cr", stage], { stdio: "ignore" });
|
||||||
} catch {
|
} catch {
|
||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
|
|
||||||
const zipPath = path.join(distDir, zipName);
|
const zipPath = path.join(distDir, zipName);
|
||||||
if (fs.existsSync(zipPath)) fs.unlinkSync(zipPath);
|
if (fs.existsSync(zipPath)) fs.unlinkSync(zipPath);
|
||||||
execFileSync("zip", ["-r", "-y", zipPath, appName, runCmdName, guideName], {
|
execFileSync("zip", ["-r", "-y", zipPath, appName, runCmdName, guideName], {
|
||||||
cwd: stage,
|
cwd: stage,
|
||||||
stdio: "inherit",
|
stdio: "inherit",
|
||||||
});
|
});
|
||||||
const size = fs.statSync(zipPath).size;
|
const size = fs.statSync(zipPath).size;
|
||||||
console.log(`[finalize-mac] ✅ zip ${zipName} (${Math.round(size / 1024 / 1024)} MB)`);
|
console.log(`[finalize-mac] ✅ zip ${zipName} (${Math.round(size / 1024 / 1024)} MB)`);
|
||||||
return true;
|
return true;
|
||||||
} finally {
|
} finally {
|
||||||
fs.rmSync(stage, { recursive: true, force: true });
|
fs.rmSync(stage, { recursive: true, force: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function detachStaleVolumes() {
|
function detachStaleVolumes() {
|
||||||
for (const vol of ["EX AI Chatbot", "EX AI Chatbot Intel", "EX AI Chatbot Silicon"]) {
|
for (const vol of ["EX AI Chatbot", "EX AI Chatbot Intel", "EX AI Chatbot Silicon"]) {
|
||||||
try {
|
try {
|
||||||
execFileSync("hdiutil", ["detach", `/Volumes/${vol}`, "-force"], { stdio: "ignore" });
|
execFileSync("hdiutil", ["detach", `/Volumes/${vol}`, "-force"], { stdio: "ignore" });
|
||||||
} catch {
|
} catch {
|
||||||
/* not mounted */
|
/* not mounted */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function packDmg(appPath, dmgName, label) {
|
function packDmg(appPath, dmgName, label) {
|
||||||
console.log(`[finalize-mac] dmg ${label}: ${appPath}`);
|
console.log(`[finalize-mac] dmg ${label}: ${appPath}`);
|
||||||
const stage = fs.mkdtempSync(path.join(os.tmpdir(), "ex-ai-mac-dmg-"));
|
const stage = fs.mkdtempSync(path.join(os.tmpdir(), "ex-ai-mac-dmg-"));
|
||||||
const rwDmg = path.join(os.tmpdir(), `ex-ai-mac-${Date.now()}-${process.pid}.dmg`);
|
const rwDmg = path.join(os.tmpdir(), `ex-ai-mac-${Date.now()}-${process.pid}.dmg`);
|
||||||
// arch별 볼륨명 — 동시/잔여 마운트 충돌 방지
|
// arch별 볼륨명 — 동시/잔여 마운트 충돌 방지
|
||||||
const volName = label.includes("silicon") ? "EX AI Chatbot Silicon" : "EX AI Chatbot Intel";
|
const volName = label.includes("silicon") ? "EX AI Chatbot Silicon" : "EX AI Chatbot Intel";
|
||||||
try {
|
try {
|
||||||
fs.cpSync(appPath, path.join(stage, appName), { recursive: true });
|
fs.cpSync(appPath, path.join(stage, appName), { recursive: true });
|
||||||
fs.copyFileSync(path.join(packagingMac, installCmdName), path.join(stage, installCmdName));
|
fs.copyFileSync(path.join(packagingMac, installCmdName), path.join(stage, installCmdName));
|
||||||
fs.copyFileSync(path.join(packagingMac, guideName), path.join(stage, guideName));
|
fs.copyFileSync(path.join(packagingMac, guideName), path.join(stage, guideName));
|
||||||
fs.chmodSync(path.join(stage, installCmdName), 0o755);
|
fs.chmodSync(path.join(stage, installCmdName), 0o755);
|
||||||
// Applications 폴더 바로가기 (일반 dmg UX)
|
// Applications 폴더 바로가기 (일반 dmg UX)
|
||||||
try {
|
try {
|
||||||
fs.symlinkSync("/Applications", path.join(stage, "Applications"));
|
fs.symlinkSync("/Applications", path.join(stage, "Applications"));
|
||||||
} catch {
|
} catch {
|
||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
execFileSync("xattr", ["-cr", stage], { stdio: "ignore" });
|
execFileSync("xattr", ["-cr", stage], { stdio: "ignore" });
|
||||||
} catch {
|
} catch {
|
||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
|
|
||||||
const outPath = path.join(distDir, dmgName);
|
const outPath = path.join(distDir, dmgName);
|
||||||
if (fs.existsSync(outPath)) fs.unlinkSync(outPath);
|
if (fs.existsSync(outPath)) fs.unlinkSync(outPath);
|
||||||
if (fs.existsSync(rwDmg)) fs.unlinkSync(rwDmg);
|
if (fs.existsSync(rwDmg)) fs.unlinkSync(rwDmg);
|
||||||
|
|
||||||
detachStaleVolumes();
|
detachStaleVolumes();
|
||||||
|
|
||||||
// 읽기 전용 압축 dmg 생성 (electron-builder DMG 미사용 — hdiutil 경합 회피)
|
// 읽기 전용 압축 dmg 생성 (electron-builder DMG 미사용 — hdiutil 경합 회피)
|
||||||
// Finder/Spotlight가 잠깐 잡고 있으면 "리소스 사용 중"이 나므로 재시도한다.
|
// Finder/Spotlight가 잠깐 잡고 있으면 "리소스 사용 중"이 나므로 재시도한다.
|
||||||
const createArgs = [
|
const createArgs = [
|
||||||
"create",
|
"create",
|
||||||
"-volname",
|
"-volname",
|
||||||
volName,
|
volName,
|
||||||
"-srcfolder",
|
"-srcfolder",
|
||||||
stage,
|
stage,
|
||||||
"-ov",
|
"-ov",
|
||||||
"-format",
|
"-format",
|
||||||
"UDZO",
|
"UDZO",
|
||||||
outPath,
|
outPath,
|
||||||
];
|
];
|
||||||
let lastErr = null;
|
let lastErr = null;
|
||||||
for (let attempt = 1; attempt <= 4; attempt += 1) {
|
for (let attempt = 1; attempt <= 4; attempt += 1) {
|
||||||
try {
|
try {
|
||||||
if (attempt > 1) {
|
if (attempt > 1) {
|
||||||
console.warn(`[finalize-mac] hdiutil create 재시도 ${attempt}/4 (${label})`);
|
console.warn(`[finalize-mac] hdiutil create 재시도 ${attempt}/4 (${label})`);
|
||||||
detachStaleVolumes();
|
detachStaleVolumes();
|
||||||
try {
|
try {
|
||||||
execFileSync("sleep", [String(1.5 * attempt)], { stdio: "ignore" });
|
execFileSync("sleep", [String(1.5 * attempt)], { stdio: "ignore" });
|
||||||
} catch {
|
} catch {
|
||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
execFileSync("hdiutil", createArgs, { stdio: "inherit" });
|
execFileSync("hdiutil", createArgs, { stdio: "inherit" });
|
||||||
lastErr = null;
|
lastErr = null;
|
||||||
break;
|
break;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
lastErr = e;
|
lastErr = e;
|
||||||
const msg = String(e?.stderr || e?.message || e);
|
const msg = String(e?.stderr || e?.message || e);
|
||||||
const busy = /리소스 사용 중|Resource busy|Device busy|hdiutil/i.test(msg) || e?.status === 1;
|
const busy = /리소스 사용 중|Resource busy|Device busy|hdiutil/i.test(msg) || e?.status === 1;
|
||||||
if (!busy || attempt === 4) break;
|
if (!busy || attempt === 4) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lastErr) throw lastErr;
|
if (lastErr) throw lastErr;
|
||||||
|
|
||||||
const size = fs.statSync(outPath).size;
|
const size = fs.statSync(outPath).size;
|
||||||
console.log(`[finalize-mac] ✅ dmg ${dmgName} (${Math.round(size / 1024 / 1024)} MB)`);
|
console.log(`[finalize-mac] ✅ dmg ${dmgName} (${Math.round(size / 1024 / 1024)} MB)`);
|
||||||
return true;
|
return true;
|
||||||
} finally {
|
} finally {
|
||||||
fs.rmSync(stage, { recursive: true, force: true });
|
fs.rmSync(stage, { recursive: true, force: true });
|
||||||
try {
|
try {
|
||||||
if (fs.existsSync(rwDmg)) fs.unlinkSync(rwDmg);
|
if (fs.existsSync(rwDmg)) fs.unlinkSync(rwDmg);
|
||||||
} catch {
|
} catch {
|
||||||
/* ignore */
|
/* ignore */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fs.existsSync(distDir)) {
|
if (!fs.existsSync(distDir)) {
|
||||||
console.error("[finalize-mac] dist 없음");
|
console.error("[finalize-mac] dist 없음");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
ensurePackagingFiles();
|
ensurePackagingFiles();
|
||||||
|
|
||||||
let done = 0;
|
let done = 0;
|
||||||
for (const t of TARGETS) {
|
for (const t of TARGETS) {
|
||||||
const appPath = t.appDirs.find((p) => fs.existsSync(p));
|
const appPath = t.appDirs.find((p) => fs.existsSync(p));
|
||||||
if (!appPath) {
|
if (!appPath) {
|
||||||
console.warn(`[finalize-mac] skip ${t.label}: .app 없음`);
|
console.warn(`[finalize-mac] skip ${t.label}: .app 없음`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
codesignApp(appPath, t.label);
|
codesignApp(appPath, t.label);
|
||||||
|
|
||||||
if (packDmg(appPath, t.dmgName, t.label)) done += 1;
|
if (packDmg(appPath, t.dmgName, t.label)) done += 1;
|
||||||
if (packZip(appPath, t.zipName, t.label)) done += 1;
|
if (packZip(appPath, t.zipName, t.label)) done += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 빌더 raw zip/dmg 잔여 정리
|
// 빌더 raw zip/dmg 잔여 정리
|
||||||
for (const raw of fs.readdirSync(distDir)) {
|
for (const raw of fs.readdirSync(distDir)) {
|
||||||
if (/^raw-mac-/.test(raw) && (raw.endsWith(".zip") || raw.endsWith(".dmg"))) {
|
if (/^raw-mac-/.test(raw) && (raw.endsWith(".zip") || raw.endsWith(".dmg"))) {
|
||||||
fs.unlinkSync(path.join(distDir, raw));
|
fs.unlinkSync(path.join(distDir, raw));
|
||||||
console.log(`[finalize-mac] removed ${raw}`);
|
console.log(`[finalize-mac] removed ${raw}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (done === 0) {
|
if (done === 0) {
|
||||||
console.error("[finalize-mac] 패키징할 Mac 산출물이 없습니다.");
|
console.error("[finalize-mac] 패키징할 Mac 산출물이 없습니다.");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
Regular → Executable
+69
-69
@@ -1,69 +1,69 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
/**
|
/**
|
||||||
* Windows 산출물 정리
|
* Windows 산출물 정리
|
||||||
* - Setup.exe (NSIS 설치형)
|
* - Setup.exe (NSIS 설치형)
|
||||||
* - portable.exe (포터블)
|
* - portable.exe (포터블)
|
||||||
*/
|
*/
|
||||||
import fs from "node:fs";
|
import fs from "node:fs";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
import { DOWNLOAD_ARTIFACTS } from "./download-artifacts.mjs";
|
import { DOWNLOAD_ARTIFACTS } from "./download-artifacts.mjs";
|
||||||
|
|
||||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
||||||
const distDir = path.join(root, "dist");
|
const distDir = path.join(root, "dist");
|
||||||
|
|
||||||
const MAP = [
|
const MAP = [
|
||||||
{
|
{
|
||||||
patterns: [/^raw-win-x64-Setup\.exe$/i],
|
patterns: [/^raw-win-x64-Setup\.exe$/i],
|
||||||
out: DOWNLOAD_ARTIFACTS.win64Installer,
|
out: DOWNLOAD_ARTIFACTS.win64Installer,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
patterns: [/^raw-win-x64-portable\.exe$/i],
|
patterns: [/^raw-win-x64-portable\.exe$/i],
|
||||||
out: DOWNLOAD_ARTIFACTS.win64Portable,
|
out: DOWNLOAD_ARTIFACTS.win64Portable,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
patterns: [/^raw-win-ia32-Setup\.exe$/i, /^raw-win-i386-Setup\.exe$/i],
|
patterns: [/^raw-win-ia32-Setup\.exe$/i, /^raw-win-i386-Setup\.exe$/i],
|
||||||
out: DOWNLOAD_ARTIFACTS.win32Installer,
|
out: DOWNLOAD_ARTIFACTS.win32Installer,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
patterns: [/^raw-win-ia32-portable\.exe$/i, /^raw-win-i386-portable\.exe$/i],
|
patterns: [/^raw-win-ia32-portable\.exe$/i, /^raw-win-i386-portable\.exe$/i],
|
||||||
out: DOWNLOAD_ARTIFACTS.win32Portable,
|
out: DOWNLOAD_ARTIFACTS.win32Portable,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
if (!fs.existsSync(distDir)) {
|
if (!fs.existsSync(distDir)) {
|
||||||
console.error("[finalize-win] dist 없음");
|
console.error("[finalize-win] dist 없음");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const files = fs.readdirSync(distDir);
|
const files = fs.readdirSync(distDir);
|
||||||
let done = 0;
|
let done = 0;
|
||||||
|
|
||||||
for (const rule of MAP) {
|
for (const rule of MAP) {
|
||||||
const srcName = files.find((f) => rule.patterns.some((re) => re.test(f)));
|
const srcName = files.find((f) => rule.patterns.some((re) => re.test(f)));
|
||||||
if (!srcName) {
|
if (!srcName) {
|
||||||
console.warn(`[finalize-win] skip (원본 없음): ${rule.out}`);
|
console.warn(`[finalize-win] skip (원본 없음): ${rule.out}`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const src = path.join(distDir, srcName);
|
const src = path.join(distDir, srcName);
|
||||||
const dest = path.join(distDir, rule.out);
|
const dest = path.join(distDir, rule.out);
|
||||||
if (src !== dest) {
|
if (src !== dest) {
|
||||||
if (fs.existsSync(dest)) fs.unlinkSync(dest);
|
if (fs.existsSync(dest)) fs.unlinkSync(dest);
|
||||||
fs.renameSync(src, dest);
|
fs.renameSync(src, dest);
|
||||||
}
|
}
|
||||||
const size = fs.statSync(dest).size;
|
const size = fs.statSync(dest).size;
|
||||||
console.log(`[finalize-win] ✅ ${rule.out} (${Math.round(size / 1024 / 1024)} MB) ← ${srcName}`);
|
console.log(`[finalize-win] ✅ ${rule.out} (${Math.round(size / 1024 / 1024)} MB) ← ${srcName}`);
|
||||||
done += 1;
|
done += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const f of fs.readdirSync(distDir)) {
|
for (const f of fs.readdirSync(distDir)) {
|
||||||
if (/^raw-win-/.test(f)) {
|
if (/^raw-win-/.test(f)) {
|
||||||
fs.unlinkSync(path.join(distDir, f));
|
fs.unlinkSync(path.join(distDir, f));
|
||||||
console.log(`[finalize-win] removed ${f}`);
|
console.log(`[finalize-win] removed ${f}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (done === 0) {
|
if (done === 0) {
|
||||||
console.error("[finalize-win] Windows 설치/포터블 산출물을 찾지 못했습니다.");
|
console.error("[finalize-win] Windows 설치/포터블 산출물을 찾지 못했습니다.");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
Regular → Executable
+76
-76
@@ -1,76 +1,76 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
/**
|
/**
|
||||||
* electron-builder 산출물 → chatbotApp public-ai/downloads/ 복사
|
* electron-builder 산출물 → chatbotApp public-ai/downloads/ 복사
|
||||||
*/
|
*/
|
||||||
import fs from "node:fs";
|
import fs from "node:fs";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { fileURLToPath } from "node:url";
|
import { fileURLToPath } from "node:url";
|
||||||
import {
|
import {
|
||||||
DOWNLOAD_ARTIFACTS,
|
DOWNLOAD_ARTIFACTS,
|
||||||
DOWNLOAD_ARTIFACT_LIST,
|
DOWNLOAD_ARTIFACT_LIST,
|
||||||
OBSOLETE_DOWNLOAD_ARTIFACTS,
|
OBSOLETE_DOWNLOAD_ARTIFACTS,
|
||||||
} from "./download-artifacts.mjs";
|
} from "./download-artifacts.mjs";
|
||||||
|
|
||||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
||||||
const distDir = path.join(root, "dist");
|
const distDir = path.join(root, "dist");
|
||||||
const downloadsDir = path.resolve(
|
const downloadsDir = path.resolve(
|
||||||
root,
|
root,
|
||||||
"../chatbotApp-chatbot2.0-agent/public-ai/downloads",
|
"../chatbotApp-chatbot2.0-agent/public-ai/downloads",
|
||||||
);
|
);
|
||||||
const pkg = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
const pkg = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
||||||
|
|
||||||
if (!fs.existsSync(distDir)) {
|
if (!fs.existsSync(distDir)) {
|
||||||
console.error(`[publish-downloads] dist 없음: ${distDir}`);
|
console.error(`[publish-downloads] dist 없음: ${distDir}`);
|
||||||
console.error("먼저 npm run dist:mac 또는 dist:win 을 실행하세요.");
|
console.error("먼저 npm run dist:mac 또는 dist:win 을 실행하세요.");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.mkdirSync(downloadsDir, { recursive: true });
|
fs.mkdirSync(downloadsDir, { recursive: true });
|
||||||
|
|
||||||
for (const name of OBSOLETE_DOWNLOAD_ARTIFACTS) {
|
for (const name of OBSOLETE_DOWNLOAD_ARTIFACTS) {
|
||||||
const p = path.join(downloadsDir, name);
|
const p = path.join(downloadsDir, name);
|
||||||
if (fs.existsSync(p)) {
|
if (fs.existsSync(p)) {
|
||||||
fs.unlinkSync(p);
|
fs.unlinkSync(p);
|
||||||
console.log(`[publish-downloads] removed obsolete ${name}`);
|
console.log(`[publish-downloads] removed obsolete ${name}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const copied = [];
|
const copied = [];
|
||||||
for (const name of DOWNLOAD_ARTIFACT_LIST) {
|
for (const name of DOWNLOAD_ARTIFACT_LIST) {
|
||||||
const src = path.join(distDir, name);
|
const src = path.join(distDir, name);
|
||||||
if (!fs.existsSync(src)) {
|
if (!fs.existsSync(src)) {
|
||||||
console.warn(`[publish-downloads] skip (없음): ${name}`);
|
console.warn(`[publish-downloads] skip (없음): ${name}`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const dest = path.join(downloadsDir, name);
|
const dest = path.join(downloadsDir, name);
|
||||||
fs.copyFileSync(src, dest);
|
fs.copyFileSync(src, dest);
|
||||||
const stat = fs.statSync(dest);
|
const stat = fs.statSync(dest);
|
||||||
copied.push({
|
copied.push({
|
||||||
file: name,
|
file: name,
|
||||||
size: stat.size,
|
size: stat.size,
|
||||||
mtime: stat.mtime.toISOString(),
|
mtime: stat.mtime.toISOString(),
|
||||||
});
|
});
|
||||||
console.log(`[publish-downloads] ${name} → ${dest}`);
|
console.log(`[publish-downloads] ${name} → ${dest}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const manifest = {
|
const manifest = {
|
||||||
version: pkg.version,
|
version: pkg.version,
|
||||||
updatedAt: new Date().toISOString(),
|
updatedAt: new Date().toISOString(),
|
||||||
files: { ...DOWNLOAD_ARTIFACTS },
|
files: { ...DOWNLOAD_ARTIFACTS },
|
||||||
artifacts: copied,
|
artifacts: copied,
|
||||||
note:
|
note:
|
||||||
"미서명 빌드 — Mac: dmg(설치) / zip(포터블·실행하기.command). Windows: Setup.exe(설치) / portable.exe(포터블).",
|
"미서명 빌드 — Mac: dmg(설치) / zip(포터블·실행하기.command). Windows: Setup.exe(설치) / portable.exe(포터블).",
|
||||||
};
|
};
|
||||||
|
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
path.join(downloadsDir, "manifest.json"),
|
path.join(downloadsDir, "manifest.json"),
|
||||||
`${JSON.stringify(manifest, null, 2)}\n`,
|
`${JSON.stringify(manifest, null, 2)}\n`,
|
||||||
"utf8",
|
"utf8",
|
||||||
);
|
);
|
||||||
|
|
||||||
if (copied.length === 0) {
|
if (copied.length === 0) {
|
||||||
console.error("[publish-downloads] 복사된 파일이 없습니다.");
|
console.error("[publish-downloads] 복사된 파일이 없습니다.");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[publish-downloads] ✅ ${copied.length}개 → ${downloadsDir}`);
|
console.log(`[publish-downloads] ✅ ${copied.length}개 → ${downloadsDir}`);
|
||||||
|
|||||||
+490
-490
@@ -1,490 +1,490 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# 4개 submodule: 로컬 변경 → 공식 GitHub chatbot2.0-agent commit + push
|
# 4개 submodule: 로컬 변경 → 공식 GitHub chatbot2.0-agent commit + push
|
||||||
#
|
#
|
||||||
# ★ 공식 GitHub(KoreaExpressWayCorp) 반영은 이 스크립트로만 수행한다.
|
# ★ 공식 GitHub(KoreaExpressWayCorp) 반영은 이 스크립트로만 수행한다.
|
||||||
# start-all-server.sh / push-to-gitea.sh 는 개발서버(Gitea/exdev)만 다룬다.
|
# start-all-server.sh / push-to-gitea.sh 는 개발서버(Gitea/exdev)만 다룬다.
|
||||||
#
|
#
|
||||||
# ./git_fetch_all.sh # fetch/merge + commit + push (공식 GitHub)
|
# ./git_fetch_all.sh # fetch/merge + commit + push (공식 GitHub)
|
||||||
# ./git_fetch_all.sh --init # submodule 미초기화 시 clone 포함
|
# ./git_fetch_all.sh --init # submodule 미초기화 시 clone 포함
|
||||||
# ./git_fetch_all.sh --dry-run # 실행 없이 상태만 출력
|
# ./git_fetch_all.sh --dry-run # 실행 없이 상태만 출력
|
||||||
# ./git_fetch_all.sh --no-push # commit까지, push 생략
|
# ./git_fetch_all.sh --no-push # commit까지, push 생략
|
||||||
# ./git_fetch_all.sh --no-commit # fetch/merge만 (commit·push 생략)
|
# ./git_fetch_all.sh --no-commit # fetch/merge만 (commit·push 생략)
|
||||||
#
|
#
|
||||||
# ★ 운영(GitHub) push 전용 — 개발서버(exdev) 주소를 커밋/push 하지 않는다.
|
# ★ 운영(GitHub) push 전용 — 개발서버(exdev) 주소를 커밋/push 하지 않는다.
|
||||||
# start-all-server.sh 가 런타임 ENV 로만 exdev(127.0.0.1 Mongo / localhost Oracle TROAD /
|
# start-all-server.sh 가 런타임 ENV 로만 exdev(127.0.0.1 Mongo / localhost Oracle TROAD /
|
||||||
# host.docker.internal RAG)를 적용한다.
|
# host.docker.internal RAG)를 적용한다.
|
||||||
# 이 스크립트는 commit 직전에 운영 기본값(172.16.*)을 파일에 복원한 뒤 push 한다.
|
# 이 스크립트는 commit 직전에 운영 기본값(172.16.*)을 파일에 복원한 뒤 push 한다.
|
||||||
# (.env / EXDEV_LOCAL / server-dev 오버레이는 GitHub 대상이 아님)
|
# (.env / EXDEV_LOCAL / server-dev 오버레이는 GitHub 대상이 아님)
|
||||||
#
|
#
|
||||||
# 대상 (.gitmodules) — 모두 branch=chatbot2.0-agent (main 사용 안 함):
|
# 대상 (.gitmodules) — 모두 branch=chatbot2.0-agent (main 사용 안 함):
|
||||||
# chatbotApi-chatbot2.0-agent
|
# chatbotApi-chatbot2.0-agent
|
||||||
# chatbotApp-chatbot2.0-agent
|
# chatbotApp-chatbot2.0-agent
|
||||||
# exAiChatBot-chatbot2.0-agent
|
# exAiChatBot-chatbot2.0-agent
|
||||||
# kakaoChatbotSkill-chatbot2.0-agent
|
# kakaoChatbotSkill-chatbot2.0-agent
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
# bare repo 배포 시 상위에서 GIT_DIR 이 export 되면 submodule git 이 깨짐
|
# bare repo 배포 시 상위에서 GIT_DIR 이 export 되면 submodule git 이 깨짐
|
||||||
MONOREPO_GIT_DIR="${MONOREPO_GIT_DIR:-${GIT_DIR:-}}"
|
MONOREPO_GIT_DIR="${MONOREPO_GIT_DIR:-${GIT_DIR:-}}"
|
||||||
unset GIT_DIR GIT_WORK_TREE
|
unset GIT_DIR GIT_WORK_TREE
|
||||||
|
|
||||||
INIT=false
|
INIT=false
|
||||||
DRY_RUN=false
|
DRY_RUN=false
|
||||||
DO_COMMIT=true
|
DO_COMMIT=true
|
||||||
DO_PUSH=true
|
DO_PUSH=true
|
||||||
TARGET_BRANCH="chatbot2.0-agent"
|
TARGET_BRANCH="chatbot2.0-agent"
|
||||||
|
|
||||||
# 명시 대상 (순서 고정). .gitmodules 와 일치해야 함.
|
# 명시 대상 (순서 고정). .gitmodules 와 일치해야 함.
|
||||||
TARGET_PATHS=(
|
TARGET_PATHS=(
|
||||||
"chatbotApi-chatbot2.0-agent"
|
"chatbotApi-chatbot2.0-agent"
|
||||||
"chatbotApp-chatbot2.0-agent"
|
"chatbotApp-chatbot2.0-agent"
|
||||||
"exAiChatBot-chatbot2.0-agent"
|
"exAiChatBot-chatbot2.0-agent"
|
||||||
"kakaoChatbotSkill-chatbot2.0-agent"
|
"kakaoChatbotSkill-chatbot2.0-agent"
|
||||||
)
|
)
|
||||||
|
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
--init) INIT=true ;;
|
--init) INIT=true ;;
|
||||||
--dry-run) DRY_RUN=true ;;
|
--dry-run) DRY_RUN=true ;;
|
||||||
--no-commit) DO_COMMIT=false; DO_PUSH=false ;;
|
--no-commit) DO_COMMIT=false; DO_PUSH=false ;;
|
||||||
--no-push) DO_PUSH=false ;;
|
--no-push) DO_PUSH=false ;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
sed -n '2,22p' "$0"
|
sed -n '2,22p' "$0"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "알 수 없는 옵션: $arg (--help)"
|
echo "알 수 없는 옵션: $arg (--help)"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
log() { echo "[git_fetch_all] $*"; }
|
log() { echo "[git_fetch_all] $*"; }
|
||||||
warn() { echo "[git_fetch_all] ⚠️ $*" >&2; }
|
warn() { echo "[git_fetch_all] ⚠️ $*" >&2; }
|
||||||
ok() { echo "[git_fetch_all] ✅ $*"; }
|
ok() { echo "[git_fetch_all] ✅ $*"; }
|
||||||
|
|
||||||
cd "${ROOT_DIR}"
|
cd "${ROOT_DIR}"
|
||||||
|
|
||||||
if [[ ! -f .gitmodules ]]; then
|
if [[ ! -f .gitmodules ]]; then
|
||||||
echo "ERROR: .gitmodules 없음 — submodule 미설정"
|
echo "ERROR: .gitmodules 없음 — submodule 미설정"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
resolve_monorepo_git_dir() {
|
resolve_monorepo_git_dir() {
|
||||||
if [[ -n "${MONOREPO_GIT_DIR}" && -d "${MONOREPO_GIT_DIR}" ]]; then
|
if [[ -n "${MONOREPO_GIT_DIR}" && -d "${MONOREPO_GIT_DIR}" ]]; then
|
||||||
echo "${MONOREPO_GIT_DIR}"
|
echo "${MONOREPO_GIT_DIR}"
|
||||||
elif git -C "${ROOT_DIR}" rev-parse --git-dir >/dev/null 2>&1; then
|
elif git -C "${ROOT_DIR}" rev-parse --git-dir >/dev/null 2>&1; then
|
||||||
git -C "${ROOT_DIR}" rev-parse --git-dir
|
git -C "${ROOT_DIR}" rev-parse --git-dir
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
submodule_pinned_sha() {
|
submodule_pinned_sha() {
|
||||||
local path="$1"
|
local path="$1"
|
||||||
local git_dir
|
local git_dir
|
||||||
git_dir="$(resolve_monorepo_git_dir || true)"
|
git_dir="$(resolve_monorepo_git_dir || true)"
|
||||||
[[ -n "${git_dir}" ]] || return 0
|
[[ -n "${git_dir}" ]] || return 0
|
||||||
git --git-dir="${git_dir}" ls-tree HEAD "${path}" 2>/dev/null | awk '{print $3}'
|
git --git-dir="${git_dir}" ls-tree HEAD "${path}" 2>/dev/null | awk '{print $3}'
|
||||||
}
|
}
|
||||||
|
|
||||||
clone_submodule_repo() {
|
clone_submodule_repo() {
|
||||||
local path="$1" url="$2" branch="$3"
|
local path="$1" url="$2" branch="$3"
|
||||||
local target="${ROOT_DIR}/${path}"
|
local target="${ROOT_DIR}/${path}"
|
||||||
local sha
|
local sha
|
||||||
|
|
||||||
sha="$(submodule_pinned_sha "${path}" || true)"
|
sha="$(submodule_pinned_sha "${path}" || true)"
|
||||||
log " clone ${url} → ${path} (branch=${branch})"
|
log " clone ${url} → ${path} (branch=${branch})"
|
||||||
rm -rf "${target}"
|
rm -rf "${target}"
|
||||||
if ! git clone --branch "${branch}" --single-branch "${url}" "${target}"; then
|
if ! git clone --branch "${branch}" --single-branch "${url}" "${target}"; then
|
||||||
warn "${path} — clone 실패 (서버 GitHub 미접속 시 sync-submodules-rsync.sh 사용)"
|
warn "${path} — clone 실패 (서버 GitHub 미접속 시 sync-submodules-rsync.sh 사용)"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [[ -n "${sha}" ]]; then
|
if [[ -n "${sha}" ]]; then
|
||||||
git -C "${target}" checkout "${sha}" 2>/dev/null || true
|
git -C "${target}" checkout "${sha}" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
restore_monorepo_overlays() {
|
restore_monorepo_overlays() {
|
||||||
if [[ -f "${ROOT_DIR}/local-dev/docker-compose.rag.local.yml" ]]; then
|
if [[ -f "${ROOT_DIR}/local-dev/docker-compose.rag.local.yml" ]]; then
|
||||||
cp "${ROOT_DIR}/local-dev/docker-compose.rag.local.yml" \
|
cp "${ROOT_DIR}/local-dev/docker-compose.rag.local.yml" \
|
||||||
"${ROOT_DIR}/exAiChatBot-chatbot2.0-agent/docker-compose.local.yml"
|
"${ROOT_DIR}/exAiChatBot-chatbot2.0-agent/docker-compose.local.yml"
|
||||||
log "복원: exAiChatBot/docker-compose.local.yml (monorepo overlay)"
|
log "복원: exAiChatBot/docker-compose.local.yml (monorepo overlay)"
|
||||||
fi
|
fi
|
||||||
if [[ -f "${ROOT_DIR}/server-dev/docker-compose.rag.server.yml" ]]; then
|
if [[ -f "${ROOT_DIR}/server-dev/docker-compose.rag.server.yml" ]]; then
|
||||||
cp "${ROOT_DIR}/server-dev/docker-compose.rag.server.yml" \
|
cp "${ROOT_DIR}/server-dev/docker-compose.rag.server.yml" \
|
||||||
"${ROOT_DIR}/exAiChatBot-chatbot2.0-agent/docker-compose.server.yml"
|
"${ROOT_DIR}/exAiChatBot-chatbot2.0-agent/docker-compose.server.yml"
|
||||||
log "복원: exAiChatBot/docker-compose.server.yml (monorepo overlay)"
|
log "복원: exAiChatBot/docker-compose.server.yml (monorepo overlay)"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# GitHub push 전: exdev 런타임 주소를 커밋하지 않고 운영 기본값(172.16.180.130) 유지
|
# GitHub push 전: exdev 런타임 주소를 커밋하지 않고 운영 기본값(172.16.180.130) 유지
|
||||||
# - 런타임(exdev): start-all-server.sh ENV / .env / EXDEV_LOCAL=true → 127.0.0.1·host.docker.internal
|
# - 런타임(exdev): start-all-server.sh ENV / .env / EXDEV_LOCAL=true → 127.0.0.1·host.docker.internal
|
||||||
# - 커밋/push: application.yml·env.template·chatbot_tool_client.py 기본값을 운영 IP로 고정
|
# - 커밋/push: application.yml·env.template·chatbot_tool_client.py 기본값을 운영 IP로 고정
|
||||||
PROD_WAS_HOST="172.16.180.130"
|
PROD_WAS_HOST="172.16.180.130"
|
||||||
PROD_WAS_API="http://${PROD_WAS_HOST}:8086/api"
|
PROD_WAS_API="http://${PROD_WAS_HOST}:8086/api"
|
||||||
PROD_RAG_CHAT="http://${PROD_WAS_HOST}:28012/agent/chat"
|
PROD_RAG_CHAT="http://${PROD_WAS_HOST}:28012/agent/chat"
|
||||||
PROD_MONGO_URI="mongodb://exDev:ehfhrhdtk!!@${PROD_WAS_HOST}:27017/chatbot?heartbeatFrequencyMS=30000&minPoolSize=8&maxIdleTimeMS=18000000"
|
PROD_MONGO_URI="mongodb://exDev:ehfhrhdtk!!@${PROD_WAS_HOST}:27017/chatbot?heartbeatFrequencyMS=30000&minPoolSize=8&maxIdleTimeMS=18000000"
|
||||||
# 운영 TROAD Oracle (start-all 은 SPRING_DATASOURCE_TROAD_* ENV 로 localhost 오버라이드)
|
# 운영 TROAD Oracle (start-all 은 SPRING_DATASOURCE_TROAD_* ENV 로 localhost 오버라이드)
|
||||||
PROD_TROAD_JDBC_URL="jdbc:oracle:thin:@172.16.163.76:1522/TROAD"
|
PROD_TROAD_JDBC_URL="jdbc:oracle:thin:@172.16.163.76:1522/TROAD"
|
||||||
PROD_TROAD_USERNAME="TROAD_APP"
|
PROD_TROAD_USERNAME="TROAD_APP"
|
||||||
PROD_TROAD_PASSWORD='!ryxhdapp2025'
|
PROD_TROAD_PASSWORD='!ryxhdapp2025'
|
||||||
|
|
||||||
restore_production_endpoints_before_commit() {
|
restore_production_endpoints_before_commit() {
|
||||||
local path="$1"
|
local path="$1"
|
||||||
local dir="${ROOT_DIR}/${path}"
|
local dir="${ROOT_DIR}/${path}"
|
||||||
|
|
||||||
case "${path}" in
|
case "${path}" in
|
||||||
chatbotApi-chatbot2.0-agent)
|
chatbotApi-chatbot2.0-agent)
|
||||||
local yml="${dir}/src/main/resources/application.yml"
|
local yml="${dir}/src/main/resources/application.yml"
|
||||||
if [[ -f "${yml}" ]]; then
|
if [[ -f "${yml}" ]]; then
|
||||||
# 수동/임시로 바꾼 로컬 Mongo URI 를 운영 기본값으로 복원 (start-all 은 ENV 로만 오버라이드)
|
# 수동/임시로 바꾼 로컬 Mongo URI 를 운영 기본값으로 복원 (start-all 은 ENV 로만 오버라이드)
|
||||||
# URI 의 @ 는 perl 치환부 배열 보간을 피하기 위해 ENV 로 전달
|
# URI 의 @ 는 perl 치환부 배열 보간을 피하기 위해 ENV 로 전달
|
||||||
PROD_MONGO_URI="${PROD_MONGO_URI}" perl -i -pe \
|
PROD_MONGO_URI="${PROD_MONGO_URI}" perl -i -pe \
|
||||||
's|uri:\s*mongodb://\S+|uri: $ENV{PROD_MONGO_URI}|g' "${yml}"
|
's|uri:\s*mongodb://\S+|uri: $ENV{PROD_MONGO_URI}|g' "${yml}"
|
||||||
# troad datasource 를 로컬 Oracle 로 바꿔 둔 경우 운영값 복원
|
# troad datasource 를 로컬 Oracle 로 바꿔 둔 경우 운영값 복원
|
||||||
PROD_TROAD_JDBC_URL="${PROD_TROAD_JDBC_URL}" \
|
PROD_TROAD_JDBC_URL="${PROD_TROAD_JDBC_URL}" \
|
||||||
PROD_TROAD_USERNAME="${PROD_TROAD_USERNAME}" \
|
PROD_TROAD_USERNAME="${PROD_TROAD_USERNAME}" \
|
||||||
PROD_TROAD_PASSWORD="${PROD_TROAD_PASSWORD}" \
|
PROD_TROAD_PASSWORD="${PROD_TROAD_PASSWORD}" \
|
||||||
perl -i -0pe '
|
perl -i -0pe '
|
||||||
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+url:\s*)\S+|$1$ENV{PROD_TROAD_JDBC_URL}|g;
|
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+url:\s*)\S+|$1$ENV{PROD_TROAD_JDBC_URL}|g;
|
||||||
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+username:\s*)\S+|$1$ENV{PROD_TROAD_USERNAME}|g;
|
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+username:\s*)\S+|$1$ENV{PROD_TROAD_USERNAME}|g;
|
||||||
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+password:\s*).*|$1"$ENV{PROD_TROAD_PASSWORD}"|g;
|
s|(troad:\s*\n(?:[ \t]+[^\n]*\n)*?[ \t]+password:\s*).*|$1"$ENV{PROD_TROAD_PASSWORD}"|g;
|
||||||
' "${yml}"
|
' "${yml}"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
kakaoChatbotSkill-chatbot2.0-agent)
|
kakaoChatbotSkill-chatbot2.0-agent)
|
||||||
local yml="${dir}/src/main/resources/application.yml"
|
local yml="${dir}/src/main/resources/application.yml"
|
||||||
if [[ -f "${yml}" ]]; then
|
if [[ -f "${yml}" ]]; then
|
||||||
# ${ENV:default} 형태의 default 만 운영 IP로 고정 (실행 시 ENV 로컬 오버라이드는 유지)
|
# ${ENV:default} 형태의 default 만 운영 IP로 고정 (실행 시 ENV 로컬 오버라이드는 유지)
|
||||||
PROD_WAS_API="${PROD_WAS_API}" PROD_RAG_CHAT="${PROD_RAG_CHAT}" PROD_WAS_HOST="${PROD_WAS_HOST}" \
|
PROD_WAS_API="${PROD_WAS_API}" PROD_RAG_CHAT="${PROD_RAG_CHAT}" PROD_WAS_HOST="${PROD_WAS_HOST}" \
|
||||||
perl -i -pe '
|
perl -i -pe '
|
||||||
s|CHATBOT_API_BASE_URL:[^}]+}|CHATBOT_API_BASE_URL:$ENV{PROD_WAS_API}/}|g;
|
s|CHATBOT_API_BASE_URL:[^}]+}|CHATBOT_API_BASE_URL:$ENV{PROD_WAS_API}/}|g;
|
||||||
s|RAG_AGENT_CHAT_URL:[^}]+}|RAG_AGENT_CHAT_URL:$ENV{PROD_RAG_CHAT}}|g;
|
s|RAG_AGENT_CHAT_URL:[^}]+}|RAG_AGENT_CHAT_URL:$ENV{PROD_RAG_CHAT}}|g;
|
||||||
s|base-url:\s*http://127\.0\.0\.1:8086/api/?|base-url: \${CHATBOT_API_BASE_URL:$ENV{PROD_WAS_API}/}|g;
|
s|base-url:\s*http://127\.0\.0\.1:8086/api/?|base-url: \${CHATBOT_API_BASE_URL:$ENV{PROD_WAS_API}/}|g;
|
||||||
s|base-url:\s*http://host\.docker\.internal:8086/api/?|base-url: \${CHATBOT_API_BASE_URL:$ENV{PROD_WAS_API}/}|g;
|
s|base-url:\s*http://host\.docker\.internal:8086/api/?|base-url: \${CHATBOT_API_BASE_URL:$ENV{PROD_WAS_API}/}|g;
|
||||||
s|url:\s*http://127\.0\.0\.1:28012/agent/chat|url: \${RAG_AGENT_CHAT_URL:$ENV{PROD_RAG_CHAT}}|g;
|
s|url:\s*http://127\.0\.0\.1:28012/agent/chat|url: \${RAG_AGENT_CHAT_URL:$ENV{PROD_RAG_CHAT}}|g;
|
||||||
s|url:\s*http://host\.docker\.internal:28012/agent/chat|url: \${RAG_AGENT_CHAT_URL:$ENV{PROD_RAG_CHAT}}|g;
|
s|url:\s*http://host\.docker\.internal:28012/agent/chat|url: \${RAG_AGENT_CHAT_URL:$ENV{PROD_RAG_CHAT}}|g;
|
||||||
' "${yml}"
|
' "${yml}"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
exAiChatBot-chatbot2.0-agent)
|
exAiChatBot-chatbot2.0-agent)
|
||||||
if [[ -f "${dir}/env.template" ]]; then
|
if [[ -f "${dir}/env.template" ]]; then
|
||||||
PROD_WAS_API="${PROD_WAS_API}" perl -i -pe \
|
PROD_WAS_API="${PROD_WAS_API}" perl -i -pe \
|
||||||
's|^CHATBOT_API_BASE_URL=.*|CHATBOT_API_BASE_URL=$ENV{PROD_WAS_API}|' "${dir}/env.template"
|
's|^CHATBOT_API_BASE_URL=.*|CHATBOT_API_BASE_URL=$ENV{PROD_WAS_API}|' "${dir}/env.template"
|
||||||
# EXDEV_LOCAL 은 커밋 템플릿에 넣지 않음 (server-dev 전용)
|
# EXDEV_LOCAL 은 커밋 템플릿에 넣지 않음 (server-dev 전용)
|
||||||
perl -i -ne 'print unless /^EXDEV_LOCAL=/' "${dir}/env.template"
|
perl -i -ne 'print unless /^EXDEV_LOCAL=/' "${dir}/env.template"
|
||||||
fi
|
fi
|
||||||
if [[ -f "${dir}/env.example" ]]; then
|
if [[ -f "${dir}/env.example" ]]; then
|
||||||
PROD_WAS_API="${PROD_WAS_API}" perl -i -pe \
|
PROD_WAS_API="${PROD_WAS_API}" perl -i -pe \
|
||||||
's|^CHATBOT_API_BASE_URL=.*|CHATBOT_API_BASE_URL=$ENV{PROD_WAS_API}|' "${dir}/env.example" 2>/dev/null || true
|
's|^CHATBOT_API_BASE_URL=.*|CHATBOT_API_BASE_URL=$ENV{PROD_WAS_API}|' "${dir}/env.example" 2>/dev/null || true
|
||||||
perl -i -ne 'print unless /^EXDEV_LOCAL=/' "${dir}/env.example" 2>/dev/null || true
|
perl -i -ne 'print unless /^EXDEV_LOCAL=/' "${dir}/env.example" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
if [[ -f "${dir}/scripts/agent/chatbot_tool_client.py" ]]; then
|
if [[ -f "${dir}/scripts/agent/chatbot_tool_client.py" ]]; then
|
||||||
# 운영 기본값(_PROD_WAS_API / legacy getenv default)만 복원.
|
# 운영 기본값(_PROD_WAS_API / legacy getenv default)만 복원.
|
||||||
PROD_WAS_API="${PROD_WAS_API}" perl -i -pe '
|
PROD_WAS_API="${PROD_WAS_API}" perl -i -pe '
|
||||||
s|_PROD_WAS_API = "http://[^"]+"|_PROD_WAS_API = "$ENV{PROD_WAS_API}"|g;
|
s|_PROD_WAS_API = "http://[^"]+"|_PROD_WAS_API = "$ENV{PROD_WAS_API}"|g;
|
||||||
s|os\.getenv\("TOOL_API_BASE_URL", "http://[^"]+"\)|os.getenv("TOOL_API_BASE_URL", "$ENV{PROD_WAS_API}")|g;
|
s|os\.getenv\("TOOL_API_BASE_URL", "http://[^"]+"\)|os.getenv("TOOL_API_BASE_URL", "$ENV{PROD_WAS_API}")|g;
|
||||||
s|os\.getenv\("CHATBOT_API_BASE_URL", "http://[^"]+"\)|os.getenv("CHATBOT_API_BASE_URL", "$ENV{PROD_WAS_API}")|g;
|
s|os\.getenv\("CHATBOT_API_BASE_URL", "http://[^"]+"\)|os.getenv("CHATBOT_API_BASE_URL", "$ENV{PROD_WAS_API}")|g;
|
||||||
' "${dir}/scripts/agent/chatbot_tool_client.py"
|
' "${dir}/scripts/agent/chatbot_tool_client.py"
|
||||||
fi
|
fi
|
||||||
# monorepo overlay compose 는 push 대상에서 제외 (로컬 exdev 전용)
|
# monorepo overlay compose 는 push 대상에서 제외 (로컬 exdev 전용)
|
||||||
git -C "${dir}" checkout HEAD -- docker-compose.server.yml docker-compose.local.yml 2>/dev/null || true
|
git -C "${dir}" checkout HEAD -- docker-compose.server.yml docker-compose.local.yml 2>/dev/null || true
|
||||||
# .env 는 gitignore — 스테이징 실수 방지
|
# .env 는 gitignore — 스테이징 실수 방지
|
||||||
git -C "${dir}" reset HEAD -- .env .env.local 2>/dev/null || true
|
git -C "${dir}" reset HEAD -- .env .env.local 2>/dev/null || true
|
||||||
rm -f "${dir}/.env.local" 2>/dev/null || true
|
rm -f "${dir}/.env.local" 2>/dev/null || true
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
# 복원 후에도 개발서버 전용 호스트가 커밋 대상 설정 파일에 남으면 push 중단
|
# 복원 후에도 개발서버 전용 호스트가 커밋 대상 설정 파일에 남으면 push 중단
|
||||||
assert_no_exdev_endpoints_for_push() {
|
assert_no_exdev_endpoints_for_push() {
|
||||||
local path="$1"
|
local path="$1"
|
||||||
local dir="${ROOT_DIR}/${path}"
|
local dir="${ROOT_DIR}/${path}"
|
||||||
local hits=""
|
local hits=""
|
||||||
|
|
||||||
case "${path}" in
|
case "${path}" in
|
||||||
chatbotApi-chatbot2.0-agent)
|
chatbotApi-chatbot2.0-agent)
|
||||||
hits="$(grep -nE 'mongodb://(127\.0\.0\.1|localhost)|host\.docker\.internal|jdbc:oracle:thin:@(127\.0\.0\.1|localhost)' \
|
hits="$(grep -nE 'mongodb://(127\.0\.0\.1|localhost)|host\.docker\.internal|jdbc:oracle:thin:@(127\.0\.0\.1|localhost)' \
|
||||||
"${dir}/src/main/resources/application.yml" 2>/dev/null || true)"
|
"${dir}/src/main/resources/application.yml" 2>/dev/null || true)"
|
||||||
# troad 블록이 로컬 계정(OPR_MAIN)으로 바뀌었는지도 차단
|
# troad 블록이 로컬 계정(OPR_MAIN)으로 바뀌었는지도 차단
|
||||||
if awk '
|
if awk '
|
||||||
/^[[:space:]]*troad:[[:space:]]*$/ { in_troad=1; next }
|
/^[[:space:]]*troad:[[:space:]]*$/ { in_troad=1; next }
|
||||||
in_troad && /^[[:space:]]*[a-zA-Z0-9_-]+:[[:space:]]*$/ && $0 !~ /^[[:space:]]*troad:/ { in_troad=0 }
|
in_troad && /^[[:space:]]*[a-zA-Z0-9_-]+:[[:space:]]*$/ && $0 !~ /^[[:space:]]*troad:/ { in_troad=0 }
|
||||||
in_troad && /username:[[:space:]]*OPR_MAIN/ { found=1 }
|
in_troad && /username:[[:space:]]*OPR_MAIN/ { found=1 }
|
||||||
END { exit found ? 0 : 1 }
|
END { exit found ? 0 : 1 }
|
||||||
' "${dir}/src/main/resources/application.yml" 2>/dev/null; then
|
' "${dir}/src/main/resources/application.yml" 2>/dev/null; then
|
||||||
hits+=$'\n'"troad.username=OPR_MAIN (exdev local Oracle — must not commit)"
|
hits+=$'\n'"troad.username=OPR_MAIN (exdev local Oracle — must not commit)"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
kakaoChatbotSkill-chatbot2.0-agent)
|
kakaoChatbotSkill-chatbot2.0-agent)
|
||||||
hits="$(grep -nE '127\.0\.0\.1:(8086|28012)|host\.docker\.internal:(8086|28012)' \
|
hits="$(grep -nE '127\.0\.0\.1:(8086|28012)|host\.docker\.internal:(8086|28012)' \
|
||||||
"${dir}/src/main/resources/application.yml" 2>/dev/null || true)"
|
"${dir}/src/main/resources/application.yml" 2>/dev/null || true)"
|
||||||
;;
|
;;
|
||||||
exAiChatBot-chatbot2.0-agent)
|
exAiChatBot-chatbot2.0-agent)
|
||||||
hits="$(grep -nE '^(CHATBOT_API_BASE_URL|TOOL_API_BASE_URL)=.*(127\.0\.0\.1|host\.docker\.internal)|EXDEV_LOCAL=' \
|
hits="$(grep -nE '^(CHATBOT_API_BASE_URL|TOOL_API_BASE_URL)=.*(127\.0\.0\.1|host\.docker\.internal)|EXDEV_LOCAL=' \
|
||||||
"${dir}/env.template" "${dir}/env.example" 2>/dev/null || true)"
|
"${dir}/env.template" "${dir}/env.example" 2>/dev/null || true)"
|
||||||
hits+="$(grep -nE 'getenv\(\"TOOL_API_BASE_URL\", \"http://(127\.0\.0\.1|host\.docker\.internal)' \
|
hits+="$(grep -nE 'getenv\(\"TOOL_API_BASE_URL\", \"http://(127\.0\.0\.1|host\.docker\.internal)' \
|
||||||
"${dir}/scripts/agent/chatbot_tool_client.py" 2>/dev/null || true)"
|
"${dir}/scripts/agent/chatbot_tool_client.py" 2>/dev/null || true)"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [[ -n "${hits}" ]]; then
|
if [[ -n "${hits}" ]]; then
|
||||||
warn "${path}: 개발서버(exdev) 주소가 남아 push 중단"
|
warn "${path}: 개발서버(exdev) 주소가 남아 push 중단"
|
||||||
echo "${hits}" | sed 's/^/ /'
|
echo "${hits}" | sed 's/^/ /'
|
||||||
warn "start-all-server.sh 런타임 ENV 로만 exdev 주소를 쓰고, 소스 기본값은 운영 IP 를 유지하세요"
|
warn "start-all-server.sh 런타임 ENV 로만 exdev 주소를 쓰고, 소스 기본값은 운영 IP 를 유지하세요"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
submodule_is_cloned() {
|
submodule_is_cloned() {
|
||||||
local path="$1"
|
local path="$1"
|
||||||
[[ -e "${ROOT_DIR}/${path}/.git" ]]
|
[[ -e "${ROOT_DIR}/${path}/.git" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
repo_is_dirty() {
|
repo_is_dirty() {
|
||||||
! git diff --quiet || ! git diff --cached --quiet || [[ -n "$(git ls-files --others --exclude-standard)" ]]
|
! git diff --quiet || ! git diff --cached --quiet || [[ -n "$(git ls-files --others --exclude-standard)" ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_branch() {
|
ensure_branch() {
|
||||||
local branch="$1"
|
local branch="$1"
|
||||||
local git_dir
|
local git_dir
|
||||||
# submodule 은 .git 이 파일일 수 있음 → rev-parse 사용
|
# submodule 은 .git 이 파일일 수 있음 → rev-parse 사용
|
||||||
git_dir="$(git rev-parse --git-dir 2>/dev/null || echo .git)"
|
git_dir="$(git rev-parse --git-dir 2>/dev/null || echo .git)"
|
||||||
if [[ -d "${git_dir}/rebase-merge" || -d "${git_dir}/rebase-apply" ]]; then
|
if [[ -d "${git_dir}/rebase-merge" || -d "${git_dir}/rebase-apply" ]]; then
|
||||||
warn "rebase 진행 중 — 수동 해결 후 재실행 (git rebase --continue / --abort)"
|
warn "rebase 진행 중 — 수동 해결 후 재실행 (git rebase --continue / --abort)"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if [[ -f "${git_dir}/MERGE_HEAD" ]]; then
|
if [[ -f "${git_dir}/MERGE_HEAD" ]]; then
|
||||||
warn "merge 진행 중 — 수동 해결 후 재실행"
|
warn "merge 진행 중 — 수동 해결 후 재실행"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local cur
|
local cur
|
||||||
cur="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo DETACHED)"
|
cur="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo DETACHED)"
|
||||||
if [[ "${cur}" == "${branch}" ]]; then
|
if [[ "${cur}" == "${branch}" ]]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if git show-ref --verify --quiet "refs/heads/${branch}"; then
|
if git show-ref --verify --quiet "refs/heads/${branch}"; then
|
||||||
git checkout "${branch}"
|
git checkout "${branch}"
|
||||||
elif git show-ref --verify --quiet "refs/remotes/origin/${branch}"; then
|
elif git show-ref --verify --quiet "refs/remotes/origin/${branch}"; then
|
||||||
git checkout -B "${branch}" "origin/${branch}"
|
git checkout -B "${branch}" "origin/${branch}"
|
||||||
else
|
else
|
||||||
git checkout -B "${branch}"
|
git checkout -B "${branch}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
sync_one() {
|
sync_one() {
|
||||||
local path="$1"
|
local path="$1"
|
||||||
local url branch old new stashed=0 ahead
|
local url branch old new stashed=0 ahead
|
||||||
|
|
||||||
url="$(git config -f .gitmodules "submodule.${path}.url" 2>/dev/null || true)"
|
url="$(git config -f .gitmodules "submodule.${path}.url" 2>/dev/null || true)"
|
||||||
if [[ -z "${url}" ]]; then
|
if [[ -z "${url}" ]]; then
|
||||||
warn "${path} — .gitmodules 에 없음, 건너뜀"
|
warn "${path} — .gitmodules 에 없음, 건너뜀"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 사용자 요구: main 금지, chatbot2.0-agent 고정
|
# 사용자 요구: main 금지, chatbot2.0-agent 고정
|
||||||
branch="$(git config -f .gitmodules "submodule.${path}.branch" || echo "${TARGET_BRANCH}")"
|
branch="$(git config -f .gitmodules "submodule.${path}.branch" || echo "${TARGET_BRANCH}")"
|
||||||
branch="${branch:-${TARGET_BRANCH}}"
|
branch="${branch:-${TARGET_BRANCH}}"
|
||||||
if [[ "${branch}" != "${TARGET_BRANCH}" ]]; then
|
if [[ "${branch}" != "${TARGET_BRANCH}" ]]; then
|
||||||
warn "${path} — .gitmodules branch=${branch} → ${TARGET_BRANCH} 로 강제"
|
warn "${path} — .gitmodules branch=${branch} → ${TARGET_BRANCH} 로 강제"
|
||||||
branch="${TARGET_BRANCH}"
|
branch="${TARGET_BRANCH}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log ">>> ${path}"
|
log ">>> ${path}"
|
||||||
log " url=${url} branch=${branch}"
|
log " url=${url} branch=${branch}"
|
||||||
|
|
||||||
if ! submodule_is_cloned "${path}"; then
|
if ! submodule_is_cloned "${path}"; then
|
||||||
if $DRY_RUN; then
|
if $DRY_RUN; then
|
||||||
log " [dry-run] submodule clone 필요 — ./git_fetch_all.sh --init"
|
log " [dry-run] submodule clone 필요 — ./git_fetch_all.sh --init"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
if $INIT; then
|
if $INIT; then
|
||||||
clone_submodule_repo "${path}" "${url}" "${branch}" || return 1
|
clone_submodule_repo "${path}" "${url}" "${branch}" || return 1
|
||||||
else
|
else
|
||||||
warn "${path} — submodule 미초기화. --init 옵션 사용"
|
warn "${path} — submodule 미초기화. --init 옵션 사용"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
(
|
(
|
||||||
cd "${ROOT_DIR}/${path}"
|
cd "${ROOT_DIR}/${path}"
|
||||||
unset GIT_DIR GIT_WORK_TREE
|
unset GIT_DIR GIT_WORK_TREE
|
||||||
|
|
||||||
old="$(git rev-parse HEAD 2>/dev/null || echo none)"
|
old="$(git rev-parse HEAD 2>/dev/null || echo none)"
|
||||||
|
|
||||||
if $DRY_RUN; then
|
if $DRY_RUN; then
|
||||||
ensure_branch "${branch}" || true
|
ensure_branch "${branch}" || true
|
||||||
git fetch origin "${branch}" 2>/dev/null || git fetch origin
|
git fetch origin "${branch}" 2>/dev/null || git fetch origin
|
||||||
new="$(git rev-parse "origin/${branch}" 2>/dev/null || echo unknown)"
|
new="$(git rev-parse "origin/${branch}" 2>/dev/null || echo unknown)"
|
||||||
if [[ "${old}" == "${new}" ]]; then
|
if [[ "${old}" == "${new}" ]]; then
|
||||||
log " [dry-run] 원격 최신: ${old:0:7}"
|
log " [dry-run] 원격 최신: ${old:0:7}"
|
||||||
else
|
else
|
||||||
log " [dry-run] 원격 변경 ${old:0:7} → ${new:0:7}"
|
log " [dry-run] 원격 변경 ${old:0:7} → ${new:0:7}"
|
||||||
git log --oneline "HEAD..origin/${branch}" 2>/dev/null | sed 's/^/ /' || true
|
git log --oneline "HEAD..origin/${branch}" 2>/dev/null | sed 's/^/ /' || true
|
||||||
fi
|
fi
|
||||||
if repo_is_dirty; then
|
if repo_is_dirty; then
|
||||||
log " [dry-run] 로컬 미커밋 변경 있음 → commit/push 대상"
|
log " [dry-run] 로컬 미커밋 변경 있음 → commit/push 대상"
|
||||||
git status -sb | sed 's/^/ /'
|
git status -sb | sed 's/^/ /'
|
||||||
else
|
else
|
||||||
log " [dry-run] 로컬 미커밋 변경 없음"
|
log " [dry-run] 로컬 미커밋 변경 없음"
|
||||||
fi
|
fi
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 1) 원격 fetch + 브랜치 고정
|
# 1) 원격 fetch + 브랜치 고정
|
||||||
git fetch origin "${branch}"
|
git fetch origin "${branch}"
|
||||||
ensure_branch "${branch}" || exit 1
|
ensure_branch "${branch}" || exit 1
|
||||||
git branch --set-upstream-to="origin/${branch}" "${branch}" 2>/dev/null || true
|
git branch --set-upstream-to="origin/${branch}" "${branch}" 2>/dev/null || true
|
||||||
|
|
||||||
# 2) 로컬 미커밋 변경이 pull 을 막으면 stash
|
# 2) 로컬 미커밋 변경이 pull 을 막으면 stash
|
||||||
if repo_is_dirty; then
|
if repo_is_dirty; then
|
||||||
log " 로컬 변경 stash 후 원격 반영..."
|
log " 로컬 변경 stash 후 원격 반영..."
|
||||||
git stash push -u -m "git_fetch_all auto-stash $(date '+%Y-%m-%d %H:%M:%S')" || true
|
git stash push -u -m "git_fetch_all auto-stash $(date '+%Y-%m-%d %H:%M:%S')" || true
|
||||||
stashed=1
|
stashed=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 3) GitHub 변경사항 merge (ff → rebase → merge)
|
# 3) GitHub 변경사항 merge (ff → rebase → merge)
|
||||||
if [[ "$(git rev-parse HEAD)" != "$(git rev-parse "origin/${branch}")" ]]; then
|
if [[ "$(git rev-parse HEAD)" != "$(git rev-parse "origin/${branch}")" ]]; then
|
||||||
log " 원격 변경 merge: origin/${branch}"
|
log " 원격 변경 merge: origin/${branch}"
|
||||||
if git merge-base --is-ancestor HEAD "origin/${branch}" 2>/dev/null; then
|
if git merge-base --is-ancestor HEAD "origin/${branch}" 2>/dev/null; then
|
||||||
git merge --ff-only "origin/${branch}"
|
git merge --ff-only "origin/${branch}"
|
||||||
else
|
else
|
||||||
if ! git pull --rebase origin "${branch}"; then
|
if ! git pull --rebase origin "${branch}"; then
|
||||||
warn "${path} — rebase 실패, merge 로 재시도"
|
warn "${path} — rebase 실패, merge 로 재시도"
|
||||||
git rebase --abort 2>/dev/null || true
|
git rebase --abort 2>/dev/null || true
|
||||||
if ! git pull --no-rebase origin "${branch}"; then
|
if ! git pull --no-rebase origin "${branch}"; then
|
||||||
warn "${path} — merge 충돌. 수동 해결 필요"
|
warn "${path} — merge 충돌. 수동 해결 필요"
|
||||||
git status -sb | sed 's/^/ /'
|
git status -sb | sed 's/^/ /'
|
||||||
if [[ "${stashed}" -eq 1 ]]; then
|
if [[ "${stashed}" -eq 1 ]]; then
|
||||||
git stash pop || true
|
git stash pop || true
|
||||||
fi
|
fi
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
ok "${path} 원격 반영 $(git log -1 --oneline)"
|
ok "${path} 원격 반영 $(git log -1 --oneline)"
|
||||||
else
|
else
|
||||||
log " 원격과 동일 (fetch 완료)"
|
log " 원격과 동일 (fetch 완료)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 4) stash 복원
|
# 4) stash 복원
|
||||||
if [[ "${stashed}" -eq 1 ]]; then
|
if [[ "${stashed}" -eq 1 ]]; then
|
||||||
log " stash 복원..."
|
log " stash 복원..."
|
||||||
if ! git stash pop; then
|
if ! git stash pop; then
|
||||||
warn "${path} — stash pop 충돌. 수동 해결 후 commit/push"
|
warn "${path} — stash pop 충돌. 수동 해결 후 commit/push"
|
||||||
git status -sb | sed 's/^/ /'
|
git status -sb | sed 's/^/ /'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 5) 로컬 수정사항 commit (exdev 주소는 복원 후·검증 통과 시에만)
|
# 5) 로컬 수정사항 commit (exdev 주소는 복원 후·검증 통과 시에만)
|
||||||
if $DO_COMMIT && repo_is_dirty; then
|
if $DO_COMMIT && repo_is_dirty; then
|
||||||
log " 로컬 변경 commit..."
|
log " 로컬 변경 commit..."
|
||||||
# push 전에 운영 WAS/RAG/Mongo 기본 주소 복원 (exdev 주소는 start-all-server.sh ENV 전용)
|
# push 전에 운영 WAS/RAG/Mongo 기본 주소 복원 (exdev 주소는 start-all-server.sh ENV 전용)
|
||||||
restore_production_endpoints_before_commit "${path}"
|
restore_production_endpoints_before_commit "${path}"
|
||||||
if ! assert_no_exdev_endpoints_for_push "${path}"; then
|
if ! assert_no_exdev_endpoints_for_push "${path}"; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log " 운영 엔드포인트 기본값 유지: WAS ${PROD_WAS_API} / Mongo ${PROD_WAS_HOST}"
|
log " 운영 엔드포인트 기본값 유지: WAS ${PROD_WAS_API} / Mongo ${PROD_WAS_HOST}"
|
||||||
git add -A
|
git add -A
|
||||||
# .env 등 ignore 대상이 스테이징되지 않도록 한 번 더 정리
|
# .env 등 ignore 대상이 스테이징되지 않도록 한 번 더 정리
|
||||||
git reset HEAD -- .env .env.local 2>/dev/null || true
|
git reset HEAD -- .env .env.local 2>/dev/null || true
|
||||||
if git diff --cached --quiet; then
|
if git diff --cached --quiet; then
|
||||||
log " staged 변경 없음 (ignore 된 파일만 있을 수 있음)"
|
log " staged 변경 없음 (ignore 된 파일만 있을 수 있음)"
|
||||||
else
|
else
|
||||||
# staged diff 에 exdev 호스트가 남아 있으면 push 금지
|
# staged diff 에 exdev 호스트가 남아 있으면 push 금지
|
||||||
if git diff --cached -U0 | grep -E '^\+' | grep -qE '127\.0\.0\.1:(27017|8086|28012)|host\.docker\.internal|EXDEV_LOCAL=true'; then
|
if git diff --cached -U0 | grep -E '^\+' | grep -qE '127\.0\.0\.1:(27017|8086|28012)|host\.docker\.internal|EXDEV_LOCAL=true'; then
|
||||||
warn "${path}: staged diff 에 개발서버 주소가 포함됨 — commit 중단"
|
warn "${path}: staged diff 에 개발서버 주소가 포함됨 — commit 중단"
|
||||||
git diff --cached --stat | sed 's/^/ /'
|
git diff --cached --stat | sed 's/^/ /'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
git commit -m "$(cat <<EOF
|
git commit -m "$(cat <<EOF
|
||||||
sync: monorepo local updates ($(date '+%Y-%m-%d %H:%M'))
|
sync: monorepo local updates ($(date '+%Y-%m-%d %H:%M'))
|
||||||
|
|
||||||
git_fetch_all.sh 로 chatbot2.0-agent 동기화 후 로컬 수정을 반영한다.
|
git_fetch_all.sh 로 chatbot2.0-agent 동기화 후 로컬 수정을 반영한다.
|
||||||
EOF
|
EOF
|
||||||
)"
|
)"
|
||||||
ok "${path} commit $(git log -1 --oneline)"
|
ok "${path} commit $(git log -1 --oneline)"
|
||||||
fi
|
fi
|
||||||
elif ! $DO_COMMIT && repo_is_dirty; then
|
elif ! $DO_COMMIT && repo_is_dirty; then
|
||||||
log " [--no-commit] 미커밋 변경 유지 (운영 주소 복원 미적용)"
|
log " [--no-commit] 미커밋 변경 유지 (운영 주소 복원 미적용)"
|
||||||
git status -sb | sed 's/^/ /'
|
git status -sb | sed 's/^/ /'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 6) push (chatbot2.0-agent 만) — push 직전 운영 주소 재검증
|
# 6) push (chatbot2.0-agent 만) — push 직전 운영 주소 재검증
|
||||||
if $DO_PUSH; then
|
if $DO_PUSH; then
|
||||||
restore_production_endpoints_before_commit "${path}"
|
restore_production_endpoints_before_commit "${path}"
|
||||||
if ! assert_no_exdev_endpoints_for_push "${path}"; then
|
if ! assert_no_exdev_endpoints_for_push "${path}"; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# 복원으로 생긴 미커밋이 있으면 반영
|
# 복원으로 생긴 미커밋이 있으면 반영
|
||||||
if $DO_COMMIT && repo_is_dirty; then
|
if $DO_COMMIT && repo_is_dirty; then
|
||||||
git add -A
|
git add -A
|
||||||
git reset HEAD -- .env .env.local 2>/dev/null || true
|
git reset HEAD -- .env .env.local 2>/dev/null || true
|
||||||
if ! git diff --cached --quiet; then
|
if ! git diff --cached --quiet; then
|
||||||
git commit -m "$(cat <<EOF
|
git commit -m "$(cat <<EOF
|
||||||
chore: restore production endpoints before push
|
chore: restore production endpoints before push
|
||||||
|
|
||||||
git_fetch_all.sh — exdev 런타임 주소를 커밋에서 제거한다.
|
git_fetch_all.sh — exdev 런타임 주소를 커밋에서 제거한다.
|
||||||
EOF
|
EOF
|
||||||
)"
|
)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
ahead="$(git rev-list --count "origin/${branch}..HEAD" 2>/dev/null || echo 0)"
|
ahead="$(git rev-list --count "origin/${branch}..HEAD" 2>/dev/null || echo 0)"
|
||||||
if [[ "${ahead}" != "0" ]]; then
|
if [[ "${ahead}" != "0" ]]; then
|
||||||
log " push origin ${branch} (ahead ${ahead})..."
|
log " push origin ${branch} (ahead ${ahead})..."
|
||||||
if git push origin "${branch}"; then
|
if git push origin "${branch}"; then
|
||||||
ok "${path} push 완료"
|
ok "${path} push 완료"
|
||||||
else
|
else
|
||||||
warn "${path} — push 실패 (대용량 파일/권한 등). 로그 확인"
|
warn "${path} — push 실패 (대용량 파일/권한 등). 로그 확인"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log " push 생략 (원격과 동일)"
|
log " push 생략 (원격과 동일)"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log " [--no-push] push 생략"
|
log " [--no-push] push 생략"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
new="$(git rev-parse HEAD)"
|
new="$(git rev-parse HEAD)"
|
||||||
log " HEAD ${old:0:7} → ${new:0:7} $(git log -1 --oneline)"
|
log " HEAD ${old:0:7} → ${new:0:7} $(git log -1 --oneline)"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
failures=0
|
failures=0
|
||||||
for path in "${TARGET_PATHS[@]}"; do
|
for path in "${TARGET_PATHS[@]}"; do
|
||||||
if ! sync_one "${path}"; then
|
if ! sync_one "${path}"; then
|
||||||
failures=$((failures + 1))
|
failures=$((failures + 1))
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
done
|
done
|
||||||
|
|
||||||
if ! $DRY_RUN; then
|
if ! $DRY_RUN; then
|
||||||
restore_monorepo_overlays
|
restore_monorepo_overlays
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "=========================================="
|
log "=========================================="
|
||||||
log "submodule 상태:"
|
log "submodule 상태:"
|
||||||
git submodule status 2>/dev/null || true
|
git submodule status 2>/dev/null || true
|
||||||
for path in "${TARGET_PATHS[@]}"; do
|
for path in "${TARGET_PATHS[@]}"; do
|
||||||
if submodule_is_cloned "${path}"; then
|
if submodule_is_cloned "${path}"; then
|
||||||
printf " %-36s %s\n" "${path}" "$(git -C "${ROOT_DIR}/${path}" log -1 --oneline 2>/dev/null || echo '?')"
|
printf " %-36s %s\n" "${path}" "$(git -C "${ROOT_DIR}/${path}" log -1 --oneline 2>/dev/null || echo '?')"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
log "=========================================="
|
log "=========================================="
|
||||||
|
|
||||||
if [[ ${failures} -gt 0 ]]; then
|
if [[ ${failures} -gt 0 ]]; then
|
||||||
warn "실패 ${failures}개 — 로그 확인"
|
warn "실패 ${failures}개 — 로그 확인"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $DRY_RUN; then
|
if $DRY_RUN; then
|
||||||
log "완료 — dry-run (변경 없음)"
|
log "완료 — dry-run (변경 없음)"
|
||||||
elif $DO_PUSH; then
|
elif $DO_PUSH; then
|
||||||
log "완료 — ${TARGET_BRANCH}: fetch/merge → commit → push"
|
log "완료 — ${TARGET_BRANCH}: fetch/merge → commit → push"
|
||||||
else
|
else
|
||||||
log "완료 — ${TARGET_BRANCH}: fetch/merge$($DO_COMMIT && echo ' → commit' || true) (push 생략)"
|
log "완료 — ${TARGET_BRANCH}: fetch/merge$($DO_COMMIT && echo ' → commit' || true) (push 생략)"
|
||||||
fi
|
fi
|
||||||
log "monorepo 포인터 갱신: git add *-chatbot2.0-agent && git status"
|
log "monorepo 포인터 갱신: git add *-chatbot2.0-agent && git status"
|
||||||
|
|||||||
Regular → Executable
+3
-3
@@ -1,3 +1,3 @@
|
|||||||
run/
|
run/
|
||||||
logs/
|
logs/
|
||||||
*.pid
|
*.pid
|
||||||
|
|||||||
Regular → Executable
+109
-109
@@ -1,109 +1,109 @@
|
|||||||
# 로컬 개발 — exdev AI 연동
|
# 로컬 개발 — exdev AI 연동
|
||||||
|
|
||||||
로컬에서 **chatbotApi · chatbotApp · exAiChatBot · kakaoChatbotSkill** 을 실행하고,
|
로컬에서 **chatbotApi · chatbotApp · exAiChatBot · kakaoChatbotSkill** 을 실행하고,
|
||||||
**LLM / Embedding / Reranker** 는 SSH 터널로, **MongoDB / Qdrant** 는 `stock.exdev.co.kr` 원격 인스턴스를 사용합니다.
|
**LLM / Embedding / Reranker** 는 SSH 터널로, **MongoDB / Qdrant** 는 `stock.exdev.co.kr` 원격 인스턴스를 사용합니다.
|
||||||
|
|
||||||
## exdev AI 구조
|
## exdev AI 구조
|
||||||
|
|
||||||
| 포트 | 서비스 | API |
|
| 포트 | 서비스 | API |
|
||||||
|------|--------|-----|
|
|------|--------|-----|
|
||||||
| 16000 | MLX LLM | `/v1/chat/completions` |
|
| 16000 | MLX LLM | `/v1/chat/completions` |
|
||||||
| 16001 | Embedding (MPS) | `/embed` (`EMBED_API_STYLE=tei`) |
|
| 16001 | Embedding (MPS) | `/embed` (`EMBED_API_STYLE=tei`) |
|
||||||
| 16002 | Reranker | `/rerank` (`RERANK_API_STYLE=legacy`) |
|
| 16002 | Reranker | `/rerank` (`RERANK_API_STYLE=legacy`) |
|
||||||
|
|
||||||
`https://chatbot.exdev.co.kr` 은 RAG API URL이며 LLM 직접 URL이 아닙니다.
|
`https://chatbot.exdev.co.kr` 은 RAG API URL이며 LLM 직접 URL이 아닙니다.
|
||||||
|
|
||||||
## 한 번에 기동 / 중지
|
## 한 번에 기동 / 중지
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x local-dev/*.sh
|
chmod +x local-dev/*.sh
|
||||||
|
|
||||||
./local-dev/stop-all.sh # 먼저 중지
|
./local-dev/stop-all.sh # 먼저 중지
|
||||||
./local-dev/start-all.sh # 전체 기동 + 헬스체크
|
./local-dev/start-all.sh # 전체 기동 + 헬스체크
|
||||||
|
|
||||||
# 옵션
|
# 옵션
|
||||||
./local-dev/start-all.sh --no-tunnel # AI 터널이 이미 떠 있을 때
|
./local-dev/start-all.sh --no-tunnel # AI 터널이 이미 떠 있을 때
|
||||||
./local-dev/start-all.sh --skip-java # Docker(RAG + chatbotApp)만
|
./local-dev/start-all.sh --skip-java # Docker(RAG + chatbotApp)만
|
||||||
./local-dev/start-all.sh --no-build # RAG 이미지 빌드 생략
|
./local-dev/start-all.sh --no-build # RAG 이미지 빌드 생략
|
||||||
|
|
||||||
./local-dev/stop-all.sh --tunnel # SSH 터널까지 종료
|
./local-dev/stop-all.sh --tunnel # SSH 터널까지 종료
|
||||||
```
|
```
|
||||||
|
|
||||||
- RAG는 **`docker-compose.local.yml`** 사용 (Mac Docker `:28012` 포트 바인딩)
|
- RAG는 **`docker-compose.local.yml`** 사용 (Mac Docker `:28012` 포트 바인딩)
|
||||||
- Mongo: `stock.exdev.co.kr:27017` / Qdrant: `http://stock.exdev.co.kr:6333/dashboard`
|
- Mongo: `stock.exdev.co.kr:27017` / Qdrant: `http://stock.exdev.co.kr:6333/dashboard`
|
||||||
- 로컬 Mongo·Qdrant 컨테이너는 기동하지 않습니다
|
- 로컬 Mongo·Qdrant 컨테이너는 기동하지 않습니다
|
||||||
|
|
||||||
기동 후 UI: `http://localhost:8089/chatbot/app/`
|
기동 후 UI: `http://localhost:8089/chatbot/app/`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. exdev AI 기동 (서버에서 한 번)
|
## 1. exdev AI 기동 (서버에서 한 번)
|
||||||
|
|
||||||
exdev SSH 접속 후:
|
exdev SSH 접속 후:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash /Users/aidev/dev/exAIChatbot2.0/scripts/exdev/start-host-ai.sh
|
bash /Users/aidev/dev/exAIChatbot2.0/scripts/exdev/start-host-ai.sh
|
||||||
curl -s http://127.0.0.1:28012/health # llm/tei_embed/tei_rerank: true 확인
|
curl -s http://127.0.0.1:28012/health # llm/tei_embed/tei_rerank: true 확인
|
||||||
```
|
```
|
||||||
|
|
||||||
## 2. 로컬 SSH 터널
|
## 2. 로컬 SSH 터널
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x local-dev/start-exdev-ai-tunnel.sh
|
chmod +x local-dev/start-exdev-ai-tunnel.sh
|
||||||
./local-dev/start-exdev-ai-tunnel.sh
|
./local-dev/start-exdev-ai-tunnel.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
터널 확인:
|
터널 확인:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -s http://127.0.0.1:16000/v1/models | head
|
curl -s http://127.0.0.1:16000/v1/models | head
|
||||||
curl -s http://127.0.0.1:16001/health
|
curl -s http://127.0.0.1:16001/health
|
||||||
curl -s -X POST http://127.0.0.1:16002/rerank \
|
curl -s -X POST http://127.0.0.1:16002/rerank \
|
||||||
-H 'Content-Type: application/json' \
|
-H 'Content-Type: application/json' \
|
||||||
-d '{"query":"test","documents":["doc"]}'
|
-d '{"query":"test","documents":["doc"]}'
|
||||||
```
|
```
|
||||||
|
|
||||||
## 3. exAiChatBot .env
|
## 3. exAiChatBot .env
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp local-dev/env.exdev-ai.template exAiChatBot-chatbot2.0-agent/.env
|
cp local-dev/env.exdev-ai.template exAiChatBot-chatbot2.0-agent/.env
|
||||||
./local-dev/start-all.sh --skip-java --no-build # RAG만 (원격 Mongo/Qdrant)
|
./local-dev/start-all.sh --skip-java --no-build # RAG만 (원격 Mongo/Qdrant)
|
||||||
curl -s http://127.0.0.1:28012/health
|
curl -s http://127.0.0.1:28012/health
|
||||||
```
|
```
|
||||||
|
|
||||||
RAG 컨테이너는 `.env` 의 `MONGO_HOST` / `QDRANT_HOST` (= `stock.exdev.co.kr`) 로 원격 DB에 접속합니다.
|
RAG 컨테이너는 `.env` 의 `MONGO_HOST` / `QDRANT_HOST` (= `stock.exdev.co.kr`) 로 원격 DB에 접속합니다.
|
||||||
|
|
||||||
## 4. Java 서비스 + chatbotApp
|
## 4. Java 서비스 + chatbotApp
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# WAS (Mongo → stock.exdev.co.kr)
|
# WAS (Mongo → stock.exdev.co.kr)
|
||||||
cd chatbotApi-chatbot2.0-agent
|
cd chatbotApi-chatbot2.0-agent
|
||||||
export INTERNAL_TOOL_API_KEY=local-dev-key
|
export INTERNAL_TOOL_API_KEY=local-dev-key
|
||||||
export MONGODB_URI='mongodb://exDev:ehfhrhdtk!!@stock.exdev.co.kr:27017/chatbot?authSource=chatbot'
|
export MONGODB_URI='mongodb://exDev:ehfhrhdtk!!@stock.exdev.co.kr:27017/chatbot?authSource=chatbot'
|
||||||
export SKILL_INTERNAL_BASE_URL=http://127.0.0.1:8083
|
export SKILL_INTERNAL_BASE_URL=http://127.0.0.1:8083
|
||||||
./gradlew bootRun
|
./gradlew bootRun
|
||||||
|
|
||||||
# Skill
|
# Skill
|
||||||
cd kakaoChatbotSkill-chatbot2.0-agent
|
cd kakaoChatbotSkill-chatbot2.0-agent
|
||||||
export AGENT_MODE=agent
|
export AGENT_MODE=agent
|
||||||
export RAG_AGENT_CHAT_URL=http://127.0.0.1:28012/agent/chat
|
export RAG_AGENT_CHAT_URL=http://127.0.0.1:28012/agent/chat
|
||||||
export CHATBOT_API_BASE_URL=http://127.0.0.1:8086/api/
|
export CHATBOT_API_BASE_URL=http://127.0.0.1:8086/api/
|
||||||
export INTERNAL_TOOL_API_KEY=local-dev-key
|
export INTERNAL_TOOL_API_KEY=local-dev-key
|
||||||
./gradlew bootRun
|
./gradlew bootRun
|
||||||
|
|
||||||
# UI
|
# UI
|
||||||
cd chatbotApp-chatbot2.0-agent
|
cd chatbotApp-chatbot2.0-agent
|
||||||
CHATBOT_API_UPSTREAM=http://host.docker.internal:8083/web/ \
|
CHATBOT_API_UPSTREAM=http://host.docker.internal:8083/web/ \
|
||||||
CHATBOT_API_HOST=host.docker.internal ./start.sh
|
CHATBOT_API_HOST=host.docker.internal ./start.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## api_clients.py 스타일 변수
|
## api_clients.py 스타일 변수
|
||||||
|
|
||||||
| 변수 | exdev 값 | 설명 |
|
| 변수 | exdev 값 | 설명 |
|
||||||
|------|----------|------|
|
|------|----------|------|
|
||||||
| `EMBED_API_STYLE` | `tei` | `/embed` |
|
| `EMBED_API_STYLE` | `tei` | `/embed` |
|
||||||
| `RERANK_API_STYLE` | `legacy` | `/rerank` |
|
| `RERANK_API_STYLE` | `legacy` | `/rerank` |
|
||||||
| `EMBED_API_STYLE` | `openai` | 게이트웨이 `/v1/embeddings` |
|
| `EMBED_API_STYLE` | `openai` | 게이트웨이 `/v1/embeddings` |
|
||||||
| `RERANK_API_STYLE` | `gateway` | 게이트웨이 `/score` |
|
| `RERANK_API_STYLE` | `gateway` | 게이트웨이 `/score` |
|
||||||
|
|
||||||
로컬 exdev 연동 시 **`tei` + `legacy`** 조합을 사용합니다.
|
로컬 exdev 연동 시 **`tei` + `legacy`** 조합을 사용합니다.
|
||||||
|
|||||||
Regular → Executable
+53
-53
@@ -1,53 +1,53 @@
|
|||||||
# 로컬 Mac 개발용 (start-all.sh / stop-all.sh)
|
# 로컬 Mac 개발용 (start-all.sh / stop-all.sh)
|
||||||
# - network_mode:host 미사용 → :28012 / :28013 호스트 바인딩
|
# - network_mode:host 미사용 → :28012 / :28013 호스트 바인딩
|
||||||
# - Mongo / Qdrant 는 stock.exdev.co.kr (로컬 컨테이너 미기동)
|
# - Mongo / Qdrant 는 stock.exdev.co.kr (로컬 컨테이너 미기동)
|
||||||
# - AI 는 host.docker.internal 경유 SSH 터널 (.env)
|
# - AI 는 host.docker.internal 경유 SSH 터널 (.env)
|
||||||
name: exchatbot-local
|
name: exchatbot-local
|
||||||
|
|
||||||
services:
|
services:
|
||||||
api:
|
api:
|
||||||
image: ${RAG_API_IMAGE:-rag-api-slim:latest}
|
image: ${RAG_API_IMAGE:-rag-api-slim:latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: docker/service-slim.Dockerfile
|
dockerfile: docker/service-slim.Dockerfile
|
||||||
ports:
|
ports:
|
||||||
- "${RAG_API_PORT:-28012}:28012"
|
- "${RAG_API_PORT:-28012}:28012"
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
UVICORN_WORKERS: "${UVICORN_WORKERS:-2}"
|
UVICORN_WORKERS: "${UVICORN_WORKERS:-2}"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
- ./scripts:/app/scripts
|
- ./scripts:/app/scripts
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-sf", "http://localhost:28012/health"]
|
test: ["CMD", "curl", "-sf", "http://localhost:28012/health"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 12
|
retries: 12
|
||||||
start_period: 45s
|
start_period: 45s
|
||||||
|
|
||||||
admin:
|
admin:
|
||||||
image: ${RAG_API_IMAGE:-rag-api-slim:latest}
|
image: ${RAG_API_IMAGE:-rag-api-slim:latest}
|
||||||
ports:
|
ports:
|
||||||
- "${ADMIN_PORT:-28013}:28013"
|
- "${ADMIN_PORT:-28013}:28013"
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
command:
|
command:
|
||||||
- python
|
- python
|
||||||
- -m
|
- -m
|
||||||
- uvicorn
|
- uvicorn
|
||||||
- scripts.admin_service:app
|
- scripts.admin_service:app
|
||||||
- --host
|
- --host
|
||||||
- 0.0.0.0
|
- 0.0.0.0
|
||||||
- --port
|
- --port
|
||||||
- "28013"
|
- "28013"
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
- ./scripts:/app/scripts
|
- ./scripts:/app/scripts
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
Regular → Executable
+59
-59
@@ -1,59 +1,59 @@
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
# 로컬 Mac/Docker + exdev(chatbot.exdev.co.kr) 호스트 AI (SSH 터널)
|
# 로컬 Mac/Docker + exdev(chatbot.exdev.co.kr) 호스트 AI (SSH 터널)
|
||||||
# 사용법:
|
# 사용법:
|
||||||
# 1) ./local-dev/start-exdev-ai-tunnel.sh (별도 터미널 유지)
|
# 1) ./local-dev/start-exdev-ai-tunnel.sh (별도 터미널 유지)
|
||||||
# 2) cp local-dev/env.exdev-ai.template exAiChatBot-chatbot2.0-agent/.env
|
# 2) cp local-dev/env.exdev-ai.template exAiChatBot-chatbot2.0-agent/.env
|
||||||
# 3) exAiChatBot / chatbotApi / kakaoChatbotSkill / chatbotApp 기동
|
# 3) exAiChatBot / chatbotApi / kakaoChatbotSkill / chatbotApp 기동
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|
||||||
# ── exdev AI (Mac localhost:16000~16002 → SSH 터널) ──
|
# ── exdev AI (Mac localhost:16000~16002 → SSH 터널) ──
|
||||||
# Docker Desktop(Mac): host.docker.internal
|
# Docker Desktop(Mac): host.docker.internal
|
||||||
# Linux host network / 로컬 python: 127.0.0.1
|
# Linux host network / 로컬 python: 127.0.0.1
|
||||||
LLM_BASE_URL=http://host.docker.internal:16000
|
LLM_BASE_URL=http://host.docker.internal:16000
|
||||||
TEI_EMBED_URL=http://host.docker.internal:16001
|
TEI_EMBED_URL=http://host.docker.internal:16001
|
||||||
TEI_RERANK_URL=http://host.docker.internal:16002
|
TEI_RERANK_URL=http://host.docker.internal:16002
|
||||||
|
|
||||||
# exdev Mac Studio 실제 모델명 (curl http://127.0.0.1:16000/v1/models 참고)
|
# exdev Mac Studio 실제 모델명 (curl http://127.0.0.1:16000/v1/models 참고)
|
||||||
LLM_MODEL_NAME=mlx-community/Qwen2.5-7B-Instruct-4bit
|
LLM_MODEL_NAME=mlx-community/Qwen2.5-7B-Instruct-4bit
|
||||||
EMBED_MODEL_NAME=Qwen/Qwen3-Embedding-8B
|
EMBED_MODEL_NAME=Qwen/Qwen3-Embedding-8B
|
||||||
TEI_RERANK_MODEL=qwen3-reranker-4b
|
TEI_RERANK_MODEL=qwen3-reranker-4b
|
||||||
|
|
||||||
# exdev 호스트 AI API 스타일 (게이트웨이와 다름)
|
# exdev 호스트 AI API 스타일 (게이트웨이와 다름)
|
||||||
EMBED_API_STYLE=tei
|
EMBED_API_STYLE=tei
|
||||||
RERANK_API_STYLE=legacy
|
RERANK_API_STYLE=legacy
|
||||||
MODEL_VERIFY_SSL=false
|
MODEL_VERIFY_SSL=false
|
||||||
API_TIMEOUT=120
|
API_TIMEOUT=120
|
||||||
|
|
||||||
# 게이트웨이 키 불필요 (exdev 호스트 AI는 Bearer 없음)
|
# 게이트웨이 키 불필요 (exdev 호스트 AI는 Bearer 없음)
|
||||||
MODEL_API_KEY=
|
MODEL_API_KEY=
|
||||||
|
|
||||||
# ── exdev MongoDB / Qdrant (stock.exdev.co.kr, 로컬 미기동) ──
|
# ── exdev MongoDB / Qdrant (stock.exdev.co.kr, 로컬 미기동) ──
|
||||||
EXDEV_DATA_HOST=stock.exdev.co.kr
|
EXDEV_DATA_HOST=stock.exdev.co.kr
|
||||||
MONGO_HOST=stock.exdev.co.kr
|
MONGO_HOST=stock.exdev.co.kr
|
||||||
MONGO_PORT=27017
|
MONGO_PORT=27017
|
||||||
MONGO_USER=
|
MONGO_USER=
|
||||||
MONGO_PASSWORD=
|
MONGO_PASSWORD=
|
||||||
MONGO_DATABASE=chat_history
|
MONGO_DATABASE=chat_history
|
||||||
MONGO_COLLECTION=rag_conversations
|
MONGO_COLLECTION=rag_conversations
|
||||||
MONGO_FEEDBACK_DATABASE=chatbot
|
MONGO_FEEDBACK_DATABASE=chatbot
|
||||||
MONGO_FEEDBACK_COLLECTION=answer_feedback
|
MONGO_FEEDBACK_COLLECTION=answer_feedback
|
||||||
MONGO_IMPROVEMENT_COLLECTION=improvement_suggestions
|
MONGO_IMPROVEMENT_COLLECTION=improvement_suggestions
|
||||||
|
|
||||||
VECTOR_STORE=qdrant
|
VECTOR_STORE=qdrant
|
||||||
QDRANT_HOST=stock.exdev.co.kr
|
QDRANT_HOST=stock.exdev.co.kr
|
||||||
QDRANT_PORT=6333
|
QDRANT_PORT=6333
|
||||||
# stock.exdev.co.kr 운영 컬렉션 (8488 vectors, 2026-07)
|
# stock.exdev.co.kr 운영 컬렉션 (8488 vectors, 2026-07)
|
||||||
QDRANT_COLLECTION=qa_vectors_v2
|
QDRANT_COLLECTION=qa_vectors_v2
|
||||||
|
|
||||||
# chatbotApi (WAS) — stock MongoDB chatbot DB
|
# chatbotApi (WAS) — stock MongoDB chatbot DB
|
||||||
MONGODB_URI=mongodb://exDev:ehfhrhdtk!!@stock.exdev.co.kr:27017/chatbot?authSource=chatbot&heartbeatFrequencyMS=30000&minPoolSize=3&maxIdleTimeMS=1800000
|
MONGODB_URI=mongodb://exDev:ehfhrhdtk!!@stock.exdev.co.kr:27017/chatbot?authSource=chatbot&heartbeatFrequencyMS=30000&minPoolSize=3&maxIdleTimeMS=1800000
|
||||||
|
|
||||||
|
|
||||||
# ── 로컬 WAS / Skill 연동 ──
|
# ── 로컬 WAS / Skill 연동 ──
|
||||||
CHATBOT_API_BASE_URL=http://127.0.0.1:8086/api
|
CHATBOT_API_BASE_URL=http://127.0.0.1:8086/api
|
||||||
INTERNAL_TOOL_API_KEY=local-dev-key
|
INTERNAL_TOOL_API_KEY=local-dev-key
|
||||||
AGENT_MAX_ROUNDS=6
|
AGENT_MAX_ROUNDS=6
|
||||||
CHATBOT_TOOL_TIMEOUT=60
|
CHATBOT_TOOL_TIMEOUT=60
|
||||||
|
|
||||||
ADMIN_PORT=28013
|
ADMIN_PORT=28013
|
||||||
UVICORN_WORKERS=2
|
UVICORN_WORKERS=2
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Windows (Git Bash) helper for ./start-all-server.sh
|
# Windows (Git Bash) helper for ./start-all-server.sh
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
export PATH="${ROOT_DIR}/local-dev/bin:/c/Program Files/nodejs:/c/Program Files/Git/usr/bin:${PATH}"
|
export PATH="${ROOT_DIR}/local-dev/bin:/c/Program Files/nodejs:/c/Program Files/Git/usr/bin:${PATH}"
|
||||||
export GIT_SSH_COMMAND="${GIT_SSH_COMMAND:-ssh -o BatchMode=yes -o ConnectTimeout=20}"
|
export GIT_SSH_COMMAND="${GIT_SSH_COMMAND:-ssh -o BatchMode=yes -o ConnectTimeout=20}"
|
||||||
# Git Bash/MSYS 가 /chatbot/app 같은 env 를 Windows 경로로 바꾸지 않게
|
# Git Bash/MSYS 가 /chatbot/app 같은 env 를 Windows 경로로 바꾸지 않게
|
||||||
export MSYS_NO_PATHCONV=1
|
export MSYS_NO_PATHCONV=1
|
||||||
export MSYS2_ARG_CONV_EXCL='*'
|
export MSYS2_ARG_CONV_EXCL='*'
|
||||||
|
|
||||||
# Prefer Windows OpenSSH (has the exdev key)
|
# Prefer Windows OpenSSH (has the exdev key)
|
||||||
if [[ -x /c/Windows/System32/OpenSSH/ssh.exe ]]; then
|
if [[ -x /c/Windows/System32/OpenSSH/ssh.exe ]]; then
|
||||||
export GIT_SSH_COMMAND="/c/Windows/System32/OpenSSH/ssh.exe -o BatchMode=yes -o ConnectTimeout=20"
|
export GIT_SSH_COMMAND="/c/Windows/System32/OpenSSH/ssh.exe -o BatchMode=yes -o ConnectTimeout=20"
|
||||||
export PATH="/c/Windows/System32/OpenSSH:${PATH}"
|
export PATH="/c/Windows/System32/OpenSSH:${PATH}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "${ROOT_DIR}"
|
cd "${ROOT_DIR}"
|
||||||
echo "[windows] node=$(command -v node) $(node -v 2>/dev/null || true)"
|
echo "[windows] node=$(command -v node) $(node -v 2>/dev/null || true)"
|
||||||
echo "[windows] npm=$(command -v npm)"
|
echo "[windows] npm=$(command -v npm)"
|
||||||
echo "[windows] rsync=$(command -v rsync)"
|
echo "[windows] rsync=$(command -v rsync)"
|
||||||
echo "[windows] ssh=$(command -v ssh)"
|
echo "[windows] ssh=$(command -v ssh)"
|
||||||
|
|
||||||
# smoke checks
|
# smoke checks
|
||||||
ssh -o BatchMode=yes -o ConnectTimeout=15 aidev@chatbot.exdev.co.kr 'echo SSH_CHATBOT_OK'
|
ssh -o BatchMode=yes -o ConnectTimeout=15 aidev@chatbot.exdev.co.kr 'echo SSH_CHATBOT_OK'
|
||||||
git ls-remote origin HEAD >/dev/null
|
git ls-remote origin HEAD >/dev/null
|
||||||
echo "[windows] Gitea git OK"
|
echo "[windows] Gitea git OK"
|
||||||
|
|
||||||
exec bash ./start-all-server.sh "$@"
|
exec bash ./start-all-server.sh "$@"
|
||||||
|
|||||||
Regular → Executable
+23
-23
@@ -1,23 +1,23 @@
|
|||||||
run/
|
run/
|
||||||
logs/
|
logs/
|
||||||
*.pid
|
*.pid
|
||||||
|
|
||||||
# Qdrant / Mongo 데이터
|
# Qdrant / Mongo 데이터
|
||||||
exAiChatBot-chatbot2.0-agent/qdrant_data/
|
exAiChatBot-chatbot2.0-agent/qdrant_data/
|
||||||
exAiChatBot-chatbot2.0-agent/.env
|
exAiChatBot-chatbot2.0-agent/.env
|
||||||
local-dev/run/
|
local-dev/run/
|
||||||
|
|
||||||
# Java / Node build
|
# Java / Node build
|
||||||
**/build/
|
**/build/
|
||||||
**/.gradle/
|
**/.gradle/
|
||||||
**/node_modules/
|
**/node_modules/
|
||||||
chatbotApp-chatbot2.0-agent/public/
|
chatbotApp-chatbot2.0-agent/public/
|
||||||
chatbotApp-chatbot2.0-agent/public-*/
|
chatbotApp-chatbot2.0-agent/public-*/
|
||||||
|
|
||||||
# IDE / OS
|
# IDE / OS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.idea/
|
.idea/
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
# 스냅샷 (용량)
|
# 스냅샷 (용량)
|
||||||
local-dev/run/qdrant-snapshots/
|
local-dev/run/qdrant-snapshots/
|
||||||
|
|||||||
Regular → Executable
+153
-153
@@ -1,153 +1,153 @@
|
|||||||
# exdev 서버 배포 — exAichatbot Agent 2.0
|
# exdev 서버 배포 — exAichatbot Agent 2.0
|
||||||
|
|
||||||
`chatbot.exdev.co.kr` Mac Studio 서버에 Agent 2.0 스택(RAG + WAS + Skill + chatbotApp)을 배포합니다.
|
`chatbot.exdev.co.kr` Mac Studio 서버에 Agent 2.0 스택(RAG + WAS + Skill + chatbotApp)을 배포합니다.
|
||||||
|
|
||||||
## GitHub upstream (submodule)
|
## GitHub upstream (submodule)
|
||||||
|
|
||||||
4개 서비스 소스는 GitHub `KoreaExpressWayCorp` 저장소를 **git submodule**로 연결합니다.
|
4개 서비스 소스는 GitHub `KoreaExpressWayCorp` 저장소를 **git submodule**로 연결합니다.
|
||||||
|
|
||||||
| monorepo 경로 | GitHub | 브랜치 |
|
| monorepo 경로 | GitHub | 브랜치 |
|
||||||
|---------------|--------|--------|
|
|---------------|--------|--------|
|
||||||
| `chatbotApp-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/chatbotApp.git | `chatbot2.0-agent` |
|
| `chatbotApp-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/chatbotApp.git | `chatbot2.0-agent` |
|
||||||
| `chatbotApi-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/chatbotApi.git | `chatbot2.0-agent` |
|
| `chatbotApi-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/chatbotApi.git | `chatbot2.0-agent` |
|
||||||
| `exAiChatBot-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/exAiChatBot.git | `chatbot2.0-agent` |
|
| `exAiChatBot-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/exAiChatBot.git | `chatbot2.0-agent` |
|
||||||
| `kakaoChatbotSkill-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/kakaoChatbotSkill.git | `chatbot2.0-agent` |
|
| `kakaoChatbotSkill-chatbot2.0-agent` | https://github.com/KoreaExpressWayCorp/kakaoChatbotSkill.git | `chatbot2.0-agent` |
|
||||||
|
|
||||||
최초 clone:
|
최초 clone:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone --recurse-submodules ssh://aidev@github.exdev.co.kr:2222/aidev/exAichatbot_agent.git
|
git clone --recurse-submodules ssh://aidev@github.exdev.co.kr:2222/aidev/exAichatbot_agent.git
|
||||||
```
|
```
|
||||||
|
|
||||||
GitHub 최신 반영:
|
GitHub 최신 반영:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./git_fetch_all.sh # GitHub → 로컬 submodule fast-forward
|
./git_fetch_all.sh # GitHub → 로컬 submodule fast-forward
|
||||||
./git_fetch_all.sh --dry-run # 변경 예상만 확인
|
./git_fetch_all.sh --dry-run # 변경 예상만 확인
|
||||||
./git_fetch_all.sh --init # submodule 최초 clone 포함
|
./git_fetch_all.sh --init # submodule 최초 clone 포함
|
||||||
```
|
```
|
||||||
|
|
||||||
RAG Docker compose(`docker-compose.server.yml`)는 submodule 밖 **`server-dev/docker-compose.rag.server.yml`** 에 두고, 기동 시 `exAiChatBot-chatbot2.0-agent/`로 복사합니다.
|
RAG Docker compose(`docker-compose.server.yml`)는 submodule 밖 **`server-dev/docker-compose.rag.server.yml`** 에 두고, 기동 시 `exAiChatBot-chatbot2.0-agent/`로 복사합니다.
|
||||||
|
|
||||||
## 디렉터리
|
## 디렉터리
|
||||||
|
|
||||||
| 경로 (서버) | 용도 |
|
| 경로 (서버) | 용도 |
|
||||||
|-------------|------|
|
|-------------|------|
|
||||||
| `/Users/aidev/dev/exAichatbot_agent` | Git work tree (배포 소스) |
|
| `/Users/aidev/dev/exAichatbot_agent` | Git work tree (배포 소스) |
|
||||||
| `/Volumes/ADATA/git/exAichatbot_agent.git` | Gitea bare repo |
|
| `/Volumes/ADATA/git/exAichatbot_agent.git` | Gitea bare repo |
|
||||||
| `/Volumes/ADATA/git/deploy-exAichatbot_agent.sh` | push → 배포 스크립트 |
|
| `/Volumes/ADATA/git/deploy-exAichatbot_agent.sh` | push → 배포 스크립트 |
|
||||||
|
|
||||||
## 1회 설정 (서버)
|
## 1회 설정 (서버)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh aidev@chatbot.exdev.co.kr
|
ssh aidev@chatbot.exdev.co.kr
|
||||||
bash /Users/aidev/dev/exAichatbot_agent/server-dev/setup-gitea.sh
|
bash /Users/aidev/dev/exAichatbot_agent/server-dev/setup-gitea.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Gitea(`https://github.exdev.co.kr`)에서 **`exAichatbot_agent`** 저장소 생성 (Initialize unchecked).
|
Gitea(`https://github.exdev.co.kr`)에서 **`exAichatbot_agent`** 저장소 생성 (Initialize unchecked).
|
||||||
|
|
||||||
## 로컬 Mac → Gitea push → 서버 배포
|
## 로컬 Mac → Gitea push → 서버 배포
|
||||||
|
|
||||||
개발 Mac에서 **한 번에** Gitea 최신 반영 · 로컬 변경 commit/push · 서버 빌드·배포:
|
개발 Mac에서 **한 번에** Gitea 최신 반영 · 로컬 변경 commit/push · 서버 빌드·배포:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./start-all-server.sh
|
./start-all-server.sh
|
||||||
# = (push-to-gitea) Gitea fetch/merge → 로컬 commit → Gitea push → 원격 배포
|
# = (push-to-gitea) Gitea fetch/merge → 로컬 commit → Gitea push → 원격 배포
|
||||||
# 공식 GitHub push 없음
|
# 공식 GitHub push 없음
|
||||||
|
|
||||||
./git_fetch_all.sh
|
./git_fetch_all.sh
|
||||||
# = 공식 GitHub(KoreaExpressWayCorp) submodule sync/commit/push 전용
|
# = 공식 GitHub(KoreaExpressWayCorp) submodule sync/commit/push 전용
|
||||||
```
|
```
|
||||||
|
|
||||||
`push-to-gitea.sh` 는 `git_fetch_all.sh` 와 같이 **원격(Gitea) 변경을 먼저 merge** 한 뒤 로컬을 올립니다.
|
`push-to-gitea.sh` 는 `git_fetch_all.sh` 와 같이 **원격(Gitea) 변경을 먼저 merge** 한 뒤 로컬을 올립니다.
|
||||||
충돌 시 스크립트가 멈추므로 수동 해결 후 재실행하세요.
|
충돌 시 스크립트가 멈추므로 수동 해결 후 재실행하세요.
|
||||||
(서버 work tree에만 있고 Gitea에 없는 수정은 포함되지 않습니다 — 배포는 Gitea 기준입니다.)
|
(서버 work tree에만 있고 Gitea에 없는 수정은 포함되지 않습니다 — 배포는 Gitea 기준입니다.)
|
||||||
|
|
||||||
| 옵션 | 설명 |
|
| 옵션 | 설명 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| `--local` | 예전처럼 `local-dev/start-all.sh` 로컬 개발 모드 |
|
| `--local` | 예전처럼 `local-dev/start-all.sh` 로컬 개발 모드 |
|
||||||
| `--no-push` | Gitea push·원격 배포 생략 |
|
| `--no-push` | Gitea push·원격 배포 생략 |
|
||||||
| `--no-pull` | GitHub submodule fetch 생략 |
|
| `--no-pull` | GitHub submodule fetch 생략 |
|
||||||
| `--no-build` | Docker/Next 빌드 생략 (서버에서만 해당) |
|
| `--no-build` | Docker/Next 빌드 생략 (서버에서만 해당) |
|
||||||
|
|
||||||
수동 push만:
|
수동 push만:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./server-dev/push-to-gitea.sh
|
./server-dev/push-to-gitea.sh
|
||||||
./server-dev/push-to-gitea.sh --dry-run
|
./server-dev/push-to-gitea.sh --dry-run
|
||||||
```
|
```
|
||||||
|
|
||||||
**main push 시 자동:** `post-receive` → `deploy-exAichatbot_agent.sh` → Gitea checkout → `start-all-server.sh --no-pull --no-push`
|
**main push 시 자동:** `post-receive` → `deploy-exAichatbot_agent.sh` → Gitea checkout → `start-all-server.sh --no-pull --no-push`
|
||||||
(공식 GitHub `git_fetch_all` 은 deploy 경로에서 호출하지 않음)
|
(공식 GitHub `git_fetch_all` 은 deploy 경로에서 호출하지 않음)
|
||||||
|
|
||||||
서버에서 GitHub clone 이 안 되면 **로컬 `./start-all-server.sh`** 가 submodule rsync + chatbotApp 로컬 빌드 후 배포합니다.
|
서버에서 GitHub clone 이 안 되면 **로컬 `./start-all-server.sh`** 가 submodule rsync + chatbotApp 로컬 빌드 후 배포합니다.
|
||||||
|
|
||||||
배포 로그: `/Volumes/ADATA/logs/deploy/exAichatbot_agent.log`
|
배포 로그: `/Volumes/ADATA/logs/deploy/exAichatbot_agent.log`
|
||||||
|
|
||||||
## 로컬 → Gitea push (수동)
|
## 로컬 → Gitea push (수동)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd exChatbot_agent
|
cd exChatbot_agent
|
||||||
|
|
||||||
# Gitea (이 서버는 git@ 가 아닌 aidev@ 사용)
|
# Gitea (이 서버는 git@ 가 아닌 aidev@ 사용)
|
||||||
git remote add origin ssh://aidev@github.exdev.co.kr:2222/aidev/exAichatbot_agent.git
|
git remote add origin ssh://aidev@github.exdev.co.kr:2222/aidev/exAichatbot_agent.git
|
||||||
git push -u origin main
|
git push -u origin main
|
||||||
|
|
||||||
# 잘못된 예 (Permission denied):
|
# 잘못된 예 (Permission denied):
|
||||||
# git@github.exdev.co.kr:aidev/exAichatbot_agent.git
|
# git@github.exdev.co.kr:aidev/exAichatbot_agent.git
|
||||||
```
|
```
|
||||||
|
|
||||||
## 수동 기동 / 중지 (서버)
|
## 수동 기동 / 중지 (서버)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /Users/aidev/dev/exAichatbot_agent
|
cd /Users/aidev/dev/exAichatbot_agent
|
||||||
|
|
||||||
./server-dev/stop-all-server.sh
|
./server-dev/stop-all-server.sh
|
||||||
./server-dev/start-all-server.sh # Gitea checkout → GitHub submodule → 빌드 → 기동
|
./server-dev/start-all-server.sh # Gitea checkout → GitHub submodule → 빌드 → 기동
|
||||||
./server-dev/start-all-server.sh --no-build
|
./server-dev/start-all-server.sh --no-build
|
||||||
./server-dev/start-all-server.sh --no-pull # git 동기화 생략
|
./server-dev/start-all-server.sh --no-pull # git 동기화 생략
|
||||||
./server-dev/start-all-server.sh --no-push # Gitea push 생략 (서버 전용)
|
./server-dev/start-all-server.sh --no-push # Gitea push 생략 (서버 전용)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 스택 구성
|
## 스택 구성
|
||||||
|
|
||||||
| 서비스 | 포트 | URL |
|
| 서비스 | 포트 | URL |
|
||||||
|--------|------|-----|
|
|--------|------|-----|
|
||||||
| HTTPS UI (Caddy) | 443 | https://chatbot.exdev.co.kr/chatbot/app/ |
|
| HTTPS UI (Caddy) | 443 | https://chatbot.exdev.co.kr/chatbot/app/ |
|
||||||
| chatbotApp nginx | 8092 | 내부 |
|
| chatbotApp nginx | 8092 | 내부 |
|
||||||
| kakaoChatbotSkill | 8083 | /web/ask, /kakao/skill (카카오 웹훅) |
|
| kakaoChatbotSkill | 8083 | /web/ask, /kakao/skill (카카오 웹훅) |
|
||||||
| chatbotApi WAS | 8086 | /api |
|
| chatbotApi WAS | 8086 | /api |
|
||||||
| RAG API | 28012 | /agent/chat |
|
| RAG API | 28012 | /agent/chat |
|
||||||
| Vector Admin | 28013 | /chatbot/admin |
|
| Vector Admin | 28013 | /chatbot/admin |
|
||||||
| Qdrant | 6333 | REST |
|
| Qdrant | 6333 | REST |
|
||||||
| Oracle TROAD | 1521 | `localhost:1521/orcl2` (OPR_MAIN / test) |
|
| Oracle TROAD | 1521 | `localhost:1521/orcl2` (OPR_MAIN / test) |
|
||||||
| 호스트 AI | 16000~16002 | MLX LLM/Embed/Rerank |
|
| 호스트 AI | 16000~16002 | MLX LLM/Embed/Rerank |
|
||||||
|
|
||||||
## Oracle TROAD (교통정보)
|
## Oracle TROAD (교통정보)
|
||||||
|
|
||||||
- Docker Compose: `server-dev/docker-compose.oracle.yml` (`gvenzl/oracle-free:23-slim`, arm64 지원)
|
- Docker Compose: `server-dev/docker-compose.oracle.yml` (`gvenzl/oracle-free:23-slim`, arm64 지원)
|
||||||
- 상세: [`server-dev/oracle/README.md`](oracle/README.md)
|
- 상세: [`server-dev/oracle/README.md`](oracle/README.md)
|
||||||
- `start-all-server.sh` 기동 시 Oracle 컨테이너 자동 시작 + WAS에
|
- `start-all-server.sh` 기동 시 Oracle 컨테이너 자동 시작 + WAS에
|
||||||
`SPRING_DATASOURCE_TROAD_URL/USERNAME/PASSWORD` 를 **localhost** 로 ENV 주입
|
`SPRING_DATASOURCE_TROAD_URL/USERNAME/PASSWORD` 를 **localhost** 로 ENV 주입
|
||||||
(`application.yml` 운영 172.16.163.76 값은 파일에 그대로 둠 — `git_fetch_all.sh` push 시 복원·검증)
|
(`application.yml` 운영 172.16.163.76 값은 파일에 그대로 둠 — `git_fetch_all.sh` push 시 복원·검증)
|
||||||
- `stop-all-server.sh` 중지 시 자동 중지(데이터 볼륨 유지)
|
- `stop-all-server.sh` 중지 시 자동 중지(데이터 볼륨 유지)
|
||||||
- 업무 객체는 `server-dev/oracle/sql/*.sql` — 기동 후 비어 있으면 `oracle/apply-sql.sh` 가 자동 적용
|
- 업무 객체는 `server-dev/oracle/sql/*.sql` — 기동 후 비어 있으면 `oracle/apply-sql.sh` 가 자동 적용
|
||||||
- `OPR_MAIN.V_INCIDENT_FTMS` (돌발/정체 교통정보, 샘플 124건)
|
- `OPR_MAIN.V_INCIDENT_FTMS` (돌발/정체 교통정보, 샘플 124건)
|
||||||
- `TROAD_APP.V_ROUTE_NEW_NM` / `V_ROUTE_TRFC_VER001` / `TLISDEV.T_TRMB_CD_INFO01M1` (노선별 혼잡 — **기존 chatbotApi 조회 SQL 그대로**)
|
- `TROAD_APP.V_ROUTE_NEW_NM` / `V_ROUTE_TRFC_VER001` / `TLISDEV.T_TRMB_CD_INFO01M1` (노선별 혼잡 — **기존 chatbotApi 조회 SQL 그대로**)
|
||||||
- 옵션: `--skip-oracle`, `--keep-oracle`, `--purge-oracle`
|
- 옵션: `--skip-oracle`, `--keep-oracle`, `--purge-oracle`
|
||||||
|
|
||||||
## Qdrant 데이터
|
## Qdrant 데이터
|
||||||
|
|
||||||
- 최초 기동 시 `vector_count=0` 이면 레거시 `exAIChatbot2.0/exAiChatBot-chatbot2.0/qdrant_data` 를 자동 복사
|
- 최초 기동 시 `vector_count=0` 이면 레거시 `exAIChatbot2.0/exAiChatBot-chatbot2.0/qdrant_data` 를 자동 복사
|
||||||
- 이후 `qdrant_data/` 볼륨 영속 유지 (git 제외)
|
- 이후 `qdrant_data/` 볼륨 영속 유지 (git 제외)
|
||||||
|
|
||||||
## 환경변수
|
## 환경변수
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp server-dev/env.exdev-server.template exAiChatBot-chatbot2.0-agent/.env
|
cp server-dev/env.exdev-server.template exAiChatBot-chatbot2.0-agent/.env
|
||||||
```
|
```
|
||||||
|
|
||||||
## 레거시 스택
|
## 레거시 스택
|
||||||
|
|
||||||
`start-all-server.sh`는 포트 충돌 방지를 위해 `exAIChatbot2.0/remote-stop-chatbot.sh` 로 레거시 스택을 중지합니다.
|
`start-all-server.sh`는 포트 충돌 방지를 위해 `exAIChatbot2.0/remote-stop-chatbot.sh` 로 레거시 스택을 중지합니다.
|
||||||
유지하려면 `--skip-legacy-stop` 옵션을 사용하세요.
|
유지하려면 `--skip-legacy-stop` 옵션을 사용하세요.
|
||||||
|
|||||||
Regular → Executable
+154
-154
@@ -1,154 +1,154 @@
|
|||||||
# exdev 통합 HTTPS (443) — stock / chatbot(Agent) / bizcare / nationcompany / github / apex
|
# exdev 통합 HTTPS (443) — stock / chatbot(Agent) / bizcare / nationcompany / github / apex
|
||||||
# Agent 배포 시 chatbot-only Caddyfile 로 덮어써 다른 서브도메인이 깨진 것을 복구
|
# Agent 배포 시 chatbot-only Caddyfile 로 덮어써 다른 서브도메인이 깨진 것을 복구
|
||||||
{
|
{
|
||||||
email {$CADDY_ACME_EMAIL:admin@exdev.co.kr}
|
email {$CADDY_ACME_EMAIL:admin@exdev.co.kr}
|
||||||
auto_https disable_redirects
|
auto_https disable_redirects
|
||||||
}
|
}
|
||||||
|
|
||||||
(tls_certs) {
|
(tls_certs) {
|
||||||
tls /etc/caddy/certs/fullchain.pem /etc/caddy/certs/privkey.pem
|
tls /etc/caddy/certs/fullchain.pem /etc/caddy/certs/privkey.pem
|
||||||
}
|
}
|
||||||
|
|
||||||
(proxy_std) {
|
(proxy_std) {
|
||||||
flush_interval -1
|
flush_interval -1
|
||||||
transport http {
|
transport http {
|
||||||
read_timeout 120s
|
read_timeout 120s
|
||||||
write_timeout 120s
|
write_timeout 120s
|
||||||
versions 1.1 2
|
versions 1.1 2
|
||||||
}
|
}
|
||||||
header_up Host {host}
|
header_up Host {host}
|
||||||
header_up X-Real-IP {remote_host}
|
header_up X-Real-IP {remote_host}
|
||||||
header_up X-Forwarded-For {remote_host}
|
header_up X-Forwarded-For {remote_host}
|
||||||
header_up X-Forwarded-Proto {scheme}
|
header_up X-Forwarded-Proto {scheme}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── GoldenChart ───────────────────────────────────────────────────────────────
|
# ── GoldenChart ───────────────────────────────────────────────────────────────
|
||||||
https://{$STOCK_DOMAIN:stock.exdev.co.kr} {
|
https://{$STOCK_DOMAIN:stock.exdev.co.kr} {
|
||||||
import tls_certs
|
import tls_certs
|
||||||
handle {
|
handle {
|
||||||
reverse_proxy host.docker.internal:{$GOLDENCHART_HOST_PORT:80} {
|
reverse_proxy host.docker.internal:{$GOLDENCHART_HOST_PORT:80} {
|
||||||
import proxy_std
|
import proxy_std
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Chatbot Agent 2.0 ─────────────────────────────────────────────────────────
|
# ── Chatbot Agent 2.0 ─────────────────────────────────────────────────────────
|
||||||
https://{$CHATBOT_DOMAIN:chatbot.exdev.co.kr} {
|
https://{$CHATBOT_DOMAIN:chatbot.exdev.co.kr} {
|
||||||
import tls_certs
|
import tls_certs
|
||||||
|
|
||||||
# 업스트림 nginx 가 HTTP 로 absolute redirect 해서 http:// 로 떨어지지 않게 Caddy 에서 처리
|
# 업스트림 nginx 가 HTTP 로 absolute redirect 해서 http:// 로 떨어지지 않게 Caddy 에서 처리
|
||||||
redir / /chatbot/ai/ 302
|
redir / /chatbot/ai/ 302
|
||||||
|
|
||||||
handle /agent/* {
|
handle /agent/* {
|
||||||
reverse_proxy host.docker.internal:{$RAG_API_PORT:28012} {
|
reverse_proxy host.docker.internal:{$RAG_API_PORT:28012} {
|
||||||
transport http {
|
transport http {
|
||||||
read_timeout 120s
|
read_timeout 120s
|
||||||
write_timeout 120s
|
write_timeout 120s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handle /chatbot/admin* {
|
handle /chatbot/admin* {
|
||||||
uri strip_prefix /chatbot/admin
|
uri strip_prefix /chatbot/admin
|
||||||
reverse_proxy host.docker.internal:{$ADMIN_PORT:28013} {
|
reverse_proxy host.docker.internal:{$ADMIN_PORT:28013} {
|
||||||
transport http {
|
transport http {
|
||||||
read_timeout 120s
|
read_timeout 120s
|
||||||
write_timeout 120s
|
write_timeout 120s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handle /web/* {
|
handle /web/* {
|
||||||
reverse_proxy host.docker.internal:{$SKILL_PORT:8083} {
|
reverse_proxy host.docker.internal:{$SKILL_PORT:8083} {
|
||||||
transport http {
|
transport http {
|
||||||
read_timeout 120s
|
read_timeout 120s
|
||||||
write_timeout 120s
|
write_timeout 120s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# 카카오 오픈빌더 Skill 웹훅 (/kakao/skill, /oakak/skill)
|
# 카카오 오픈빌더 Skill 웹훅 (/kakao/skill, /oakak/skill)
|
||||||
handle /kakao/* {
|
handle /kakao/* {
|
||||||
reverse_proxy host.docker.internal:{$SKILL_PORT:8083} {
|
reverse_proxy host.docker.internal:{$SKILL_PORT:8083} {
|
||||||
transport http {
|
transport http {
|
||||||
read_timeout 120s
|
read_timeout 120s
|
||||||
write_timeout 120s
|
write_timeout 120s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handle /oakak/* {
|
handle /oakak/* {
|
||||||
reverse_proxy host.docker.internal:{$SKILL_PORT:8083} {
|
reverse_proxy host.docker.internal:{$SKILL_PORT:8083} {
|
||||||
transport http {
|
transport http {
|
||||||
read_timeout 120s
|
read_timeout 120s
|
||||||
write_timeout 120s
|
write_timeout 120s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# iOS 홈화면 Web Clip — MIME 를 Caddy에서 강제 (인앱/프록시에서 text 로 깨지는 것 방지)
|
# iOS 홈화면 Web Clip — MIME 를 Caddy에서 강제 (인앱/프록시에서 text 로 깨지는 것 방지)
|
||||||
handle /chatbot/ai/downloads/*.mobileconfig {
|
handle /chatbot/ai/downloads/*.mobileconfig {
|
||||||
header Content-Type application/x-apple-aspen-config
|
header Content-Type application/x-apple-aspen-config
|
||||||
header Content-Disposition inline
|
header Content-Disposition inline
|
||||||
header Cache-Control "no-cache, no-store, must-revalidate"
|
header Cache-Control "no-cache, no-store, must-revalidate"
|
||||||
reverse_proxy host.docker.internal:{$CHATBOT_APP_PORT:8092} {
|
reverse_proxy host.docker.internal:{$CHATBOT_APP_PORT:8092} {
|
||||||
import proxy_std
|
import proxy_std
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handle {
|
handle {
|
||||||
reverse_proxy host.docker.internal:{$CHATBOT_APP_PORT:8092} {
|
reverse_proxy host.docker.internal:{$CHATBOT_APP_PORT:8092} {
|
||||||
import proxy_std
|
import proxy_std
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── BizCare ───────────────────────────────────────────────────────────────────
|
# ── BizCare ───────────────────────────────────────────────────────────────────
|
||||||
https://{$BIZCARE_DOMAIN:bizcare.exdev.co.kr} {
|
https://{$BIZCARE_DOMAIN:bizcare.exdev.co.kr} {
|
||||||
tls /etc/caddy/certs/bizcare/fullchain.pem /etc/caddy/certs/bizcare/privkey.pem
|
tls /etc/caddy/certs/bizcare/fullchain.pem /etc/caddy/certs/bizcare/privkey.pem
|
||||||
handle {
|
handle {
|
||||||
reverse_proxy host.docker.internal:{$BIZCARE_HOST_PORT:83} {
|
reverse_proxy host.docker.internal:{$BIZCARE_HOST_PORT:83} {
|
||||||
import proxy_std
|
import proxy_std
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── ChannelONE (nationcompany) — TLS-ALPN ACME ────────────────────────────────
|
# ── ChannelONE (nationcompany) — TLS-ALPN ACME ────────────────────────────────
|
||||||
https://{$NATIONCOMPANY_DOMAIN:nationcompany.exdev.co.kr} {
|
https://{$NATIONCOMPANY_DOMAIN:nationcompany.exdev.co.kr} {
|
||||||
handle {
|
handle {
|
||||||
reverse_proxy host.docker.internal:{$NATIONCOMPANY_HOST_PORT:84} {
|
reverse_proxy host.docker.internal:{$NATIONCOMPANY_HOST_PORT:84} {
|
||||||
import proxy_std
|
import proxy_std
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Gitea (github.exdev.co.kr) ────────────────────────────────────────────────
|
# ── Gitea (github.exdev.co.kr) ────────────────────────────────────────────────
|
||||||
https://{$GITHUB_DOMAIN:github.exdev.co.kr} {
|
https://{$GITHUB_DOMAIN:github.exdev.co.kr} {
|
||||||
tls /etc/caddy/certs/github/fullchain.pem /etc/caddy/certs/github/privkey.pem
|
tls /etc/caddy/certs/github/fullchain.pem /etc/caddy/certs/github/privkey.pem
|
||||||
handle {
|
handle {
|
||||||
reverse_proxy host.docker.internal:{$GITEA_HOST_PORT:3000} {
|
reverse_proxy host.docker.internal:{$GITEA_HOST_PORT:3000} {
|
||||||
flush_interval -1
|
flush_interval -1
|
||||||
transport http {
|
transport http {
|
||||||
read_timeout 3600s
|
read_timeout 3600s
|
||||||
write_timeout 3600s
|
write_timeout 3600s
|
||||||
versions 1.1 2
|
versions 1.1 2
|
||||||
}
|
}
|
||||||
header_up Host {host}
|
header_up Host {host}
|
||||||
header_up X-Real-IP {remote_host}
|
header_up X-Real-IP {remote_host}
|
||||||
header_up X-Forwarded-For {remote_host}
|
header_up X-Forwarded-For {remote_host}
|
||||||
header_up X-Forwarded-Proto {scheme}
|
header_up X-Forwarded-Proto {scheme}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Legacy apex ───────────────────────────────────────────────────────────────
|
# ── Legacy apex ───────────────────────────────────────────────────────────────
|
||||||
https://{$HTTPS_DOMAIN:exdev.co.kr} {
|
https://{$HTTPS_DOMAIN:exdev.co.kr} {
|
||||||
import tls_certs
|
import tls_certs
|
||||||
@legacy_chatbot path /chatbot /chatbot/*
|
@legacy_chatbot path /chatbot /chatbot/*
|
||||||
handle @legacy_chatbot {
|
handle @legacy_chatbot {
|
||||||
redir https://{$CHATBOT_DOMAIN:chatbot.exdev.co.kr}{uri} permanent
|
redir https://{$CHATBOT_DOMAIN:chatbot.exdev.co.kr}{uri} permanent
|
||||||
}
|
}
|
||||||
handle {
|
handle {
|
||||||
redir https://{$STOCK_DOMAIN:stock.exdev.co.kr}{uri} permanent
|
redir https://{$STOCK_DOMAIN:stock.exdev.co.kr}{uri} permanent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+154
-154
@@ -1,154 +1,154 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# exAichatbot_agent — Gitea push → exdev 서버 빌드·배포
|
# exAichatbot_agent — Gitea push → exdev 서버 빌드·배포
|
||||||
# 설치: /Volumes/ADATA/git/deploy-exAichatbot_agent.sh
|
# 설치: /Volumes/ADATA/git/deploy-exAichatbot_agent.sh
|
||||||
# 호출: post-receive (main 브랜치 push)
|
# 호출: post-receive (main 브랜치 push)
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
GIT_DIR="${GIT_DIR:-/Volumes/ADATA/gitea/data/gitea-repositories/aidev/exaichatbot_agent.git}"
|
GIT_DIR="${GIT_DIR:-/Volumes/ADATA/gitea/data/gitea-repositories/aidev/exaichatbot_agent.git}"
|
||||||
WORK_TREE="${WORK_TREE:-/Users/aidev/dev/exAichatbot_agent}"
|
WORK_TREE="${WORK_TREE:-/Users/aidev/dev/exAichatbot_agent}"
|
||||||
BRANCH="${BRANCH:-main}"
|
BRANCH="${BRANCH:-main}"
|
||||||
DEPLOY_LOG="${DEPLOY_LOG:-/Volumes/ADATA/logs/deploy/exAichatbot_agent.log}"
|
DEPLOY_LOG="${DEPLOY_LOG:-/Volumes/ADATA/logs/deploy/exAichatbot_agent.log}"
|
||||||
LOG_TAG="[exAichatbot_agent-deploy]"
|
LOG_TAG="[exAichatbot_agent-deploy]"
|
||||||
|
|
||||||
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/Applications/Docker.app/Contents/Resources/bin:${PATH:-/usr/bin:/bin}"
|
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/Applications/Docker.app/Contents/Resources/bin:${PATH:-/usr/bin:/bin}"
|
||||||
|
|
||||||
mkdir -p "$(dirname "$DEPLOY_LOG")"
|
mkdir -p "$(dirname "$DEPLOY_LOG")"
|
||||||
exec >> "$DEPLOY_LOG" 2>&1
|
exec >> "$DEPLOY_LOG" 2>&1
|
||||||
|
|
||||||
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG $*"; }
|
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') $LOG_TAG $*"; }
|
||||||
fail() { log "[ERROR] $*"; exit 1; }
|
fail() { log "[ERROR] $*"; exit 1; }
|
||||||
|
|
||||||
LOCK_FILE="/tmp/exAichatbot_agent_deploy.lock"
|
LOCK_FILE="/tmp/exAichatbot_agent_deploy.lock"
|
||||||
if [[ -f "$LOCK_FILE" ]]; then
|
if [[ -f "$LOCK_FILE" ]]; then
|
||||||
LOCK_PID="$(cat "$LOCK_FILE" 2>/dev/null || echo "")"
|
LOCK_PID="$(cat "$LOCK_FILE" 2>/dev/null || echo "")"
|
||||||
if [[ -n "$LOCK_PID" ]] && kill -0 "$LOCK_PID" 2>/dev/null; then
|
if [[ -n "$LOCK_PID" ]] && kill -0 "$LOCK_PID" 2>/dev/null; then
|
||||||
fail "다른 배포 진행 중 (PID: $LOCK_PID)"
|
fail "다른 배포 진행 중 (PID: $LOCK_PID)"
|
||||||
fi
|
fi
|
||||||
rm -f "$LOCK_FILE"
|
rm -f "$LOCK_FILE"
|
||||||
fi
|
fi
|
||||||
echo $$ > "$LOCK_FILE"
|
echo $$ > "$LOCK_FILE"
|
||||||
DEPLOY_OK=false
|
DEPLOY_OK=false
|
||||||
trap 'rm -f "$LOCK_FILE"; if ! $DEPLOY_OK; then log "[ERROR] 배포 실패"; fi; log "락 해제"' EXIT
|
trap 'rm -f "$LOCK_FILE"; if ! $DEPLOY_OK; then log "[ERROR] 배포 실패"; fi; log "락 해제"' EXIT
|
||||||
|
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
--start-only) START_ONLY=true ;;
|
--start-only) START_ONLY=true ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
START_ONLY="${START_ONLY:-false}"
|
START_ONLY="${START_ONLY:-false}"
|
||||||
|
|
||||||
log "======================================================"
|
log "======================================================"
|
||||||
log " exAichatbot Agent 2.0 배포 시작"
|
log " exAichatbot Agent 2.0 배포 시작"
|
||||||
log " GIT_DIR : $GIT_DIR"
|
log " GIT_DIR : $GIT_DIR"
|
||||||
log " WORK_TREE : $WORK_TREE"
|
log " WORK_TREE : $WORK_TREE"
|
||||||
log " BRANCH : $BRANCH"
|
log " BRANCH : $BRANCH"
|
||||||
log " START_ONLY: $START_ONLY"
|
log " START_ONLY: $START_ONLY"
|
||||||
log "======================================================"
|
log "======================================================"
|
||||||
|
|
||||||
[[ -d "$GIT_DIR" ]] || fail "GIT_DIR 없음: $GIT_DIR"
|
[[ -d "$GIT_DIR" ]] || fail "GIT_DIR 없음: $GIT_DIR"
|
||||||
mkdir -p "$WORK_TREE"
|
mkdir -p "$WORK_TREE"
|
||||||
|
|
||||||
chmod +x "$WORK_TREE/server-dev/"*.sh 2>/dev/null || true
|
chmod +x "$WORK_TREE/server-dev/"*.sh 2>/dev/null || true
|
||||||
chmod +x "$WORK_TREE/git_fetch_all.sh" 2>/dev/null || true
|
chmod +x "$WORK_TREE/git_fetch_all.sh" 2>/dev/null || true
|
||||||
chmod +x "$WORK_TREE/chatbotApp-chatbot2.0-agent/build.sh" 2>/dev/null || true
|
chmod +x "$WORK_TREE/chatbotApp-chatbot2.0-agent/build.sh" 2>/dev/null || true
|
||||||
|
|
||||||
sync_worktree_submodules() {
|
sync_worktree_submodules() {
|
||||||
local tree="$1"
|
local tree="$1"
|
||||||
local path ready=0
|
local path ready=0
|
||||||
for path in chatbotApp-chatbot2.0-agent chatbotApi-chatbot2.0-agent \
|
for path in chatbotApp-chatbot2.0-agent chatbotApi-chatbot2.0-agent \
|
||||||
exAiChatBot-chatbot2.0-agent kakaoChatbotSkill-chatbot2.0-agent; do
|
exAiChatBot-chatbot2.0-agent kakaoChatbotSkill-chatbot2.0-agent; do
|
||||||
if [[ -f "${tree}/${path}/build.gradle" ]] || [[ -f "${tree}/${path}/build.sh" ]] \
|
if [[ -f "${tree}/${path}/build.gradle" ]] || [[ -f "${tree}/${path}/build.sh" ]] \
|
||||||
|| [[ -f "${tree}/${path}/docker/service-slim.Dockerfile" ]]; then
|
|| [[ -f "${tree}/${path}/docker/service-slim.Dockerfile" ]]; then
|
||||||
ready=$((ready + 1))
|
ready=$((ready + 1))
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [[ ${ready} -ge 4 ]]; then
|
if [[ ${ready} -ge 4 ]]; then
|
||||||
log "submodule 소스 이미 존재 (Gitea/rsync) — 공식 GitHub fetch 생략"
|
log "submodule 소스 이미 존재 (Gitea/rsync) — 공식 GitHub fetch 생략"
|
||||||
if [[ -f "${tree}/server-dev/docker-compose.rag.server.yml" ]]; then
|
if [[ -f "${tree}/server-dev/docker-compose.rag.server.yml" ]]; then
|
||||||
cp "${tree}/server-dev/docker-compose.rag.server.yml" \
|
cp "${tree}/server-dev/docker-compose.rag.server.yml" \
|
||||||
"${tree}/exAiChatBot-chatbot2.0-agent/docker-compose.server.yml" 2>/dev/null || true
|
"${tree}/exAiChatBot-chatbot2.0-agent/docker-compose.server.yml" 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
# 공식 GitHub 는 deploy 경로에서 절대 동기화/push 하지 않음.
|
# 공식 GitHub 는 deploy 경로에서 절대 동기화/push 하지 않음.
|
||||||
# 소스가 비어 있으면 로컬 Mac 의 rsync (sync-submodules-rsync.sh) 가 필요.
|
# 소스가 비어 있으면 로컬 Mac 의 rsync (sync-submodules-rsync.sh) 가 필요.
|
||||||
log "[WARN] submodule 소스 부족 (${ready}/4) — 공식 GitHub fetch 안 함. 로컬 rsync 필요"
|
log "[WARN] submodule 소스 부족 (${ready}/4) — 공식 GitHub fetch 안 함. 로컬 rsync 필요"
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve_java17_home() {
|
resolve_java17_home() {
|
||||||
local home="" candidate
|
local home="" candidate
|
||||||
for candidate in \
|
for candidate in \
|
||||||
"/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home" \
|
"/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home" \
|
||||||
"/usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home"; do
|
"/usr/local/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home"; do
|
||||||
if [[ -x "${candidate}/bin/java" ]]; then
|
if [[ -x "${candidate}/bin/java" ]]; then
|
||||||
home="${candidate}"
|
home="${candidate}"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [[ -z "${home}" ]] && /usr/libexec/java_home -v 17 >/dev/null 2>&1; then
|
if [[ -z "${home}" ]] && /usr/libexec/java_home -v 17 >/dev/null 2>&1; then
|
||||||
home="$(/usr/libexec/java_home -v 17)"
|
home="$(/usr/libexec/java_home -v 17)"
|
||||||
fi
|
fi
|
||||||
[[ -n "${home}" ]] || fail "Java 17 필요 — brew install openjdk@17"
|
[[ -n "${home}" ]] || fail "Java 17 필요 — brew install openjdk@17"
|
||||||
echo "${home}"
|
echo "${home}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 서비스 중지 전에 Java 컴파일만 검증 — 실패 시 가동 중인 스택을 유지한다.
|
# 서비스 중지 전에 Java 컴파일만 검증 — 실패 시 가동 중인 스택을 유지한다.
|
||||||
# Gitea post-receive / 비로그인 SSH 는 PATH 에 brew java 가 없고 /usr/bin/java 는 stub 이므로
|
# Gitea post-receive / 비로그인 SSH 는 PATH 에 brew java 가 없고 /usr/bin/java 는 stub 이므로
|
||||||
# JAVA_HOME 을 반드시 export 해야 gradlew 부트스트랩이 성공한다.
|
# JAVA_HOME 을 반드시 export 해야 gradlew 부트스트랩이 성공한다.
|
||||||
preflight_java_compile() {
|
preflight_java_compile() {
|
||||||
local java_home dir
|
local java_home dir
|
||||||
java_home="$(resolve_java17_home)"
|
java_home="$(resolve_java17_home)"
|
||||||
export JAVA_HOME="${java_home}"
|
export JAVA_HOME="${java_home}"
|
||||||
export PATH="${JAVA_HOME}/bin:/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}"
|
export PATH="${JAVA_HOME}/bin:/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}"
|
||||||
log "[Phase 0] Java 사전 컴파일 검증 (Java 17: ${JAVA_HOME})"
|
log "[Phase 0] Java 사전 컴파일 검증 (Java 17: ${JAVA_HOME})"
|
||||||
for dir in \
|
for dir in \
|
||||||
"${WORK_TREE}/kakaoChatbotSkill-chatbot2.0-agent" \
|
"${WORK_TREE}/kakaoChatbotSkill-chatbot2.0-agent" \
|
||||||
"${WORK_TREE}/chatbotApi-chatbot2.0-agent"; do
|
"${WORK_TREE}/chatbotApi-chatbot2.0-agent"; do
|
||||||
[[ -x "${dir}/gradlew" ]] || fail "gradlew 없음: ${dir}"
|
[[ -x "${dir}/gradlew" ]] || fail "gradlew 없음: ${dir}"
|
||||||
log " compileJava: $(basename "${dir}")"
|
log " compileJava: $(basename "${dir}")"
|
||||||
if ! (
|
if ! (
|
||||||
cd "${dir}"
|
cd "${dir}"
|
||||||
export JAVA_HOME
|
export JAVA_HOME
|
||||||
export PATH="${JAVA_HOME}/bin:${PATH}"
|
export PATH="${JAVA_HOME}/bin:${PATH}"
|
||||||
./gradlew -Dorg.gradle.java.home="${JAVA_HOME}" compileJava --quiet
|
./gradlew -Dorg.gradle.java.home="${JAVA_HOME}" compileJava --quiet
|
||||||
); then
|
); then
|
||||||
fail "사전 컴파일 실패: $(basename "${dir}") — 기존 서비스는 그대로 유지됨"
|
fail "사전 컴파일 실패: $(basename "${dir}") — 기존 서비스는 그대로 유지됨"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
log " ✅ Java 사전 컴파일 OK"
|
log " ✅ Java 사전 컴파일 OK"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ! $START_ONLY; then
|
if ! $START_ONLY; then
|
||||||
log "[Phase 2] checkout (Gitea work tree) — 공식 GitHub 미사용"
|
log "[Phase 2] checkout (Gitea work tree) — 공식 GitHub 미사용"
|
||||||
git --work-tree="$WORK_TREE" --git-dir="$GIT_DIR" checkout -f "$BRANCH"
|
git --work-tree="$WORK_TREE" --git-dir="$GIT_DIR" checkout -f "$BRANCH"
|
||||||
rm -f "$WORK_TREE/.git"
|
rm -f "$WORK_TREE/.git"
|
||||||
sync_worktree_submodules "$WORK_TREE"
|
sync_worktree_submodules "$WORK_TREE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
preflight_java_compile
|
preflight_java_compile
|
||||||
|
|
||||||
log "[Phase 1] stop-all-server.sh"
|
log "[Phase 1] stop-all-server.sh"
|
||||||
"$WORK_TREE/server-dev/stop-all-server.sh" --keep-caddy || true
|
"$WORK_TREE/server-dev/stop-all-server.sh" --keep-caddy || true
|
||||||
|
|
||||||
log "[Phase 3] .env 준비"
|
log "[Phase 3] .env 준비"
|
||||||
ENV_FILE="$WORK_TREE/exAiChatBot-chatbot2.0-agent/.env"
|
ENV_FILE="$WORK_TREE/exAiChatBot-chatbot2.0-agent/.env"
|
||||||
if [[ ! -f "$ENV_FILE" ]]; then
|
if [[ ! -f "$ENV_FILE" ]]; then
|
||||||
cp "$WORK_TREE/server-dev/env.exdev-server.template" "$ENV_FILE"
|
cp "$WORK_TREE/server-dev/env.exdev-server.template" "$ENV_FILE"
|
||||||
log ".env 생성 (env.exdev-server.template)"
|
log ".env 생성 (env.exdev-server.template)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "[Phase 4] start-all-server.sh (기동)"
|
log "[Phase 4] start-all-server.sh (기동)"
|
||||||
START_ARGS=(--skip-legacy-stop --no-pull --no-push)
|
START_ARGS=(--skip-legacy-stop --no-pull --no-push)
|
||||||
if $START_ONLY || [[ -f "$WORK_TREE/chatbotApp-chatbot2.0-agent/public/index.html" ]]; then
|
if $START_ONLY || [[ -f "$WORK_TREE/chatbotApp-chatbot2.0-agent/public/index.html" ]]; then
|
||||||
START_ARGS+=(--no-build)
|
START_ARGS+=(--no-build)
|
||||||
fi
|
fi
|
||||||
"$WORK_TREE/server-dev/start-all-server.sh" "${START_ARGS[@]}"
|
"$WORK_TREE/server-dev/start-all-server.sh" "${START_ARGS[@]}"
|
||||||
|
|
||||||
COMMIT="$(git --git-dir="$GIT_DIR" rev-parse --short HEAD 2>/dev/null || echo unknown)"
|
COMMIT="$(git --git-dir="$GIT_DIR" rev-parse --short HEAD 2>/dev/null || echo unknown)"
|
||||||
DEPLOY_OK=true
|
DEPLOY_OK=true
|
||||||
log "======================================================"
|
log "======================================================"
|
||||||
log " 배포 완료 — $COMMIT"
|
log " 배포 완료 — $COMMIT"
|
||||||
log " UI: https://chatbot.exdev.co.kr/chatbot/ai/"
|
log " UI: https://chatbot.exdev.co.kr/chatbot/ai/"
|
||||||
log "======================================================"
|
log "======================================================"
|
||||||
|
|||||||
Regular → Executable
+27
-27
@@ -1,27 +1,27 @@
|
|||||||
# Agent 2.0 HTTPS — chatbot.exdev.co.kr (443)
|
# Agent 2.0 HTTPS — chatbot.exdev.co.kr (443)
|
||||||
# 인증서: exAIChatbot2.0/docker/nginx/certs/ (기존 obtain-cert-exdev.sh)
|
# 인증서: exAIChatbot2.0/docker/nginx/certs/ (기존 obtain-cert-exdev.sh)
|
||||||
services:
|
services:
|
||||||
caddy-agent:
|
caddy-agent:
|
||||||
image: caddy:2-alpine
|
image: caddy:2-alpine
|
||||||
container_name: exaichatbot-agent-caddy
|
container_name: exaichatbot-agent-caddy
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "${NGINX_HTTPS_PORT:-443}:443"
|
- "${NGINX_HTTPS_PORT:-443}:443"
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
environment:
|
environment:
|
||||||
CHATBOT_DOMAIN: "${CHATBOT_DOMAIN:-chatbot.exdev.co.kr}"
|
CHATBOT_DOMAIN: "${CHATBOT_DOMAIN:-chatbot.exdev.co.kr}"
|
||||||
CHATBOT_APP_PORT: "${CHATBOT_APP_PORT:-8092}"
|
CHATBOT_APP_PORT: "${CHATBOT_APP_PORT:-8092}"
|
||||||
RAG_API_PORT: "${RAG_API_PORT:-28012}"
|
RAG_API_PORT: "${RAG_API_PORT:-28012}"
|
||||||
SKILL_PORT: "${SKILL_PORT:-8083}"
|
SKILL_PORT: "${SKILL_PORT:-8083}"
|
||||||
ADMIN_PORT: "${ADMIN_PORT:-28013}"
|
ADMIN_PORT: "${ADMIN_PORT:-28013}"
|
||||||
CADDY_ACME_EMAIL: "${CADDY_ACME_EMAIL:-admin@exdev.co.kr}"
|
CADDY_ACME_EMAIL: "${CADDY_ACME_EMAIL:-admin@exdev.co.kr}"
|
||||||
volumes:
|
volumes:
|
||||||
- ./caddy/Caddyfile.agent.exdev:/etc/caddy/Caddyfile:ro
|
- ./caddy/Caddyfile.agent.exdev:/etc/caddy/Caddyfile:ro
|
||||||
- "${LEGACY_CERTS_DIR:-/Users/aidev/dev/exAIChatbot2.0/docker/nginx/certs}:/etc/caddy/certs:ro"
|
- "${LEGACY_CERTS_DIR:-/Users/aidev/dev/exAIChatbot2.0/docker/nginx/certs}:/etc/caddy/certs:ro"
|
||||||
- exaichatbot-agent-caddy-data:/data
|
- exaichatbot-agent-caddy-data:/data
|
||||||
- exaichatbot-agent-caddy-config:/config
|
- exaichatbot-agent-caddy-config:/config
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
exaichatbot-agent-caddy-data:
|
exaichatbot-agent-caddy-data:
|
||||||
exaichatbot-agent-caddy-config:
|
exaichatbot-agent-caddy-config:
|
||||||
|
|||||||
Regular → Executable
+39
-39
@@ -1,39 +1,39 @@
|
|||||||
# exdev 개발서버 — TROAD용 Oracle (Docker)
|
# exdev 개발서버 — TROAD용 Oracle (Docker)
|
||||||
#
|
#
|
||||||
# chatbotApi application.yml 의 troad datasource 와 맞춤:
|
# chatbotApi application.yml 의 troad datasource 와 맞춤:
|
||||||
# jdbc:oracle:thin:@localhost:1521/orcl2
|
# jdbc:oracle:thin:@localhost:1521/orcl2
|
||||||
# username: OPR_MAIN
|
# username: OPR_MAIN
|
||||||
# password: test
|
# password: test
|
||||||
#
|
#
|
||||||
# 테이블 DDL 은 oracle/apply-sql.sh 로 적용한다.
|
# 테이블 DDL 은 oracle/apply-sql.sh 로 적용한다.
|
||||||
#
|
#
|
||||||
# 이미지: Oracle Database Free 23ai (linux/arm64 지원).
|
# 이미지: Oracle Database Free 23ai (linux/arm64 지원).
|
||||||
# 개발서버가 Apple Silicon(arm64) 이라 amd64 전용인 oracle-xe:21 은 사용할 수 없다.
|
# 개발서버가 Apple Silicon(arm64) 이라 amd64 전용인 oracle-xe:21 은 사용할 수 없다.
|
||||||
services:
|
services:
|
||||||
oracle-troad:
|
oracle-troad:
|
||||||
image: gvenzl/oracle-free:23-slim
|
image: gvenzl/oracle-free:23-slim
|
||||||
container_name: exaichatbot-agent-oracle-troad
|
container_name: exaichatbot-agent-oracle-troad
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "1521:1521"
|
- "1521:1521"
|
||||||
environment:
|
environment:
|
||||||
# SYS / SYSTEM
|
# SYS / SYSTEM
|
||||||
ORACLE_PASSWORD: ${ORACLE_SYS_PASSWORD:-OracleExdev!2026}
|
ORACLE_PASSWORD: ${ORACLE_SYS_PASSWORD:-OracleExdev!2026}
|
||||||
# PDB 서비스명 → JDBC .../orcl2
|
# PDB 서비스명 → JDBC .../orcl2
|
||||||
ORACLE_DATABASE: ORCL2
|
ORACLE_DATABASE: ORCL2
|
||||||
# chatbotApi troad 계정
|
# chatbotApi troad 계정
|
||||||
APP_USER: OPR_MAIN
|
APP_USER: OPR_MAIN
|
||||||
APP_USER_PASSWORD: ${ORACLE_TROAD_PASSWORD:-test}
|
APP_USER_PASSWORD: ${ORACLE_TROAD_PASSWORD:-test}
|
||||||
volumes:
|
volumes:
|
||||||
- oracle-troad-data:/opt/oracle/oradata
|
- oracle-troad-data:/opt/oracle/oradata
|
||||||
- ./oracle/init:/container-entrypoint-initdb.d:ro
|
- ./oracle/init:/container-entrypoint-initdb.d:ro
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "healthcheck.sh"]
|
test: ["CMD", "healthcheck.sh"]
|
||||||
interval: 20s
|
interval: 20s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 30
|
retries: 30
|
||||||
start_period: 90s
|
start_period: 90s
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
oracle-troad-data:
|
oracle-troad-data:
|
||||||
name: exaichatbot-agent-oracle-troad-data
|
name: exaichatbot-agent-oracle-troad-data
|
||||||
|
|||||||
Regular → Executable
+80
-80
@@ -1,80 +1,80 @@
|
|||||||
# exdev Mac Studio 서버 — Agent RAG (Mac Docker: 포트 매핑 필수, host network 미지원)
|
# exdev Mac Studio 서버 — Agent RAG (Mac Docker: 포트 매핑 필수, host network 미지원)
|
||||||
name: exaichatbot-agent
|
name: exaichatbot-agent
|
||||||
|
|
||||||
services:
|
services:
|
||||||
qdrant:
|
qdrant:
|
||||||
image: qdrant/qdrant:v1.18.2
|
image: qdrant/qdrant:v1.18.2
|
||||||
ports:
|
ports:
|
||||||
- "6333:6333"
|
- "6333:6333"
|
||||||
- "6334:6334"
|
- "6334:6334"
|
||||||
volumes:
|
volumes:
|
||||||
- ./qdrant_data:/qdrant/storage
|
- ./qdrant_data:/qdrant/storage
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
api:
|
api:
|
||||||
image: "${RAG_API_IMAGE:-rag-api-slim:latest}"
|
image: "${RAG_API_IMAGE:-rag-api-slim:latest}"
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: docker/service-slim.Dockerfile
|
dockerfile: docker/service-slim.Dockerfile
|
||||||
ports:
|
ports:
|
||||||
- "${RAG_API_PORT:-28012}:28012"
|
- "${RAG_API_PORT:-28012}:28012"
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
depends_on:
|
depends_on:
|
||||||
- qdrant
|
- qdrant
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
PYTHONUNBUFFERED: "1"
|
PYTHONUNBUFFERED: "1"
|
||||||
HTTP_PROXY: ""
|
HTTP_PROXY: ""
|
||||||
HTTPS_PROXY: ""
|
HTTPS_PROXY: ""
|
||||||
QDRANT_HOST: qdrant
|
QDRANT_HOST: qdrant
|
||||||
QDRANT_PORT: "6333"
|
QDRANT_PORT: "6333"
|
||||||
MONGO_HOST: host.docker.internal
|
MONGO_HOST: host.docker.internal
|
||||||
LLM_BASE_URL: http://host.docker.internal:16000
|
LLM_BASE_URL: http://host.docker.internal:16000
|
||||||
TEI_EMBED_URL: http://host.docker.internal:16001
|
TEI_EMBED_URL: http://host.docker.internal:16001
|
||||||
TEI_RERANK_URL: http://host.docker.internal:16002
|
TEI_RERANK_URL: http://host.docker.internal:16002
|
||||||
# exdev: 호스트 chatbotApi. 운영 IP(172.16.180.130)는 git_fetch_all 커밋 기본값에만 유지.
|
# exdev: 호스트 chatbotApi. 운영 IP(172.16.180.130)는 git_fetch_all 커밋 기본값에만 유지.
|
||||||
EXDEV_LOCAL: ${EXDEV_LOCAL:-true}
|
EXDEV_LOCAL: ${EXDEV_LOCAL:-true}
|
||||||
CHATBOT_API_BASE_URL: ${CHATBOT_API_BASE_URL:-http://host.docker.internal:8086/api}
|
CHATBOT_API_BASE_URL: ${CHATBOT_API_BASE_URL:-http://host.docker.internal:8086/api}
|
||||||
INTERNAL_TOOL_API_KEY: ${INTERNAL_TOOL_API_KEY:-exdev-agent-tool-key}
|
INTERNAL_TOOL_API_KEY: ${INTERNAL_TOOL_API_KEY:-exdev-agent-tool-key}
|
||||||
CHATBOT_TOOL_TIMEOUT: ${CHATBOT_TOOL_TIMEOUT:-60}
|
CHATBOT_TOOL_TIMEOUT: ${CHATBOT_TOOL_TIMEOUT:-60}
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
- ./scripts:/app/scripts
|
- ./scripts:/app/scripts
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-sf", "http://localhost:28012/health"]
|
test: ["CMD", "curl", "-sf", "http://localhost:28012/health"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 12
|
retries: 12
|
||||||
start_period: 60s
|
start_period: 60s
|
||||||
|
|
||||||
admin:
|
admin:
|
||||||
image: "${RAG_API_IMAGE:-rag-api-slim:latest}"
|
image: "${RAG_API_IMAGE:-rag-api-slim:latest}"
|
||||||
ports:
|
ports:
|
||||||
- "${ADMIN_PORT:-28013}:28013"
|
- "${ADMIN_PORT:-28013}:28013"
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
command:
|
command:
|
||||||
- python
|
- python
|
||||||
- -m
|
- -m
|
||||||
- uvicorn
|
- uvicorn
|
||||||
- scripts.admin_service:app
|
- scripts.admin_service:app
|
||||||
- --host
|
- --host
|
||||||
- 0.0.0.0
|
- 0.0.0.0
|
||||||
- --port
|
- --port
|
||||||
- "28013"
|
- "28013"
|
||||||
working_dir: /app
|
working_dir: /app
|
||||||
depends_on:
|
depends_on:
|
||||||
- qdrant
|
- qdrant
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
environment:
|
environment:
|
||||||
PYTHONUNBUFFERED: "1"
|
PYTHONUNBUFFERED: "1"
|
||||||
QDRANT_HOST: qdrant
|
QDRANT_HOST: qdrant
|
||||||
QDRANT_PORT: "6333"
|
QDRANT_PORT: "6333"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
- ./scripts:/app/scripts
|
- ./scripts:/app/scripts
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
Regular → Executable
+45
-45
@@ -1,45 +1,45 @@
|
|||||||
# exdev 서버(chatbot.exdev.co.kr) — Agent 2.0 스택
|
# exdev 서버(chatbot.exdev.co.kr) — Agent 2.0 스택
|
||||||
# cp server-dev/env.exdev-server.template exAiChatBot-chatbot2.0-agent/.env
|
# cp server-dev/env.exdev-server.template exAiChatBot-chatbot2.0-agent/.env
|
||||||
|
|
||||||
# ── 호스트 AI (Mac Studio MLX) ──
|
# ── 호스트 AI (Mac Studio MLX) ──
|
||||||
LLM_BASE_URL=http://127.0.0.1:16000
|
LLM_BASE_URL=http://127.0.0.1:16000
|
||||||
TEI_EMBED_URL=http://127.0.0.1:16001
|
TEI_EMBED_URL=http://127.0.0.1:16001
|
||||||
TEI_RERANK_URL=http://127.0.0.1:16002
|
TEI_RERANK_URL=http://127.0.0.1:16002
|
||||||
LLM_MODEL_NAME=mlx-community/Qwen2.5-7B-Instruct-4bit
|
LLM_MODEL_NAME=mlx-community/Qwen2.5-7B-Instruct-4bit
|
||||||
EMBED_MODEL_NAME=Qwen/Qwen3-Embedding-8B
|
EMBED_MODEL_NAME=Qwen/Qwen3-Embedding-8B
|
||||||
TEI_RERANK_MODEL=qwen3-reranker-4b
|
TEI_RERANK_MODEL=qwen3-reranker-4b
|
||||||
EMBED_API_STYLE=tei
|
EMBED_API_STYLE=tei
|
||||||
RERANK_API_STYLE=legacy
|
RERANK_API_STYLE=legacy
|
||||||
MODEL_VERIFY_SSL=false
|
MODEL_VERIFY_SSL=false
|
||||||
API_TIMEOUT=120
|
API_TIMEOUT=120
|
||||||
MODEL_API_KEY=
|
MODEL_API_KEY=
|
||||||
|
|
||||||
# ── MongoDB ──
|
# ── MongoDB ──
|
||||||
MONGO_HOST=127.0.0.1
|
MONGO_HOST=127.0.0.1
|
||||||
MONGO_PORT=27017
|
MONGO_PORT=27017
|
||||||
MONGO_USER=exlink
|
MONGO_USER=exlink
|
||||||
MONGO_PASSWORD=!wkcproqkf1
|
MONGO_PASSWORD=!wkcproqkf1
|
||||||
MONGO_DATABASE=chat_history
|
MONGO_DATABASE=chat_history
|
||||||
MONGO_COLLECTION=rag_conversations
|
MONGO_COLLECTION=rag_conversations
|
||||||
MONGO_FEEDBACK_DATABASE=chatbot
|
MONGO_FEEDBACK_DATABASE=chatbot
|
||||||
MONGO_FEEDBACK_COLLECTION=answer_feedback
|
MONGO_FEEDBACK_COLLECTION=answer_feedback
|
||||||
MONGO_IMPROVEMENT_COLLECTION=improvement_suggestions
|
MONGO_IMPROVEMENT_COLLECTION=improvement_suggestions
|
||||||
|
|
||||||
# ── Qdrant ──
|
# ── Qdrant ──
|
||||||
VECTOR_STORE=qdrant
|
VECTOR_STORE=qdrant
|
||||||
QDRANT_HOST=127.0.0.1
|
QDRANT_HOST=127.0.0.1
|
||||||
QDRANT_PORT=6333
|
QDRANT_PORT=6333
|
||||||
QDRANT_COLLECTION=qa_vectors_v2
|
QDRANT_COLLECTION=qa_vectors_v2
|
||||||
|
|
||||||
# ── Agent / WAS (Docker → 호스트 chatbotApi) ──
|
# ── Agent / WAS (Docker → 호스트 chatbotApi) ──
|
||||||
# EXDEV_LOCAL=true 이면 운영 WAS(172.16.180.130) 호출을 차단한다.
|
# EXDEV_LOCAL=true 이면 운영 WAS(172.16.180.130) 호출을 차단한다.
|
||||||
# (GitHub push 시 git_fetch_all.sh 가 커밋 파일의 운영 기본 주소를 복원한다.)
|
# (GitHub push 시 git_fetch_all.sh 가 커밋 파일의 운영 기본 주소를 복원한다.)
|
||||||
AGENT_MODE=agent
|
AGENT_MODE=agent
|
||||||
AGENT_MAX_ROUNDS=6
|
AGENT_MAX_ROUNDS=6
|
||||||
EXDEV_LOCAL=true
|
EXDEV_LOCAL=true
|
||||||
CHATBOT_API_BASE_URL=http://host.docker.internal:8086/api
|
CHATBOT_API_BASE_URL=http://host.docker.internal:8086/api
|
||||||
INTERNAL_TOOL_API_KEY=exdev-agent-tool-key
|
INTERNAL_TOOL_API_KEY=exdev-agent-tool-key
|
||||||
CHATBOT_TOOL_TIMEOUT=60
|
CHATBOT_TOOL_TIMEOUT=60
|
||||||
|
|
||||||
ADMIN_PORT=28013
|
ADMIN_PORT=28013
|
||||||
UVICORN_WORKERS=2
|
UVICORN_WORKERS=2
|
||||||
|
|||||||
Regular → Executable
+111
-111
@@ -1,111 +1,111 @@
|
|||||||
# exdev TROAD Oracle (Docker)
|
# exdev TROAD Oracle (Docker)
|
||||||
|
|
||||||
개발서버(`chatbot.exdev.co.kr`)에서 교통정보(TROAD) 조회용 Oracle 을 Docker 로 기동합니다.
|
개발서버(`chatbot.exdev.co.kr`)에서 교통정보(TROAD) 조회용 Oracle 을 Docker 로 기동합니다.
|
||||||
|
|
||||||
## 접속 정보 (chatbotApi 와 동일)
|
## 접속 정보 (chatbotApi 와 동일)
|
||||||
|
|
||||||
| 항목 | 값 |
|
| 항목 | 값 |
|
||||||
|------|-----|
|
|------|-----|
|
||||||
| JDBC URL | `jdbc:oracle:thin:@localhost:1521/orcl2` |
|
| JDBC URL | `jdbc:oracle:thin:@localhost:1521/orcl2` |
|
||||||
| Username | `OPR_MAIN` |
|
| Username | `OPR_MAIN` |
|
||||||
| Password | `test` |
|
| Password | `test` |
|
||||||
| Image | `gvenzl/oracle-free:23-slim` (Oracle Database Free 23ai) |
|
| Image | `gvenzl/oracle-free:23-slim` (Oracle Database Free 23ai) |
|
||||||
| Container | `exaichatbot-agent-oracle-troad` |
|
| Container | `exaichatbot-agent-oracle-troad` |
|
||||||
| Volume | `exaichatbot-agent-oracle-troad-data` |
|
| Volume | `exaichatbot-agent-oracle-troad-data` |
|
||||||
|
|
||||||
`application.yml` 의 기본값은 운영 TROAD(`172.16.163.76`)를 유지합니다.
|
`application.yml` 의 기본값은 운영 TROAD(`172.16.163.76`)를 유지합니다.
|
||||||
개발서버에서는 `start-all-server.sh` 가 아래 ENV 로만 localhost Oracle 을 주입합니다
|
개발서버에서는 `start-all-server.sh` 가 아래 ENV 로만 localhost Oracle 을 주입합니다
|
||||||
(`SPRING_DATASOURCE_TROAD_URL` / `_USERNAME` / `_PASSWORD`).
|
(`SPRING_DATASOURCE_TROAD_URL` / `_USERNAME` / `_PASSWORD`).
|
||||||
`git_fetch_all.sh` 는 커밋 전 yml 을 운영값으로 되돌리므로 exdev 설정이 GitHub에 반영되지 않습니다.
|
`git_fetch_all.sh` 는 커밋 전 yml 을 운영값으로 되돌리므로 exdev 설정이 GitHub에 반영되지 않습니다.
|
||||||
|
|
||||||
개발서버가 Apple Silicon(arm64) 이므로 amd64 전용인 `gvenzl/oracle-xe:21` 대신
|
개발서버가 Apple Silicon(arm64) 이므로 amd64 전용인 `gvenzl/oracle-xe:21` 대신
|
||||||
arm64 를 지원하는 `gvenzl/oracle-free:23-slim` 을 사용합니다.
|
arm64 를 지원하는 `gvenzl/oracle-free:23-slim` 을 사용합니다.
|
||||||
|
|
||||||
SYS/SYSTEM 비밀번호 기본값: `OracleExdev!2026`
|
SYS/SYSTEM 비밀번호 기본값: `OracleExdev!2026`
|
||||||
(`ORACLE_SYS_PASSWORD` 환경변수로 변경 가능)
|
(`ORACLE_SYS_PASSWORD` 환경변수로 변경 가능)
|
||||||
|
|
||||||
## 기동 / 중지
|
## 기동 / 중지
|
||||||
|
|
||||||
`start-all-server.sh` / `stop-all-server.sh` 에 포함됩니다.
|
`start-all-server.sh` / `stop-all-server.sh` 에 포함됩니다.
|
||||||
기동 후 교통정보 뷰가 비어 있으면 `apply-sql.sh` 가 자동 실행됩니다.
|
기동 후 교통정보 뷰가 비어 있으면 `apply-sql.sh` 가 자동 실행됩니다.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 수동
|
# 수동
|
||||||
cd /Users/aidev/dev/exAichatbot_agent/server-dev
|
cd /Users/aidev/dev/exAichatbot_agent/server-dev
|
||||||
docker compose -f docker-compose.oracle.yml up -d
|
docker compose -f docker-compose.oracle.yml up -d
|
||||||
docker compose -f docker-compose.oracle.yml down
|
docker compose -f docker-compose.oracle.yml down
|
||||||
|
|
||||||
# 데이터 볼륨까지 삭제
|
# 데이터 볼륨까지 삭제
|
||||||
docker compose -f docker-compose.oracle.yml down -v
|
docker compose -f docker-compose.oracle.yml down -v
|
||||||
# 또는
|
# 또는
|
||||||
./stop-all-server.sh --purge-oracle
|
./stop-all-server.sh --purge-oracle
|
||||||
```
|
```
|
||||||
|
|
||||||
옵션:
|
옵션:
|
||||||
|
|
||||||
| 옵션 | 설명 |
|
| 옵션 | 설명 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| `start-all-server.sh --skip-oracle` | Oracle 기동 생략 |
|
| `start-all-server.sh --skip-oracle` | Oracle 기동 생략 |
|
||||||
| `stop-all-server.sh --purge-oracle` | 컨테이너 + 데이터 볼륨 삭제 |
|
| `stop-all-server.sh --purge-oracle` | 컨테이너 + 데이터 볼륨 삭제 |
|
||||||
|
|
||||||
## 디렉터리 구성
|
## 디렉터리 구성
|
||||||
|
|
||||||
| 경로 | 설명 |
|
| 경로 | 설명 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| `init/` | 컨테이너 최초 초기화 시 1회 실행 (OPR_MAIN 권한 부여) |
|
| `init/` | 컨테이너 최초 초기화 시 1회 실행 (OPR_MAIN 권한 부여) |
|
||||||
| `sql/` | 업무 객체 DDL + 데이터 (파일명 순서로 적용) |
|
| `sql/` | 업무 객체 DDL + 데이터 (파일명 순서로 적용) |
|
||||||
| `data/` | 원본 CSV 덤프 |
|
| `data/` | 원본 CSV 덤프 |
|
||||||
| `tools/csv_to_insert.py` | CSV → INSERT 스크립트 변환 |
|
| `tools/csv_to_insert.py` | CSV → INSERT 스크립트 변환 |
|
||||||
| `apply-sql.sh` | 컨테이너에 `sql/*.sql` 적용 + 결과 검증 |
|
| `apply-sql.sh` | 컨테이너에 `sql/*.sql` 적용 + 결과 검증 |
|
||||||
|
|
||||||
## 업무 객체 적용
|
## 업무 객체 적용
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
|
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
|
||||||
|
|
||||||
# sql/ 전체 적용
|
# sql/ 전체 적용
|
||||||
./apply-sql.sh
|
./apply-sql.sh
|
||||||
|
|
||||||
# 특정 파일만
|
# 특정 파일만
|
||||||
./apply-sql.sh sql/10_v_incident_ftms.sql sql/20_v_incident_ftms_data.sql
|
./apply-sql.sh sql/10_v_incident_ftms.sql sql/20_v_incident_ftms_data.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
### 적용된 객체
|
### 적용된 객체
|
||||||
|
|
||||||
| 객체 | 설명 |
|
| 객체 | 설명 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| `OPR_MAIN.T_INCIDENT_FTMS` | 뷰의 원본 데이터 테이블 (17 컬럼 + `LOADED_AT`) |
|
| `OPR_MAIN.T_INCIDENT_FTMS` | 뷰의 원본 데이터 테이블 (17 컬럼 + `LOADED_AT`) |
|
||||||
| `OPR_MAIN.V_INCIDENT_FTMS` | 운영과 동일한 컬럼·순서의 조회용 뷰 |
|
| `OPR_MAIN.V_INCIDENT_FTMS` | 운영과 동일한 컬럼·순서의 조회용 뷰 |
|
||||||
| `PUBLIC SYNONYM V_INCIDENT_FTMS` | 스키마 미지정 조회 지원 |
|
| `PUBLIC SYNONYM V_INCIDENT_FTMS` | 스키마 미지정 조회 지원 |
|
||||||
| `TLISDEV.T_TRMB_CD_INFO01M1` | 공통코드 (노선명 COM064 등) |
|
| `TLISDEV.T_TRMB_CD_INFO01M1` | 공통코드 (노선명 COM064 등) |
|
||||||
| `TROAD_APP.V_ROUTE_NEW_NM` | 노선명 조회 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
|
| `TROAD_APP.V_ROUTE_NEW_NM` | 노선명 조회 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
|
||||||
| `TROAD_APP.V_ROUTE_TRFC_VER001` | 노선별 교통상황 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
|
| `TROAD_APP.V_ROUTE_TRFC_VER001` | 노선별 교통상황 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
|
||||||
| `TROAD_APP.V_ACDT_BRNWS_VER001` | 교통속보 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
|
| `TROAD_APP.V_ACDT_BRNWS_VER001` | 교통속보 뷰 (`chatbotApi` 기존 쿼리 그대로 사용) |
|
||||||
| `OPR_MAIN.V_ROUTE_*` / `V_ACDT_*` | 스키마 미지정 조회용 미러 뷰 |
|
| `OPR_MAIN.V_ROUTE_*` / `V_ACDT_*` | 스키마 미지정 조회용 미러 뷰 |
|
||||||
|
|
||||||
운영 뷰는 다수 기반 테이블을 참조하는 읽기 전용 뷰입니다. 개발서버에는 기반 테이블이
|
운영 뷰는 다수 기반 테이블을 참조하는 읽기 전용 뷰입니다. 개발서버에는 기반 테이블이
|
||||||
없으므로, 뷰 결과 CSV를 물리 테이블에 적재하고 동일 이름 뷰로 노출해
|
없으므로, 뷰 결과 CSV를 물리 테이블에 적재하고 동일 이름 뷰로 노출해
|
||||||
**기존 조회 로직/SQL을 변경하지 않고** 동작하게 합니다.
|
**기존 조회 로직/SQL을 변경하지 않고** 동작하게 합니다.
|
||||||
|
|
||||||
### 다른 CSV 덤프 추가
|
### 다른 CSV 덤프 추가
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
|
cd /Users/aidev/dev/exAichatbot_agent/server-dev/oracle
|
||||||
python3 tools/csv_to_insert.py data/<파일>.csv \
|
python3 tools/csv_to_insert.py data/<파일>.csv \
|
||||||
--table OPR_MAIN.<테이블> \
|
--table OPR_MAIN.<테이블> \
|
||||||
--numeric <숫자컬럼,콤마구분> \
|
--numeric <숫자컬럼,콤마구분> \
|
||||||
--out sql/<번호>_<이름>_data.sql
|
--out sql/<번호>_<이름>_data.sql
|
||||||
./apply-sql.sh sql/<번호>_<이름>_data.sql
|
./apply-sql.sh sql/<번호>_<이름>_data.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
## 검증
|
## 검증
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker exec -e NLS_LANG=.AL32UTF8 -it exaichatbot-agent-oracle-troad \
|
docker exec -e NLS_LANG=.AL32UTF8 -it exaichatbot-agent-oracle-troad \
|
||||||
sqlplus OPR_MAIN/test@localhost:1521/ORCL2
|
sqlplus OPR_MAIN/test@localhost:1521/ORCL2
|
||||||
|
|
||||||
SQL> SELECT COUNT(*) FROM V_INCIDENT_FTMS;
|
SQL> SELECT COUNT(*) FROM V_INCIDENT_FTMS;
|
||||||
SQL> SELECT INCIDENT_TYPE, COUNT(*) FROM V_INCIDENT_FTMS GROUP BY INCIDENT_TYPE;
|
SQL> SELECT INCIDENT_TYPE, COUNT(*) FROM V_INCIDENT_FTMS GROUP BY INCIDENT_TYPE;
|
||||||
```
|
```
|
||||||
|
|
||||||
한글 데이터 조회 시 `NLS_LANG=.AL32UTF8` 을 지정해야 깨지지 않습니다.
|
한글 데이터 조회 시 `NLS_LANG=.AL32UTF8` 을 지정해야 깨지지 않습니다.
|
||||||
|
|||||||
Regular → Executable
|
Can't render this file because it is too large.
|
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
|
Can't render this file because it is too large.
|
Regular → Executable
+33
-33
@@ -1,33 +1,33 @@
|
|||||||
-- TROAD 개발용 부트스트랩 (컨테이너 최초 초기화 시 1회 실행)
|
-- TROAD 개발용 부트스트랩 (컨테이너 최초 초기화 시 1회 실행)
|
||||||
--
|
--
|
||||||
-- gvenzl 이미지는 이 스크립트를 CDB root 에서 실행할 수 있으므로
|
-- gvenzl 이미지는 이 스크립트를 CDB root 에서 실행할 수 있으므로
|
||||||
-- OPR_MAIN 이 있는 PDB(ORCL2)로 세션을 옮긴 뒤 권한을 부여한다.
|
-- OPR_MAIN 이 있는 PDB(ORCL2)로 세션을 옮긴 뒤 권한을 부여한다.
|
||||||
-- 업무 뷰/데이터는 oracle/apply-sql.sh (sql/*.sql) 로 적용한다.
|
-- 업무 뷰/데이터는 oracle/apply-sql.sh (sql/*.sql) 로 적용한다.
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'ALTER SESSION SET CONTAINER = ORCL2';
|
EXECUTE IMMEDIATE 'ALTER SESSION SET CONTAINER = ORCL2';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN NULL; -- 이미 PDB 세션이면 무시
|
WHEN OTHERS THEN NULL; -- 이미 PDB 세션이면 무시
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
DECLARE
|
DECLARE
|
||||||
TYPE t_privs IS TABLE OF VARCHAR2(60);
|
TYPE t_privs IS TABLE OF VARCHAR2(60);
|
||||||
l_privs t_privs := t_privs (
|
l_privs t_privs := t_privs (
|
||||||
'CREATE SESSION',
|
'CREATE SESSION',
|
||||||
'CREATE TABLE',
|
'CREATE TABLE',
|
||||||
'CREATE VIEW',
|
'CREATE VIEW',
|
||||||
'CREATE SEQUENCE',
|
'CREATE SEQUENCE',
|
||||||
'CREATE SYNONYM',
|
'CREATE SYNONYM',
|
||||||
'UNLIMITED TABLESPACE'
|
'UNLIMITED TABLESPACE'
|
||||||
);
|
);
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR i IN 1 .. l_privs.COUNT LOOP
|
FOR i IN 1 .. l_privs.COUNT LOOP
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'GRANT ' || l_privs (i) || ' TO OPR_MAIN';
|
EXECUTE IMMEDIATE 'GRANT ' || l_privs (i) || ' TO OPR_MAIN';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN NULL;
|
WHEN OTHERS THEN NULL;
|
||||||
END;
|
END;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|||||||
Regular → Executable
+99
-99
@@ -1,99 +1,99 @@
|
|||||||
-- V_INCIDENT_FTMS (교통정보 돌발/정체) — 개발서버용 구성
|
-- V_INCIDENT_FTMS (교통정보 돌발/정체) — 개발서버용 구성
|
||||||
--
|
--
|
||||||
-- 운영 DDL 은 TROAD_APP.V_INCIDENT_FTMS 로, 다수 기반 테이블(V_TRMB_ACDT_BRNWS_INFO01L1,
|
-- 운영 DDL 은 TROAD_APP.V_INCIDENT_FTMS 로, 다수 기반 테이블(V_TRMB_ACDT_BRNWS_INFO01L1,
|
||||||
-- T_TRMB_ROUTE01M1, TLISDEV.T_TRMB_CD_INFO01M1 ...)을 union all 로 가공하는 읽기 전용 뷰다.
|
-- T_TRMB_ROUTE01M1, TLISDEV.T_TRMB_CD_INFO01M1 ...)을 union all 로 가공하는 읽기 전용 뷰다.
|
||||||
-- 개발서버에는 기반 테이블이 없고 뷰 자체에는 INSERT 가 불가하므로,
|
-- 개발서버에는 기반 테이블이 없고 뷰 자체에는 INSERT 가 불가하므로,
|
||||||
-- 뷰 결과와 동일한 17개 컬럼을 갖는 물리 테이블을 두고 그 위에 같은 이름의 뷰를 만든다.
|
-- 뷰 결과와 동일한 17개 컬럼을 갖는 물리 테이블을 두고 그 위에 같은 이름의 뷰를 만든다.
|
||||||
-- 소유자는 chatbotApi 가 실제 접속하는 계정(OPR_MAIN)으로 맞춘다.
|
-- 소유자는 chatbotApi 가 실제 접속하는 계정(OPR_MAIN)으로 맞춘다.
|
||||||
-- jdbc:oracle:thin:@localhost:1521/orcl2 / OPR_MAIN
|
-- jdbc:oracle:thin:@localhost:1521/orcl2 / OPR_MAIN
|
||||||
|
|
||||||
SET DEFINE OFF
|
SET DEFINE OFF
|
||||||
SET SERVEROUTPUT ON
|
SET SERVEROUTPUT ON
|
||||||
|
|
||||||
-- 기존 뷰 제거 (테이블 재정의 순서 보장)
|
-- 기존 뷰 제거 (테이블 재정의 순서 보장)
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'DROP VIEW OPR_MAIN.V_INCIDENT_FTMS';
|
EXECUTE IMMEDIATE 'DROP VIEW OPR_MAIN.V_INCIDENT_FTMS';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -942 THEN RAISE; END IF;
|
IF SQLCODE != -942 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
-- 뷰의 원본 데이터 테이블
|
-- 뷰의 원본 데이터 테이블
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE q'[
|
EXECUTE IMMEDIATE q'[
|
||||||
CREATE TABLE OPR_MAIN.T_INCIDENT_FTMS (
|
CREATE TABLE OPR_MAIN.T_INCIDENT_FTMS (
|
||||||
ROUTE VARCHAR2(100),
|
ROUTE VARCHAR2(100),
|
||||||
ROAD_NO NUMBER,
|
ROAD_NO NUMBER,
|
||||||
ROUTE_ID VARCHAR2(20),
|
ROUTE_ID VARCHAR2(20),
|
||||||
WEATHER VARCHAR2(100),
|
WEATHER VARCHAR2(100),
|
||||||
UPDWNAME VARCHAR2(50),
|
UPDWNAME VARCHAR2(50),
|
||||||
UPDOWN VARCHAR2(1),
|
UPDOWN VARCHAR2(1),
|
||||||
MILEPOST VARCHAR2(400),
|
MILEPOST VARCHAR2(400),
|
||||||
CONTENTS VARCHAR2(2000),
|
CONTENTS VARCHAR2(2000),
|
||||||
RAISE_TIME VARCHAR2(14),
|
RAISE_TIME VARCHAR2(14),
|
||||||
INCIDENT_TYPE VARCHAR2(20),
|
INCIDENT_TYPE VARCHAR2(20),
|
||||||
REGION_ID VARCHAR2(20),
|
REGION_ID VARCHAR2(20),
|
||||||
REGION_NAME VARCHAR2(100),
|
REGION_NAME VARCHAR2(100),
|
||||||
START_MILEPOST NUMBER,
|
START_MILEPOST NUMBER,
|
||||||
INITIALCHAR VARCHAR2(10),
|
INITIALCHAR VARCHAR2(10),
|
||||||
SEQ_NO VARCHAR2(10),
|
SEQ_NO VARCHAR2(10),
|
||||||
INCIDENT_ID VARCHAR2(30),
|
INCIDENT_ID VARCHAR2(30),
|
||||||
CONGZONE_ID VARCHAR2(30),
|
CONGZONE_ID VARCHAR2(30),
|
||||||
LOADED_AT TIMESTAMP DEFAULT SYSTIMESTAMP
|
LOADED_AT TIMESTAMP DEFAULT SYSTIMESTAMP
|
||||||
)
|
)
|
||||||
]';
|
]';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -955 THEN RAISE; END IF;
|
IF SQLCODE != -955 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'CREATE INDEX OPR_MAIN.IX_INCIDENT_FTMS_ROUTE ON OPR_MAIN.T_INCIDENT_FTMS (ROAD_NO, UPDOWN)';
|
EXECUTE IMMEDIATE 'CREATE INDEX OPR_MAIN.IX_INCIDENT_FTMS_ROUTE ON OPR_MAIN.T_INCIDENT_FTMS (ROAD_NO, UPDOWN)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -955 AND SQLCODE != -1408 THEN RAISE; END IF;
|
IF SQLCODE != -955 AND SQLCODE != -1408 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'CREATE INDEX OPR_MAIN.IX_INCIDENT_FTMS_TYPE ON OPR_MAIN.T_INCIDENT_FTMS (INCIDENT_TYPE)';
|
EXECUTE IMMEDIATE 'CREATE INDEX OPR_MAIN.IX_INCIDENT_FTMS_TYPE ON OPR_MAIN.T_INCIDENT_FTMS (INCIDENT_TYPE)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -955 AND SQLCODE != -1408 THEN RAISE; END IF;
|
IF SQLCODE != -955 AND SQLCODE != -1408 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
-- 운영과 동일한 컬럼·순서의 뷰
|
-- 운영과 동일한 컬럼·순서의 뷰
|
||||||
CREATE OR REPLACE FORCE VIEW OPR_MAIN.V_INCIDENT_FTMS (
|
CREATE OR REPLACE FORCE VIEW OPR_MAIN.V_INCIDENT_FTMS (
|
||||||
"ROUTE", "ROAD_NO", "ROUTE_ID", "WEATHER", "UPDWNAME", "UPDOWN", "MILEPOST",
|
"ROUTE", "ROAD_NO", "ROUTE_ID", "WEATHER", "UPDWNAME", "UPDOWN", "MILEPOST",
|
||||||
"CONTENTS", "RAISE_TIME", "INCIDENT_TYPE", "REGION_ID", "REGION_NAME",
|
"CONTENTS", "RAISE_TIME", "INCIDENT_TYPE", "REGION_ID", "REGION_NAME",
|
||||||
"START_MILEPOST", "INITIALCHAR", "SEQ_NO", "INCIDENT_ID", "CONGZONE_ID"
|
"START_MILEPOST", "INITIALCHAR", "SEQ_NO", "INCIDENT_ID", "CONGZONE_ID"
|
||||||
) AS
|
) AS
|
||||||
SELECT ROUTE,
|
SELECT ROUTE,
|
||||||
ROAD_NO,
|
ROAD_NO,
|
||||||
ROUTE_ID,
|
ROUTE_ID,
|
||||||
WEATHER,
|
WEATHER,
|
||||||
UPDWNAME,
|
UPDWNAME,
|
||||||
UPDOWN,
|
UPDOWN,
|
||||||
MILEPOST,
|
MILEPOST,
|
||||||
CONTENTS,
|
CONTENTS,
|
||||||
RAISE_TIME,
|
RAISE_TIME,
|
||||||
INCIDENT_TYPE,
|
INCIDENT_TYPE,
|
||||||
REGION_ID,
|
REGION_ID,
|
||||||
REGION_NAME,
|
REGION_NAME,
|
||||||
START_MILEPOST,
|
START_MILEPOST,
|
||||||
INITIALCHAR,
|
INITIALCHAR,
|
||||||
SEQ_NO,
|
SEQ_NO,
|
||||||
INCIDENT_ID,
|
INCIDENT_ID,
|
||||||
CONGZONE_ID
|
CONGZONE_ID
|
||||||
FROM OPR_MAIN.T_INCIDENT_FTMS;
|
FROM OPR_MAIN.T_INCIDENT_FTMS;
|
||||||
|
|
||||||
-- 운영 스키마명(TROAD_APP)으로도 접근할 수 있게 동의어 제공
|
-- 운영 스키마명(TROAD_APP)으로도 접근할 수 있게 동의어 제공
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE PUBLIC SYNONYM V_INCIDENT_FTMS FOR OPR_MAIN.V_INCIDENT_FTMS';
|
EXECUTE IMMEDIATE 'CREATE OR REPLACE PUBLIC SYNONYM V_INCIDENT_FTMS FOR OPR_MAIN.V_INCIDENT_FTMS';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN NULL;
|
WHEN OTHERS THEN NULL;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|||||||
Regular → Executable
+137
-137
@@ -1,137 +1,137 @@
|
|||||||
-- 자동 생성: V_INCIDENT_FTMS_202607301706.csv -> OPR_MAIN.T_INCIDENT_FTMS
|
-- 자동 생성: V_INCIDENT_FTMS_202607301706.csv -> OPR_MAIN.T_INCIDENT_FTMS
|
||||||
-- 행 수: 124
|
-- 행 수: 124
|
||||||
-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py
|
-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py
|
||||||
|
|
||||||
SET DEFINE OFF
|
SET DEFINE OFF
|
||||||
SET SQLBLANKLINES ON
|
SET SQLBLANKLINES ON
|
||||||
|
|
||||||
DELETE FROM OPR_MAIN.T_INCIDENT_FTMS;
|
DELETE FROM OPR_MAIN.T_INCIDENT_FTMS;
|
||||||
|
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '서울방향', 'E', '신월(23K)-신월(24K)', '1km정체[2026-07-30 15:21- ]', '20260730152128', '차량증가', '250000', NULL, 23, '1200', '120', '20260730152128', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '서울방향', 'E', '신월(23K)-신월(24K)', '1km정체[2026-07-30 15:21- ]', '20260730152128', '차량증가', '250000', NULL, 23, '1200', '120', '20260730152128', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('울산선', 16, '01601', NULL, '울산방향', 'E', '범서하이패스(10.3K)', '(갓길)화물차 고장처리 중[2026-07-30 16:17- ]', '20260730161750', '고장', '700000', NULL, 10.3, '0160', '16', '20260730161750', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('울산선', 16, '01601', NULL, '울산방향', 'E', '범서하이패스(10.3K)', '(갓길)화물차 고장처리 중[2026-07-30 16:17- ]', '20260730161750', '고장', '700000', NULL, 10.3, '0160', '16', '20260730161750', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '인천방향', 'S', '부천(20K)-부천(19K)', '1km정체[2026-07-30 16:57- ]', '20260730165724', '차량증가', '250000', NULL, 20, '1200', '120', '20260730165724', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '인천방향', 'S', '부천(20K)-부천(19K)', '1km정체[2026-07-30 16:57- ]', '20260730165724', '차량증가', '250000', NULL, 20, '1200', '120', '20260730165724', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '동대구분기점(122.5K)', '(갓길)승용차 고장처리중[2026-07-30 16:55- ]', '20260730165504', '고장', '600000', NULL, 122.5, '0010', '1', '20260730165504', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '동대구분기점(122.5K)', '(갓길)승용차 고장처리중[2026-07-30 16:55- ]', '20260730165504', '고장', '600000', NULL, 122.5, '0010', '1', '20260730165504', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '남춘천부근(53.8K)', '(2,3차로)승용차관련 사고처리중[2026-07-30 16:56- ] ==> 남춘천IC~남춘천IC, 3km정체', '20260730165618', '사고', '300000', NULL, 53.8, '0600', '60', '20260730165618', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '남춘천부근(53.8K)', '(2,3차로)승용차관련 사고처리중[2026-07-30 16:56- ] ==> 남춘천IC~남춘천IC, 3km정체', '20260730165618', '사고', '300000', NULL, 53.8, '0600', '60', '20260730165618', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '통영방향', 'S', '오동터널부근(132K)', '(갓길) 시설물 보수 작업중[2026-07-30 08:12- ]', '20260730081231', '작업', '800000', NULL, 132, '0351', '35', '20260730081231', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '통영방향', 'S', '오동터널부근(132K)', '(갓길) 시설물 보수 작업중[2026-07-30 08:12- ]', '20260730081231', '작업', '800000', NULL, 132, '0351', '35', '20260730081231', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '천안분기점부근(332K)-천안호두(휴)(324K)', '8km정체[2026-07-30 10:50- ]', '20260730105038', '차량증가', '400000', NULL, 332, '0010', '1', '20260730105038', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '천안분기점부근(332K)-천안호두(휴)(324K)', '8km정체[2026-07-30 10:50- ]', '20260730105038', '차량증가', '400000', NULL, 332, '0010', '1', '20260730105038', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '둔대분기점(23K)-반월터널부근(21K)', '2km정체[2026-07-30 16:17- ]', '20260730161727', '차량증가', '250000', NULL, 23, '0500', '50', '20260730161727', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '둔대분기점(23K)-반월터널부근(21K)', '2km정체[2026-07-30 16:17- ]', '20260730161727', '차량증가', '250000', NULL, 23, '0500', '50', '20260730161727', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('청주영덕선', 30, '03001', NULL, '영덕방향', 'E', '수한터널부근(28K)-탄부터널부근(31K)', '3km정체[2026-07-30 17:04- ]', '20260730170451', '차량증가', '900000', NULL, 28, '0300', '30', '20260730170451', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('청주영덕선', 30, '03001', NULL, '영덕방향', 'E', '수한터널부근(28K)-탄부터널부근(31K)', '3km정체[2026-07-30 17:04- ]', '20260730170451', '차량증가', '900000', NULL, 28, '0300', '30', '20260730170451', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '논산방향', 'S', '차령터널 무학천교(266.0K)-차령터널 (263.0K)', '3km 정체[2026-07-30 08:24- ]', '20260730082406', '차량증가', '400000', NULL, 269, '0252', '25', '20260730082406', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '논산방향', 'S', '차령터널 무학천교(266.0K)-차령터널 (263.0K)', '3km 정체[2026-07-30 08:24- ]', '20260730082406', '차량증가', '400000', NULL, 269, '0252', '25', '20260730082406', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '양재부근(415K)-반포(420K)', '5km정체[2026-07-30 06:27- ]', '20260730062713', '차량증가', '200000', NULL, 415, '0010', '1', '20260730062713', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '양재부근(415K)-반포(420K)', '5km정체[2026-07-30 06:27- ]', '20260730062713', '차량증가', '200000', NULL, 415, '0010', '1', '20260730062713', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '성남방향', 'E', '안현분기점(17K)-안현분기점(18K)', '1km정체[2026-07-30 16:24- ]', '20260730162409', '차량증가', '250000', NULL, 17, '1100', '110', '20260730162409', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '성남방향', 'E', '안현분기점(17K)-안현분기점(18K)', '1km정체[2026-07-30 16:24- ]', '20260730162409', '차량증가', '250000', NULL, 17, '1100', '110', '20260730162409', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '이천부근(82K)-호법분기점부근(75K)', '7km정체[2026-07-30 16:35- ]', '20260730163548', '차량증가', '200000', NULL, 82, '0500', '50', '20260730163548', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '이천부근(82K)-호법분기점부근(75K)', '7km정체[2026-07-30 16:35- ]', '20260730163548', '차량증가', '200000', NULL, 82, '0500', '50', '20260730163548', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '자유로(72K)-김포(74K)', '2km정체[2026-07-30 14:59- ]', '20260730145917', '차량증가', '250000', NULL, 72, '1000', '100', '20260730145917', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '자유로(72K)-김포(74K)', '2km정체[2026-07-30 14:59- ]', '20260730145917', '차량증가', '250000', NULL, 72, '1000', '100', '20260730145917', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('순천완주선', 27, '02701', NULL, '완주방향', 'E', '황전(25.4K)', '(갓길) 노면보수 작업중[2026-07-30 16:33- ]', '20260730163357', '작업', '500000', NULL, 25.4, '0270', '27', '20260730163357', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('순천완주선', 27, '02701', NULL, '완주방향', 'E', '황전(25.4K)', '(갓길) 노면보수 작업중[2026-07-30 16:33- ]', '20260730163357', '작업', '500000', NULL, 25.4, '0270', '27', '20260730163357', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '안양터널(114K)-수리터널(112K)', '2km정체[2026-07-30 15:33- ]', '20260730153338', '차량증가', '250000', NULL, 114, '1000', '100', '20260730153338', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '안양터널(114K)-수리터널(112K)', '2km정체[2026-07-30 15:33- ]', '20260730153338', '차량증가', '250000', NULL, 114, '1000', '100', '20260730153338', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제2순환선(화성-광주)', 400, '40041', NULL, '화성방향', 'S', '동탄방향 9.8', 'null[2026-07-23 13:52- ]', '20260723135200', '작업', '200000', NULL, 0, '4004', '400', '20260723135200', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제2순환선(화성-광주)', 400, '40041', NULL, '화성방향', 'S', '동탄방향 9.8', 'null[2026-07-23 13:52- ]', '20260723135200', '작업', '200000', NULL, 0, '4004', '400', '20260723135200', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '덕평부근(66K)-양지터널부근(58K)', '8km정체[2026-07-30 15:34- ]', '20260730153400', '차량증가', '200000', NULL, 66, '0500', '50', '20260730153400', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '덕평부근(66K)-양지터널부근(58K)', '8km정체[2026-07-30 15:34- ]', '20260730153400', '차량증가', '200000', NULL, 66, '0500', '50', '20260730153400', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남선', 25, '02511', NULL, '천안방향', 'E', '동광주(74K)', '1km정체[2026-07-30 16:06- ]', '20260730160618', '차량증가', '500000', NULL, 74, '0251', '25', '20260730160618', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남선', 25, '02511', NULL, '천안방향', 'E', '동광주(74K)', '1km정체[2026-07-30 16:06- ]', '20260730160618', '차량증가', '500000', NULL, 74, '0251', '25', '20260730160618', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '서용인분기점(50K)', '1km정체[2026-07-30 16:17- ]', '20260730161757', '차량증가', '250000', NULL, 50, '0500', '50', '20260730161757', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '서용인분기점(50K)', '1km정체[2026-07-30 16:17- ]', '20260730161757', '차량증가', '250000', NULL, 50, '0500', '50', '20260730161757', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', '둔대분기점(22K)-부곡(27K)', '5km정체[2026-07-30 16:19- ]', '20260730161916', '차량증가', '250000', NULL, 22, '0500', '50', '20260730161916', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', '둔대분기점(22K)-부곡(27K)', '5km정체[2026-07-30 16:19- ]', '20260730161916', '차량증가', '250000', NULL, 22, '0500', '50', '20260730161916', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(부산-포항)', 65, '06521', NULL, '포항방향', 'E', '남경주(69.5K)-문무대왕1터널(74.1K)', '** (포항방향 1,2차로교대) 장기차단 보강공사 7.20(월) ~ 9.18(금) **', '20260714121717', '홍보', '700000', NULL, 69.5, '0652', '65', '20260714121717', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(부산-포항)', 65, '06521', NULL, '포항방향', 'E', '남경주(69.5K)-문무대왕1터널(74.1K)', '** (포항방향 1,2차로교대) 장기차단 보강공사 7.20(월) ~ 9.18(금) **', '20260714121717', '홍보', '700000', NULL, 69.5, '0652', '65', '20260714121717', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '인천방향', 'S', '삼막(25.98K)-광명터널(22K)', '4km정체[2026-07-30 14:37- ]', '20260730143718', '차량증가', '250000', NULL, 25.98, '1100', '110', '20260730143718', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '인천방향', 'S', '삼막(25.98K)-광명터널(22K)', '4km정체[2026-07-30 14:37- ]', '20260730143718', '차량증가', '250000', NULL, 25.98, '1100', '110', '20260730143718', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '여주분기점부근(261K)', '(갓길)승용차고장 처리중[2026-07-30 17:01- ]', '20260730170123', '고장', '900000', NULL, 261, '0450', '45', '20260730170123', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '여주분기점부근(261K)', '(갓길)승용차고장 처리중[2026-07-30 17:01- ]', '20260730170123', '고장', '900000', NULL, 261, '0450', '45', '20260730170123', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', '칠원분기점부근(117K)-함안2터널부근(120K)', '3km정체[2026-07-30 10:32- ]', '20260730103250', '차량증가', '700000', NULL, 117, '0100', '10', '20260730103250', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', '칠원분기점부근(117K)-함안2터널부근(120K)', '3km정체[2026-07-30 10:32- ]', '20260730103250', '차량증가', '700000', NULL, 117, '0100', '10', '20260730103250', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('부산외곽선', 600, '60001', NULL, '창원방향', 'S', '기장분기점(48K)-기장분기점부근(47K)', '1km정체[2026-07-30 15:29- ]', '20260730152946', '차량증가', '700000', NULL, 48, '6000', '600', '20260730152946', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('부산외곽선', 600, '60001', NULL, '창원방향', 'S', '기장분기점(48K)-기장분기점부근(47K)', '1km정체[2026-07-30 15:29- ]', '20260730152946', '차량증가', '700000', NULL, 48, '6000', '600', '20260730152946', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남지선', 251, '25101', NULL, '논산방향', 'S', '회덕분기점(54K)-북대전부근(52K)', '2km정체[2026-07-30 15:45- ]', '20260730154509', '차량증가', '400000', NULL, 54, '2510', '251', '20260730154509', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남지선', 251, '25101', NULL, '논산방향', 'S', '회덕분기점(54K)-북대전부근(52K)', '2km정체[2026-07-30 15:45- ]', '20260730154509', '차량증가', '400000', NULL, 54, '2510', '251', '20260730154509', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '서창분기점(1K)-서창(0K)', '1km정체[2026-07-30 16:10- ]', '20260730161003', '차량증가', '250000', NULL, 1, '0500', '50', '20260730161003', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '서창분기점(1K)-서창(0K)', '1km정체[2026-07-30 16:10- ]', '20260730161003', '차량증가', '250000', NULL, 1, '0500', '50', '20260730161003', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '자유로(72K)', '(3,4차로) 사고 처리중[2026-07-30 16:47- ] ==> 일산IC~자유로IC, 2km정체', '20260730164727', '사고', '250000', NULL, 72, '1000', '100', '20260730164727', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '자유로(72K)', '(3,4차로) 사고 처리중[2026-07-30 16:47- ] ==> 일산IC~자유로IC, 2km정체', '20260730164727', '사고', '250000', NULL, 72, '1000', '100', '20260730164727', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '남춘천부근(53.6K)', '(갓길) 승용차 고장 처리중[2026-07-30 16:43- ]', '20260730164308', '고장', '300000', NULL, 53.6, '0600', '60', '20260730164308', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '남춘천부근(53.6K)', '(갓길) 승용차 고장 처리중[2026-07-30 16:43- ]', '20260730164308', '고장', '300000', NULL, 53.6, '0600', '60', '20260730164308', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '안성분기점(364K)-안성(휴)부근(368K)', '4km정체[2026-07-30 14:37- ]', '20260730143713', '차량증가', '200000', NULL, 364, '0010', '1', '20260730143713', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '안성분기점(364K)-안성(휴)부근(368K)', '4km정체[2026-07-30 14:37- ]', '20260730143713', '차량증가', '200000', NULL, 364, '0010', '1', '20260730143713', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(포항-영덕)', 65, '06531', NULL, '영덕방향', 'E', NULL, '** (영덕방향) 30k 영덕분기점 차로 증설 공사중 - 차로 좁아짐 주의(~12월) **', '20260721112431', '홍보', '600000', NULL, 0, '0653', '65', '20260721112431', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(포항-영덕)', 65, '06531', NULL, '영덕방향', 'E', NULL, '** (영덕방향) 30k 영덕분기점 차로 증설 공사중 - 차로 좁아짐 주의(~12월) **', '20260721112431', '홍보', '600000', NULL, 0, '0653', '65', '20260721112431', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '광명역(334K)-금천(340K)', '6km정체[2026-07-30 06:54- ]', '20260730065451', '차량증가', '250000', NULL, 334, '0150', '15', '20260730065451', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '광명역(334K)-금천(340K)', '6km정체[2026-07-30 06:54- ]', '20260730065451', '차량증가', '250000', NULL, 334, '0150', '15', '20260730065451', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '통영방향', 'S', '마달터널부근(202.5K)', '(2차로,갓길)승용차 고장 처리중[2026-07-30 16:46- ]', '20260730164648', '고장', '800000', NULL, 202.5, '0351', '35', '20260730164648', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '통영방향', 'S', '마달터널부근(202.5K)', '(2차로,갓길)승용차 고장 처리중[2026-07-30 16:46- ]', '20260730164648', '고장', '800000', NULL, 202.5, '0351', '35', '20260730164648', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '대전방향', 'E', '진주졸음쉼터(57.3K)', '** (대전방향) 화장실 이용불가 **', '20260725060945', '홍보', '700000', NULL, 57.3, '0351', '35', '20260725060945', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '대전방향', 'E', '진주졸음쉼터(57.3K)', '** (대전방향) 화장실 이용불가 **', '20260725060945', '홍보', '700000', NULL, 57.3, '0351', '35', '20260725060945', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '신갈분기점부근(397K)-신갈분기점(394K)', '3km정체[2026-07-30 16:48- ]', '20260730164817', '차량증가', '200000', NULL, 397, '0010', '1', '20260730164817', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '신갈분기점부근(397K)-신갈분기점(394K)', '3km정체[2026-07-30 16:48- ]', '20260730164817', '차량증가', '200000', NULL, 397, '0010', '1', '20260730164817', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', '서창분기점(0.5K)', '(인천 진출로)사고 처리중[2026-07-30 16:44- ]', '20260730164416', '사고', '250000', NULL, .5, '0500', '50', '20260730164416', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', '서창분기점(0.5K)', '(인천 진출로)사고 처리중[2026-07-30 16:44- ]', '20260730164416', '사고', '250000', NULL, .5, '0500', '50', '20260730164416', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택제천선', 40, '04001', NULL, '제천방향', 'E', '안성분기점(23K)-안성분기점(24K)', '1km정체[2026-07-30 16:51- ]', '20260730165135', '차량증가', '250000', NULL, 23, '0400', '40', '20260730165135', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택제천선', 40, '04001', NULL, '제천방향', 'E', '안성분기점(23K)-안성분기점(24K)', '1km정체[2026-07-30 16:51- ]', '20260730165135', '차량증가', '250000', NULL, 23, '0400', '40', '20260730165135', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('광주대구선', 12, '01201', NULL, '대구방향', 'E', NULL, '** (광주방향)112k 남상졸음쉼터 폐쇄(~12월) **', '20260422234627', '홍보', '600000', NULL, 0, '0120', '12', '20260422234627', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('광주대구선', 12, '01201', NULL, '대구방향', 'E', NULL, '** (광주방향)112k 남상졸음쉼터 폐쇄(~12월) **', '20260422234627', '홍보', '600000', NULL, 0, '0120', '12', '20260422234627', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제2순환선(화성-광주)', 400, '40041', NULL, '화성방향', 'S', '동탄방향 26.0', 'K (2차로) 비탈면보수 작업중[2026-05-21 14:38- ]', '20260521143800', '작업', '200000', NULL, 0, '4004', '400', '20260521143800', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제2순환선(화성-광주)', 400, '40041', NULL, '화성방향', 'S', '동탄방향 26.0', 'K (2차로) 비탈면보수 작업중[2026-05-21 14:38- ]', '20260521143800', '작업', '200000', NULL, 0, '4004', '400', '20260521143800', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(삼척-속초)', 65, '06501', NULL, '속초방향', 'E', NULL, '** (속초방향) 동해 졸음쉼터 신설공사 [ ~ 8.13] **', '20260416171758', '홍보', '300000', NULL, 0, '0650', '65', '20260416171758', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(삼척-속초)', 65, '06501', NULL, '속초방향', 'E', NULL, '** (속초방향) 동해 졸음쉼터 신설공사 [ ~ 8.13] **', '20260416171758', '홍보', '300000', NULL, 0, '0650', '65', '20260416171758', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서천공주선', 151, '15101', NULL, '공주방향', 'E', NULL, '** 동서천분기점 공주방향 연결로 갓길 장기차단 26.5월~26.10월 **', '20260519074906', '홍보', '400000', NULL, 0, '1510', '151', '20260519074906', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서천공주선', 151, '15101', NULL, '공주방향', 'E', NULL, '** 동서천분기점 공주방향 연결로 갓길 장기차단 26.5월~26.10월 **', '20260519074906', '홍보', '400000', NULL, 0, '1510', '151', '20260519074906', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 서산(목포)주유소 영업중단(5.6~10.6)/휴게소 및 LPG충전소는 정상영업/행담도주유소 이용바람 **', '20260429135010', '홍보', '400000', NULL, 0, '0150', '15', '20260429135010', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 서산(목포)주유소 영업중단(5.6~10.6)/휴게소 및 LPG충전소는 정상영업/행담도주유소 이용바람 **', '20260429135010', '홍보', '400000', NULL, 0, '0150', '15', '20260429135010', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** (부산)남사졸음쉼터 임시폐쇄(26.06.15~26.10.31),안성휴게소 이용바람 **', '20260605215733', '홍보', '200000', NULL, 0, '0010', '1', '20260605215733', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** (부산)남사졸음쉼터 임시폐쇄(26.06.15~26.10.31),안성휴게소 이용바람 **', '20260605215733', '홍보', '200000', NULL, 0, '0010', '1', '20260605215733', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', '대저분기점(163K)-덕천(166K)', '3km정체[2026-07-30 13:45- ]', '20260730134538', '차량증가', '700000', NULL, 163, '0100', '10', '20260730134538', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', '대저분기점(163K)-덕천(166K)', '3km정체[2026-07-30 13:45- ]', '20260730134538', '차량증가', '700000', NULL, 163, '0100', '10', '20260730134538', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('부산울산선', 65, '06511', NULL, '부산방향', 'S', '해운대터널부근(3K)-부산울산선시점(0K)', '3km정체[2026-07-30 14:43- ]', '20260730144311', '차량증가', '700000', NULL, 3, '0651', '65', '20260730144311', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('부산울산선', 65, '06511', NULL, '부산방향', 'S', '해운대터널부근(3K)-부산울산선시점(0K)', '3km정체[2026-07-30 14:43- ]', '20260730144311', '차량증가', '700000', NULL, 3, '0651', '65', '20260730144311', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '청주분기점(297K)', '(갓길) 승용 고장차 처리중[2026-07-30 15:25- ]', '20260730152539', '고장', '400000', NULL, 297, '0010', '1', '20260730152539', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '청주분기점(297K)', '(갓길) 승용 고장차 처리중[2026-07-30 15:25- ]', '20260730152539', '고장', '400000', NULL, 297, '0010', '1', '20260730152539', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해2지선', 104, '10401', NULL, '서부산방향', 'E', '서부산(휴)(18K)-사상(20K)', '2km정체[2026-07-30 15:25- ]', '20260730152500', '차량증가', '700000', NULL, 18, '1040', '104', '20260730152500', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해2지선', 104, '10401', NULL, '서부산방향', 'E', '서부산(휴)(18K)-사상(20K)', '2km정체[2026-07-30 15:25- ]', '20260730152500', '차량증가', '700000', NULL, 18, '1040', '104', '20260730152500', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(삼척-속초)', 65, '06501', NULL, '속초방향', 'E', '쇄운교(15K)-지흥1교(16.7K)', '(2차로)졸음쉼터 설치 작업중[2026-07-03 07:42- ]', '20260703074200', '작업', '300000', NULL, 15, '0650', '65', '20260703074200', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(삼척-속초)', 65, '06501', NULL, '속초방향', 'E', '쇄운교(15K)-지흥1교(16.7K)', '(2차로)졸음쉼터 설치 작업중[2026-07-03 07:42- ]', '20260703074200', '작업', '300000', NULL, 15, '0650', '65', '20260703074200', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '시흥요금소(96K)-중동(86K)', '10km정체[2026-07-30 07:24- ]', '20260730072448', '차량증가', '250000', NULL, 96, '1000', '100', '20260730072448', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '시흥요금소(96K)-중동(86K)', '10km정체[2026-07-30 07:24- ]', '20260730072448', '차량증가', '250000', NULL, 96, '1000', '100', '20260730072448', NULL);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '천안방향', 'E', '남공주IC 오룡교(232.0K)-남공주IC 검상천교(235.0K)', '3km 정체[2026-07-30 15:27- ]', '20260730152731', '차량증가', '400000', NULL, 225, '0252', '25', '20260730152731', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '천안방향', 'E', '남공주IC 오룡교(232.0K)-남공주IC 검상천교(235.0K)', '3km 정체[2026-07-30 15:27- ]', '20260730152731', '차량증가', '400000', NULL, 225, '0252', '25', '20260730152731', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('인천공항선', 130, '13001', NULL, '공항방향', 'S', '[본선-공항] 20.8Km', '청라IC 진출 1km 정체[2026-07-30 15:30- ]', '20260730153000', '차량증가', '200000', NULL, 20.8, '1300', '130', '20260730153000', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('인천공항선', 130, '13001', NULL, '공항방향', 'S', '[본선-공항] 20.8Km', '청라IC 진출 1km 정체[2026-07-30 15:30- ]', '20260730153000', '차량증가', '200000', NULL, 20.8, '1300', '130', '20260730153000', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '조남분기점(107K)-수암터널(108K)', '1km정체[2026-07-30 16:06- ]', '20260730160627', '차량증가', '250000', NULL, 107, '1000', '100', '20260730160627', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '조남분기점(107K)-수암터널(108K)', '1km정체[2026-07-30 16:06- ]', '20260730160627', '차량증가', '250000', NULL, 107, '1000', '100', '20260730160627', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '화도(15K)-화도부근(13K)', '2km정체[2026-07-30 15:57- ]', '20260730155707', '차량증가', '300000', NULL, 15, '0600', '60', '20260730155707', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '화도(15K)-화도부근(13K)', '2km정체[2026-07-30 15:57- ]', '20260730155707', '차량증가', '300000', NULL, 15, '0600', '60', '20260730155707', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '영천분기점(91.5K)', '(3차로,갓길)화물차관련 사고 처리중[2026-07-30 14:47- ]', '20260730144715', '사고', '600000', NULL, 91.5, '0010', '1', '20260730144715', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '영천분기점(91.5K)', '(3차로,갓길)화물차관련 사고 처리중[2026-07-30 14:47- ]', '20260730144715', '사고', '600000', NULL, 91.5, '0010', '1', '20260730144715', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '서천(휴)부근(166.5K)', '(갓길)중형화물차 고장 처리중[2026-07-30 16:13- ]', '20260730161342', '고장', '800000', NULL, 166.5, '0150', '15', '20260730161342', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '서천(휴)부근(166.5K)', '(갓길)중형화물차 고장 처리중[2026-07-30 16:13- ]', '20260730161342', '고장', '800000', NULL, 166.5, '0150', '15', '20260730161342', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 서해대교(양방향) 정밀안전진단 3차로 주간 차단예정(6~10월) **', '20260605085938', '홍보', '400000', NULL, 0, '0150', '15', '20260605085938', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 서해대교(양방향) 정밀안전진단 3차로 주간 차단예정(6~10월) **', '20260605085938', '홍보', '400000', NULL, 0, '0150', '15', '20260605085938', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '천안방향', 'E', '남공주IC 오룡교(232.1K)', '1차로 승용차 관련 사고발생[2026-07-30 16:20- ]', '20260730162057', '사고', '400000', NULL, 225, '0252', '25', '20260730162057', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '천안방향', 'E', '남공주IC 오룡교(232.1K)', '1차로 승용차 관련 사고발생[2026-07-30 16:20- ]', '20260730162057', '사고', '400000', NULL, 225, '0252', '25', '20260730162057', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남지선', 251, '25101', NULL, '대전방향', 'E', '북대전부근(52K)-회덕분기점(54K)', '2km정체[2026-07-30 17:02- ]', '20260730170212', '차량증가', '400000', NULL, 52, '2510', '251', '20260730170212', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남지선', 251, '25101', NULL, '대전방향', 'E', '북대전부근(52K)-회덕분기점(54K)', '2km정체[2026-07-30 17:02- ]', '20260730170212', '차량증가', '400000', NULL, 52, '2510', '251', '20260730170212', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('인천대교선', 110, '11021', NULL, '송도방향', 'E', NULL, '** (민자 고속도로구간) 인천대교선 상황실 전화번호 032-745-8100 문의 바랍니다 **', '20250910001933', '홍보', '250000', NULL, 0, '1102', '110', '20250910001933', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('인천대교선', 110, '11021', NULL, '송도방향', 'E', NULL, '** (민자 고속도로구간) 인천대교선 상황실 전화번호 032-745-8100 문의 바랍니다 **', '20250910001933', '홍보', '250000', NULL, 0, '1102', '110', '20250910001933', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '서울방향', 'E', NULL, '** 경인1지하차도 홍익병원사거리 1차로 통제 2025.7.9 (수)~공사완료시까지 **', '20250910001852', '홍보', '250000', NULL, 0, '1200', '120', '20250910001852', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '서울방향', 'E', NULL, '** 경인1지하차도 홍익병원사거리 1차로 통제 2025.7.9 (수)~공사완료시까지 **', '20250910001852', '홍보', '250000', NULL, 0, '1200', '120', '20250910001852', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제2순환선(인천-김포)', 400, '40011', NULL, '김포방향', 'E', NULL, '** (민자 고속도로구간) 인천김포선 상황실 전화번호 032-292-7164 문의 바랍니다 **', '20251119153617', '홍보', '250000', NULL, 0, '4001', '400', '20251119153617', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제2순환선(인천-김포)', 400, '40011', NULL, '김포방향', 'E', NULL, '** (민자 고속도로구간) 인천김포선 상황실 전화번호 032-292-7164 문의 바랍니다 **', '20251119153617', '홍보', '250000', NULL, 0, '4001', '400', '20251119153617', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제3경인선', 330, '33001', NULL, '시흥방향', 'E', NULL, '** (민자 고속도로구간) 제3경인고속도로 상황실 031-8084-8901 문의바랍니다 **', '20240725161924', '홍보', '200000', NULL, 0, '3300', '330', '20240725161924', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제3경인선', 330, '33001', NULL, '시흥방향', 'E', NULL, '** (민자 고속도로구간) 제3경인고속도로 상황실 031-8084-8901 문의바랍니다 **', '20240725161924', '홍보', '200000', NULL, 0, '3300', '330', '20240725161924', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** 천안IC-천안분기점(부산) 방음시설 작업/4차로 21시~06시, 5차로 06시~21시 차단 25.9월~26.12월 **', '20250919075529', '홍보', '400000', NULL, 0, '0010', '1', '20250919075529', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** 천안IC-천안분기점(부산) 방음시설 작업/4차로 21시~06시, 5차로 06시~21시 차단 25.9월~26.12월 **', '20250919075529', '홍보', '400000', NULL, 0, '0010', '1', '20250919075529', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '서울방향', 'E', NULL, '** 인천대로 일반화 공사중(2단계)[주안산단고가교~서인천IC]2025.11.17~2031.03 **', '20251016103404', '홍보', '250000', NULL, 0, '1200', '120', '20251016103404', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '서울방향', 'E', NULL, '** 인천대로 일반화 공사중(2단계)[주안산단고가교~서인천IC]2025.11.17~2031.03 **', '20251016103404', '홍보', '250000', NULL, 0, '1200', '120', '20251016103404', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** (강릉방향) 생태습지 졸음쉼터 화장실 폐쇄 **', '20251117153247', '홍보', '300000', NULL, 0, '0500', '50', '20251117153247', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** (강릉방향) 생태습지 졸음쉼터 화장실 폐쇄 **', '20251117153247', '홍보', '300000', NULL, 0, '0500', '50', '20251117153247', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '판교분기점(128K)-판교분기점부근(126K)', '2km정체[2026-07-30 16:21- ]', '20260730162134', '차량증가', '200000', NULL, 128, '1000', '100', '20260730162134', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '판교분기점(128K)-판교분기점부근(126K)', '2km정체[2026-07-30 16:21- ]', '20260730162134', '차량증가', '200000', NULL, 128, '1000', '100', '20260730162134', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '기흥(388K)-신갈분기점(394K)', '6km정체[2026-07-30 16:47- ]', '20260730164739', '차량증가', '200000', NULL, 388, '0010', '1', '20260730164739', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '기흥(388K)-신갈분기점(394K)', '6km정체[2026-07-30 16:47- ]', '20260730164739', '차량증가', '200000', NULL, 388, '0010', '1', '20260730164739', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '성남부근(3K)-판교분기점(0K)', '3km정체[2026-07-30 16:21- ]', '20260730162117', '차량증가', '200000', NULL, 3, '1000', '100', '20260730162117', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '성남부근(3K)-판교분기점(0K)', '3km정체[2026-07-30 16:21- ]', '20260730162117', '차량증가', '200000', NULL, 3, '1000', '100', '20260730162117', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '현풍졸음쉼터(51.4K)', '** (창원방향) 시설물 작업 중 쉼터이용불가 **', '20260710150735', '홍보', '700000', NULL, 51.4, '0450', '45', '20260710150735', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '현풍졸음쉼터(51.4K)', '** (창원방향) 시설물 작업 중 쉼터이용불가 **', '20260710150735', '홍보', '700000', NULL, 51.4, '0450', '45', '20260710150735', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '서하남분기점(16K)-송파부근(7K)', '9km정체[2026-07-30 16:22- ]', '20260730162214', '차량증가', '200000', NULL, 16, '1000', '100', '20260730162214', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '일산방향', 'S', '서하남분기점(16K)-송파부근(7K)', '9km정체[2026-07-30 16:22- ]', '20260730162214', '차량증가', '200000', NULL, 16, '1000', '100', '20260730162214', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 서산(서울)주유소 영업중단(5.6~10.6)/휴게소 및 LPG충전소는 정상영업/홍성주유소 이용바람 **', '20260429075501', '홍보', '400000', NULL, 0, '0150', '15', '20260429075501', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 서산(서울)주유소 영업중단(5.6~10.6)/휴게소 및 LPG충전소는 정상영업/홍성주유소 이용바람 **', '20260429075501', '홍보', '400000', NULL, 0, '0150', '15', '20260429075501', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('새만금전주선', 20, '02021', NULL, '새만금방향', 'E', '석구터널(46.1K)', '(갓길)소형화물차 고장 처리중[2026-07-30 14:14- ]', '20260730141437', '고장', '800000', NULL, 46.1, '0202', '20', '20260730141437', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('새만금전주선', 20, '02021', NULL, '새만금방향', 'E', '석구터널(46.1K)', '(갓길)소형화물차 고장 처리중[2026-07-30 14:14- ]', '20260730141437', '고장', '800000', NULL, 46.1, '0202', '20', '20260730141437', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '동수원(37K)-북수원(30K)', '7km정체[2026-07-30 14:26- ]', '20260730142623', '차량증가', '250000', NULL, 37, '0500', '50', '20260730142623', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '동수원(37K)-북수원(30K)', '7km정체[2026-07-30 14:26- ]', '20260730142623', '차량증가', '250000', NULL, 37, '0500', '50', '20260730142623', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '인천방향', 'S', '인천요금소(16K)-서인천(11K)', '5km정체[2026-07-30 15:09- ]', '20260730150911', '차량증가', '250000', NULL, 16, '1200', '120', '20260730150911', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경인선', 120, '12001', NULL, '인천방향', 'S', '인천요금소(16K)-서인천(11K)', '5km정체[2026-07-30 15:09- ]', '20260730150911', '차량증가', '250000', NULL, 16, '1200', '120', '20260730150911', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '인천방향', 'S', '서창분기점(9K)-남동부근(6K)', '3km정체[2026-07-30 06:54- ]', '20260730065400', '차량증가', '250000', NULL, 9, '1100', '110', '20260730065400', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '인천방향', 'S', '서창분기점(9K)-남동부근(6K)', '3km정체[2026-07-30 06:54- ]', '20260730065400', '차량증가', '250000', NULL, 9, '1100', '110', '20260730065400', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '인천방향', 'S', '안현분기점(18K)-신천(14K)', '4km정체[2026-07-30 17:01- ]', '20260730170117', '차량증가', '250000', NULL, 18, '1100', '110', '20260730170117', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '인천방향', 'S', '안현분기점(18K)-신천(14K)', '4km정체[2026-07-30 17:01- ]', '20260730170117', '차량증가', '250000', NULL, 18, '1100', '110', '20260730170117', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 대천휴게소(양방향) 주유소 개선공사 이용불가 6. 1(월)~11.27(금) **', '20260531090003', '홍보', '800000', NULL, 0, '0150', '15', '20260531090003', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 대천휴게소(양방향) 주유소 개선공사 이용불가 6. 1(월)~11.27(금) **', '20260531090003', '홍보', '800000', NULL, 0, '0150', '15', '20260531090003', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** 서안산~북수원 확장공사 제한속도변경 100- 80km/h (8.30~26.12.31 ) **', '20250828051816', '홍보', '250000', NULL, 0, '0500', '50', '20250828051816', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** 서안산~북수원 확장공사 제한속도변경 100- 80km/h (8.30~26.12.31 ) **', '20250828051816', '홍보', '250000', NULL, 0, '0500', '50', '20250828051816', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택시흥선', 15, '01531', NULL, '시흥방향', 'E', NULL, '** (민자 고속도로구간) 평택시흥선 상황실 전화번호 1661-5688 문의 바랍니다 **', '20250912112159', '홍보', '250000', NULL, 0, '0153', '153', '20250912112159', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택시흥선', 15, '01531', NULL, '시흥방향', 'E', NULL, '** (민자 고속도로구간) 평택시흥선 상황실 전화번호 1661-5688 문의 바랍니다 **', '20250912112159', '홍보', '250000', NULL, 0, '0153', '153', '20250912112159', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** 영동선 이목졸음쉼터(강릉) 임시폐쇄 ''24.07.15. ~ ''26.08.29. **', '20251013121202', '홍보', '250000', NULL, 0, '0500', '50', '20251013121202', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** 영동선 이목졸음쉼터(강릉) 임시폐쇄 ''24.07.15. ~ ''26.08.29. **', '20251013121202', '홍보', '250000', NULL, 0, '0500', '50', '20251013121202', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** 영동선 이천졸음쉼터(인천방향) 폐쇄 (2025.8월~2027.5월 31. (23개월간) **', '20250814135609', '홍보', '200000', NULL, 0, '0500', '50', '20250814135609', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '강릉방향', 'E', NULL, '** 영동선 이천졸음쉼터(인천방향) 폐쇄 (2025.8월~2027.5월 31. (23개월간) **', '20250814135609', '홍보', '200000', NULL, 0, '0500', '50', '20250814135609', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('인천공항선', 130, '13001', NULL, '서울방향', 'E', NULL, '** (민자 고속도로구간) 인천공항선 상황실 전화번호 032-560-6100 문의 바랍니다 **', '20250623050208', '홍보', '200000', NULL, 0, '1300', '130', '20250623050208', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('인천공항선', 130, '13001', NULL, '서울방향', 'E', NULL, '** (민자 고속도로구간) 인천공항선 상황실 전화번호 032-560-6100 문의 바랍니다 **', '20250623050208', '홍보', '200000', NULL, 0, '1300', '130', '20250623050208', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('대전남부선', 300, '30001', NULL, '산내방향', 'E', NULL, '** 서대전부근(양방향) 방음벽 설치작업 26.7.10(금)~27.7.10(토) **', '20250910112809', '홍보', '400000', NULL, 0, '3000', '300', '20250910112809', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('대전남부선', 300, '30001', NULL, '산내방향', 'E', NULL, '** 서대전부근(양방향) 방음벽 설치작업 26.7.10(금)~27.7.10(토) **', '20250910112809', '홍보', '400000', NULL, 0, '3000', '300', '20250910112809', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '노오지분기점(79K)-송내(88K)', '9km정체[2026-07-30 05:11- ]', '20260730051106', '차량증가', '250000', NULL, 79, '1000', '100', '20260730051106', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '노오지분기점(79K)-송내(88K)', '9km정체[2026-07-30 05:11- ]', '20260730051106', '차량증가', '250000', NULL, 79, '1000', '100', '20260730051106', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '하남방향', 'E', '일죽부근(304K)-일죽부근(309K)', '5km정체[2026-07-30 16:09- ]', '20260730160933', '차량증가', '900000', NULL, 304, '0352', '35', '20260730160933', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '하남방향', 'E', '일죽부근(304K)-일죽부근(309K)', '5km정체[2026-07-30 16:09- ]', '20260730160933', '차량증가', '900000', NULL, 304, '0352', '35', '20260730160933', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('익산장수선', 20, '02011', NULL, '익산방향', 'S', '소양(16K)-소양부근(15K)', '(갓길) 덩쿨제거 작업중[2026-07-30 08:41- ]', '20260730084122', '작업', '800000', NULL, 16, '0201', '20', '20260730084122', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('익산장수선', 20, '02011', NULL, '익산방향', 'S', '소양(16K)-소양부근(15K)', '(갓길) 덩쿨제거 작업중[2026-07-30 08:41- ]', '20260730084122', '작업', '800000', NULL, 16, '0201', '20', '20260730084122', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', NULL, '** 섬진강휴게소(순천방향)주유소 영업중단, 개선공사 2026. 7.02~공사완료시까지 **', '20260624020608', '홍보', '500000', NULL, 0, '0100', '10', '20260624020608', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', NULL, '** 섬진강휴게소(순천방향)주유소 영업중단, 개선공사 2026. 7.02~공사완료시까지 **', '20260624020608', '홍보', '500000', NULL, 0, '0100', '10', '20260624020608', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '월곶분기점부근(6.3K)', '(2차로)고장차 처리중[2026-07-30 16:46- ]', '20260730164625', '고장', '250000', NULL, 6.3, '0500', '50', '20260730164625', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '월곶분기점부근(6.3K)', '(2차로)고장차 처리중[2026-07-30 16:46- ]', '20260730164625', '고장', '250000', NULL, 6.3, '0500', '50', '20260730164625', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중앙선', 55, '05502', NULL, '부산방향', 'S', '초정(5K)-삼락(0K)', '5km정체[2026-07-30 16:19- ]', '20260730161902', '차량증가', '700000', NULL, 5, '0550', '55', '20260730161902', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중앙선', 55, '05502', NULL, '부산방향', 'S', '초정(5K)-삼락(0K)', '5km정체[2026-07-30 16:19- ]', '20260730161902', '차량증가', '700000', NULL, 5, '0550', '55', '20260730161902', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '하남방향', 'E', NULL, '** 번천(통영)졸음쉼터 화장실 개선 공사로 인한 임시폐쇄 (2026.07.22(수)~2026.12.08(화)) **', '20260710122323', '홍보', '200000', NULL, 0, '0352', '35', '20260710122323', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '하남방향', 'E', NULL, '** 번천(통영)졸음쉼터 화장실 개선 공사로 인한 임시폐쇄 (2026.07.22(수)~2026.12.08(화)) **', '20260710122323', '홍보', '200000', NULL, 0, '0352', '35', '20260710122323', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '남이방향', 'S', '진천터널부근(277K)-진천터널부근(274K)', '3km정체[2026-07-30 14:10- ]', '20260730141034', '차량증가', '900000', NULL, 277, '0352', '35', '20260730141034', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '남이방향', 'S', '진천터널부근(277K)-진천터널부근(274K)', '3km정체[2026-07-30 14:10- ]', '20260730141034', '차량증가', '900000', NULL, 277, '0352', '35', '20260730141034', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '창원방향', 'S', '감곡부근(258K)-감곡부근(255K)', '3km정체[2026-07-30 09:46- ]', '20260730094639', '차량증가', '900000', NULL, 258, '0450', '45', '20260730094639', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '창원방향', 'S', '감곡부근(258K)-감곡부근(255K)', '3km정체[2026-07-30 09:46- ]', '20260730094639', '차량증가', '900000', NULL, 258, '0450', '45', '20260730094639', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '서평택분기점부근(295K)-화성(휴)부근(303K)', '8km정체[2026-07-30 14:09- ]', '20260730140943', '차량증가', '250000', NULL, 295, '0150', '15', '20260730140943', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '서평택분기점부근(295K)-화성(휴)부근(303K)', '8km정체[2026-07-30 14:09- ]', '20260730140943', '차량증가', '250000', NULL, 295, '0150', '15', '20260730140943', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** 판교분기점-금토분기점(양방향) 갓길 개량공사중(2026.05.26~2027.11.30) **', '20260526065333', '홍보', '200000', NULL, 0, '0010', '1', '20260526065333', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** 판교분기점-금토분기점(양방향) 갓길 개량공사중(2026.05.26~2027.11.30) **', '20260526065333', '홍보', '200000', NULL, 0, '0010', '1', '20260526065333', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', NULL, '** (양평방향) 96.5km 성주휴게소 수소충전소 이용불가 **', '20260725224834', '홍보', '600000', NULL, 0, '0450', '45', '20260725224834', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', NULL, '** (양평방향) 96.5km 성주휴게소 수소충전소 이용불가 **', '20260725224834', '홍보', '600000', NULL, 0, '0450', '45', '20260725224834', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '대전방향', 'E', NULL, '** 통영대전선 111.9k~115.4k(양방향)갓길 장기차단(5.28(목)~9.30(수)) **', '20260521081134', '홍보', '700000', NULL, 0, '0351', '35', '20260521081134', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '대전방향', 'E', NULL, '** 통영대전선 111.9k~115.4k(양방향)갓길 장기차단(5.28(목)~9.30(수)) **', '20260521081134', '홍보', '700000', NULL, 0, '0351', '35', '20260521081134', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '충주분기점부근(238K)-충주분기점부근(241K)', '3km정체[2026-07-30 13:27- ]', '20260730132759', '차량증가', '900000', NULL, 238, '0450', '45', '20260730132759', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '충주분기점부근(238K)-충주분기점부근(241K)', '3km정체[2026-07-30 13:27- ]', '20260730132759', '차량증가', '900000', NULL, 238, '0450', '45', '20260730132759', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '논산방향', 'S', '남풍세IC 호정 1교(268.0K)-차령터널 (263.0K)', '5km 정체[2026-07-28 14:03- ]', '20260728140304', '차량증가', '400000', NULL, 269, '0252', '25', '20260728140304', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('논산천안선', 25, '02521', NULL, '논산방향', 'S', '남풍세IC 호정 1교(268.0K)-차령터널 (263.0K)', '5km 정체[2026-07-28 14:03- ]', '20260728140304', '차량증가', '400000', NULL, 269, '0252', '25', '20260728140304', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** (갓길)동서천JCT(서울) 정체개선공사(2026. 5. 19 ~ 2026. 10. 30) **', '20260519113903', '홍보', '800000', NULL, 0, '0150', '15', '20260519113903', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** (갓길)동서천JCT(서울) 정체개선공사(2026. 5. 19 ~ 2026. 10. 30) **', '20260519113903', '홍보', '800000', NULL, 0, '0150', '15', '20260519113903', NULL);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '영산(24K)', '(진입로 갓길) 화물차 고장 처리 중[2026-07-30 16:58- ]', '20260730165823', '고장', '700000', NULL, 24, '0450', '45', '20260730165823', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '영산(24K)', '(진입로 갓길) 화물차 고장 처리 중[2026-07-30 16:58- ]', '20260730165823', '고장', '700000', NULL, 24, '0450', '45', '20260730165823', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 기상악화시 "당진IC~서평택IC" 제한속도 하향 단속(구간, 암행순찰) 시행 **', '20260128113835', '홍보', '400000', NULL, 0, '0150', '15', '20260128113835', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 기상악화시 "당진IC~서평택IC" 제한속도 하향 단속(구간, 암행순찰) 시행 **', '20260128113835', '홍보', '400000', NULL, 0, '0150', '15', '20260128113835', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '당진부근(267.3K)', '(갓길) 화물 고장차 처리중[2026-07-30 16:18- ]', '20260730161803', '고장', '400000', NULL, 267.3, '0150', '15', '20260730161803', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '당진부근(267.3K)', '(갓길) 화물 고장차 처리중[2026-07-30 16:18- ]', '20260730161803', '고장', '400000', NULL, 267.3, '0150', '15', '20260730161803', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '강일(24K)-구리남양주요금소(27K)', '3km정체[2026-07-30 16:23- ]', '20260730162344', '차량증가', '200000', NULL, 24, '1000', '100', '20260730162344', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('수도권제1순환선', 100, '10001', NULL, '판교방향', 'E', '강일(24K)-구리남양주요금소(27K)', '3km정체[2026-07-30 16:23- ]', '20260730162344', '차량증가', '200000', NULL, 24, '1000', '100', '20260730162344', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택제천선', 40, '04001', NULL, '평택방향', 'S', '대소분기점(57K)-안진터널(52K)', '5km정체[2026-07-30 15:55- ]', '20260730155518', '차량증가', '900000', NULL, 57, '0400', '40', '20260730155518', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택제천선', 40, '04001', NULL, '평택방향', 'S', '대소분기점(57K)-안진터널(52K)', '5km정체[2026-07-30 15:55- ]', '20260730155518', '차량증가', '900000', NULL, 57, '0400', '40', '20260730155518', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택제천선', 40, '04001', NULL, '평택방향', 'S', '서안성(25K)-안성분기점(24K)', '1km정체[2026-07-30 15:06- ]', '20260730150604', '차량증가', '250000', NULL, 25, '0400', '40', '20260730150604', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('평택제천선', 40, '04001', NULL, '평택방향', 'S', '서안성(25K)-안성분기점(24K)', '1km정체[2026-07-30 15:06- ]', '20260730150604', '차량증가', '250000', NULL, 25, '0400', '40', '20260730150604', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '판교분기점(408K)', '1km정체[2026-07-30 16:00- ]', '20260730160049', '차량증가', '200000', NULL, 408, '0010', '1', '20260730160049', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '판교분기점(408K)', '1km정체[2026-07-30 16:00- ]', '20260730160049', '차량증가', '200000', NULL, 408, '0010', '1', '20260730160049', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(부산-포항)', 65, '06521', NULL, '포항방향', 'E', '남경주부근(68K)-문무대왕1터널(74K)', '(2차로)노면보강 공사 작업중, 장기차단[2026-07-20 08:25- ]', '20260720082502', '작업', '700000', NULL, 68, '0652', '65', '20260720082502', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('동해선(부산-포항)', 65, '06521', NULL, '포항방향', 'E', '남경주부근(68K)-문무대왕1터널(74K)', '(2차로)노면보강 공사 작업중, 장기차단[2026-07-20 08:25- ]', '20260720082502', '작업', '700000', NULL, 68, '0652', '65', '20260720082502', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '덕소삼패(3K)-강일(0K)', '3km정체[2026-07-30 16:23- ]', '20260730162324', '차량증가', '300000', NULL, 3, '0600', '60', '20260730162324', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서울양양선', 60, '06001', NULL, '서울방향', 'S', '덕소삼패(3K)-강일(0K)', '3km정체[2026-07-30 16:23- ]', '20260730162324', '차량증가', '300000', NULL, 3, '0600', '60', '20260730162324', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '감곡(251K)-감곡부근(255K)', '4km정체[2026-07-30 16:23- ]', '20260730162343', '차량증가', '900000', NULL, 251, '0450', '45', '20260730162343', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '감곡(251K)-감곡부근(255K)', '4km정체[2026-07-30 16:23- ]', '20260730162343', '차량증가', '900000', NULL, 251, '0450', '45', '20260730162343', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '회덕분기점(277K)-회덕분기점부근(276K)', '1km정체[2026-07-30 16:33- ]', '20260730163326', '차량증가', '400000', NULL, 277, '0010', '1', '20260730163326', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '부산방향', 'S', '회덕분기점(277K)-회덕분기점부근(276K)', '1km정체[2026-07-30 16:33- ]', '20260730163326', '차량증가', '400000', NULL, 277, '0010', '1', '20260730163326', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남선', 25, '02511', NULL, '천안방향', 'E', NULL, '** 백양사휴게소(천안)수소충전소 운영중단(2026.7.27~수리완료시까지) **', '20260727035539', '홍보', '500000', NULL, 0, '0251', '25', '20260727035539', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('호남선', 25, '02511', NULL, '천안방향', 'E', NULL, '** 백양사휴게소(천안)수소충전소 운영중단(2026.7.27~수리완료시까지) **', '20260727035539', '홍보', '500000', NULL, 0, '0251', '25', '20260727035539', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** 평일 버스전용차로제 시행 중 (양방향) 한남-안성 (07시-21시) **', '20260704055541', '홍보', '200000', NULL, 0, '0010', '1', '20260704055541', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', NULL, '** 평일 버스전용차로제 시행 중 (양방향) 한남-안성 (07시-21시) **', '20260704055541', '홍보', '200000', NULL, 0, '0010', '1', '20260704055541', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', '김해졸음쉼터(153K)', '** (양방향) 화장실 이용불가 **', '20260616194929', '홍보', '700000', NULL, 153, '0100', '10', '20260616194929', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('남해선(순천-부산)', 10, '01001', NULL, '부산방향', 'E', '김해졸음쉼터(153K)', '** (양방향) 화장실 이용불가 **', '20260616194929', '홍보', '700000', NULL, 153, '0100', '10', '20260616194929', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '입장거봉포도(휴)부근(355K)-안성(360K)', '5km정체[2026-07-30 15:20- ]', '20260730152029', '차량증가', '400000', NULL, 355, '0010', '1', '20260730152029', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '입장거봉포도(휴)부근(355K)-안성(360K)', '5km정체[2026-07-30 15:20- ]', '20260730152029', '차량증가', '400000', NULL, 355, '0010', '1', '20260730152029', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '감곡부근(252.1K)', '(갓길)승합차고장 처리중[2026-07-30 16:11- ]', '20260730161104', '고장', '900000', NULL, 252.1, '0450', '45', '20260730161104', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부내륙선', 45, '04501', NULL, '양평방향', 'E', '감곡부근(252.1K)', '(갓길)승합차고장 처리중[2026-07-30 16:11- ]', '20260730161104', '고장', '900000', NULL, 252.1, '0450', '45', '20260730161104', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('순천완주선', 27, '02701', NULL, '완주방향', 'E', '서면2터널부근(10.7K)', '(갓길) 화물차 고장 처리중[2026-07-30 16:17- ]', '20260730161748', '고장', '500000', NULL, 10.7, '0270', '27', '20260730161748', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('순천완주선', 27, '02701', NULL, '완주방향', 'E', '서면2터널부근(10.7K)', '(갓길) 화물차 고장 처리중[2026-07-30 16:17- ]', '20260730161748', '고장', '500000', NULL, 10.7, '0270', '27', '20260730161748', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 화성휴게소(목포) 수소충전소 이용 불가 2026.7.29(수)~2026.7.31(금) **', '20260729140605', '홍보', '250000', NULL, 0, '0150', '15', '20260729140605', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', NULL, '** 화성휴게소(목포) 수소충전소 이용 불가 2026.7.29(수)~2026.7.31(금) **', '20260729140605', '홍보', '250000', NULL, 0, '0150', '15', '20260729140605', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '통영방향', 'S', '동고성(14.3K)', '(갓길)화물차 고장 처리중[2026-07-30 16:51- ]', '20260730165102', '고장', '700000', NULL, 14.3, '0351', '35', '20260730165102', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('통영대전선', 35, '03511', NULL, '통영방향', 'S', '동고성(14.3K)', '(갓길)화물차 고장 처리중[2026-07-30 16:51- ]', '20260730165102', '고장', '700000', NULL, 14.3, '0351', '35', '20260730165102', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '안성(휴)(370K)', '(갓길)보행자 조치중[2026-07-30 16:56- ]', '20260730165638', '기타', '200000', NULL, 370, '0010', '1', '20260730165638', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('경부선', 1, '00101', NULL, '서울방향', 'E', '안성(휴)(370K)', '(갓길)보행자 조치중[2026-07-30 16:56- ]', '20260730165638', '기타', '200000', NULL, 370, '0010', '1', '20260730165638', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '군자분기점(7K)-월곶분기점부근(4K)', '3km정체[2026-07-30 13:59- ]', '20260730135951', '차량증가', '250000', NULL, 7, '0500', '50', '20260730135951', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('영동선', 50, '05001', NULL, '인천방향', 'S', '군자분기점(7K)-월곶분기점부근(4K)', '3km정체[2026-07-30 13:59- ]', '20260730135951', '차량증가', '250000', NULL, 7, '0500', '50', '20260730135951', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '성남방향', 'E', '학익분기점(3K)-남동(8K)', '5km정체[2026-07-30 13:54- ]', '20260730135457', '차량증가', '250000', NULL, 3, '1100', '110', '20260730135457', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('제2경인선', 110, '11001', NULL, '성남방향', 'E', '학익분기점(3K)-남동(8K)', '5km정체[2026-07-30 13:54- ]', '20260730135457', '차량증가', '250000', NULL, 3, '1100', '110', '20260730135457', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '매송(휴)부근(315K)-용담터널(319K)', '4km정체[2026-07-30 14:10- ]', '20260730141000', '차량증가', '250000', NULL, 315, '0150', '15', '20260730141000', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('서해안선', 15, '01501', NULL, '서울방향', 'E', '매송(휴)부근(315K)-용담터널(319K)', '4km정체[2026-07-30 14:10- ]', '20260730141000', '차량증가', '250000', NULL, 315, '0150', '15', '20260730141000', NULL);
|
||||||
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '하남방향', 'E', '경기광주IC(352K)-중부1터널부근(355K)', '3km정체[2026-07-30 16:42- ]', '20260730164203', '차량증가', '200000', NULL, 352, '0352', '35', '20260730164203', NULL);
|
INSERT INTO OPR_MAIN.T_INCIDENT_FTMS (ROUTE, ROAD_NO, ROUTE_ID, WEATHER, UPDWNAME, UPDOWN, MILEPOST, CONTENTS, RAISE_TIME, INCIDENT_TYPE, REGION_ID, REGION_NAME, START_MILEPOST, INITIALCHAR, SEQ_NO, INCIDENT_ID, CONGZONE_ID) VALUES ('중부선', 35, '03521', NULL, '하남방향', 'E', '경기광주IC(352K)-중부1터널부근(355K)', '3km정체[2026-07-30 16:42- ]', '20260730164203', '차량증가', '200000', NULL, 352, '0352', '35', '20260730164203', NULL);
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|||||||
Regular → Executable
+196
-196
@@ -1,196 +1,196 @@
|
|||||||
-- 노선별 교통정보 개발서버용 스키마
|
-- 노선별 교통정보 개발서버용 스키마
|
||||||
--
|
--
|
||||||
-- 운영 뷰는 개발 Oracle에 없는 다수의 원천 테이블을 참조하므로,
|
-- 운영 뷰는 개발 Oracle에 없는 다수의 원천 테이블을 참조하므로,
|
||||||
-- 제공받은 뷰 결과 CSV를 물리 테이블에 적재하고 동일한 이름의 뷰로 노출한다.
|
-- 제공받은 뷰 결과 CSV를 물리 테이블에 적재하고 동일한 이름의 뷰로 노출한다.
|
||||||
|
|
||||||
SET DEFINE OFF
|
SET DEFINE OFF
|
||||||
SET SERVEROUTPUT ON
|
SET SERVEROUTPUT ON
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'CREATE USER TROAD_APP NO AUTHENTICATION';
|
EXECUTE IMMEDIATE 'CREATE USER TROAD_APP NO AUTHENTICATION';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -1920 THEN RAISE; END IF;
|
IF SQLCODE != -1920 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'CREATE USER TLISDEV NO AUTHENTICATION';
|
EXECUTE IMMEDIATE 'CREATE USER TLISDEV NO AUTHENTICATION';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -1920 THEN RAISE; END IF;
|
IF SQLCODE != -1920 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO TROAD_APP;
|
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO TROAD_APP;
|
||||||
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO TLISDEV;
|
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO TLISDEV;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE q'[
|
EXECUTE IMMEDIATE q'[
|
||||||
CREATE TABLE TLISDEV.T_TRMB_CD_INFO01M1 (
|
CREATE TABLE TLISDEV.T_TRMB_CD_INFO01M1 (
|
||||||
HGRN_CD_ID VARCHAR2(50) NOT NULL,
|
HGRN_CD_ID VARCHAR2(50) NOT NULL,
|
||||||
CMMN_CD VARCHAR2(20) NOT NULL,
|
CMMN_CD VARCHAR2(20) NOT NULL,
|
||||||
USE_XN VARCHAR2(1),
|
USE_XN VARCHAR2(1),
|
||||||
CMMN_CD_NM VARCHAR2(200),
|
CMMN_CD_NM VARCHAR2(200),
|
||||||
DETL_CTNT VARCHAR2(1000),
|
DETL_CTNT VARCHAR2(1000),
|
||||||
FSTTM_RGSR_ID VARCHAR2(30),
|
FSTTM_RGSR_ID VARCHAR2(30),
|
||||||
FSTTM_RGST_DTTM DATE,
|
FSTTM_RGST_DTTM DATE,
|
||||||
LSTTM_MODFR_ID VARCHAR2(30),
|
LSTTM_MODFR_ID VARCHAR2(30),
|
||||||
LSTTM_ALTR_DTTM DATE
|
LSTTM_ALTR_DTTM DATE
|
||||||
)
|
)
|
||||||
]';
|
]';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -955 THEN RAISE; END IF;
|
IF SQLCODE != -955 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'CREATE INDEX TLISDEV.IX_TRMB_CD_INFO_HGRN_CMMN ' ||
|
'CREATE INDEX TLISDEV.IX_TRMB_CD_INFO_HGRN_CMMN ' ||
|
||||||
'ON TLISDEV.T_TRMB_CD_INFO01M1 (HGRN_CD_ID, CMMN_CD)';
|
'ON TLISDEV.T_TRMB_CD_INFO01M1 (HGRN_CD_ID, CMMN_CD)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE q'[
|
EXECUTE IMMEDIATE q'[
|
||||||
CREATE TABLE TROAD_APP.T_ROUTE_NEW_NM (
|
CREATE TABLE TROAD_APP.T_ROUTE_NEW_NM (
|
||||||
ROUTECD VARCHAR2(4),
|
ROUTECD VARCHAR2(4),
|
||||||
GRPID VARCHAR2(2),
|
GRPID VARCHAR2(2),
|
||||||
ROUTESHORTNO NUMBER,
|
ROUTESHORTNO NUMBER,
|
||||||
ROUTENM VARCHAR2(100),
|
ROUTENM VARCHAR2(100),
|
||||||
ROUTESORT NUMBER,
|
ROUTESORT NUMBER,
|
||||||
UPDOWNDIR VARCHAR2(1),
|
UPDOWNDIR VARCHAR2(1),
|
||||||
ROUTEDIRNM VARCHAR2(100),
|
ROUTEDIRNM VARCHAR2(100),
|
||||||
ROUTELAYOVERNM VARCHAR2(200),
|
ROUTELAYOVERNM VARCHAR2(200),
|
||||||
OPER VARCHAR2(30),
|
OPER VARCHAR2(30),
|
||||||
HOINSTNM VARCHAR2(100),
|
HOINSTNM VARCHAR2(100),
|
||||||
RPRSTELNO VARCHAR2(30),
|
RPRSTELNO VARCHAR2(30),
|
||||||
CLSSCD VARCHAR2(10)
|
CLSSCD VARCHAR2(10)
|
||||||
)
|
)
|
||||||
]';
|
]';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -955 THEN RAISE; END IF;
|
IF SQLCODE != -955 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'CREATE INDEX TROAD_APP.IX_ROUTE_NEW_NM_NAME ' ||
|
'CREATE INDEX TROAD_APP.IX_ROUTE_NEW_NM_NAME ' ||
|
||||||
'ON TROAD_APP.T_ROUTE_NEW_NM (ROUTENM)';
|
'ON TROAD_APP.T_ROUTE_NEW_NM (ROUTENM)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'CREATE INDEX TROAD_APP.IX_ROUTE_NEW_NM_KEY ' ||
|
'CREATE INDEX TROAD_APP.IX_ROUTE_NEW_NM_KEY ' ||
|
||||||
'ON TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, UPDOWNDIR)';
|
'ON TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, UPDOWNDIR)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE q'[
|
EXECUTE IMMEDIATE q'[
|
||||||
CREATE TABLE TROAD_APP.T_ROUTE_TRFC_VER001 (
|
CREATE TABLE TROAD_APP.T_ROUTE_TRFC_VER001 (
|
||||||
NODE_NM VARCHAR2(100),
|
NODE_NM VARCHAR2(100),
|
||||||
CONZONE_ID VARCHAR2(30),
|
CONZONE_ID VARCHAR2(30),
|
||||||
ROUTE_NO_LIST VARCHAR2(100),
|
ROUTE_NO_LIST VARCHAR2(100),
|
||||||
LINK_LEN_KM NUMBER,
|
LINK_LEN_KM NUMBER,
|
||||||
BUS_YN VARCHAR2(1),
|
BUS_YN VARCHAR2(1),
|
||||||
ROUTESORT NUMBER,
|
ROUTESORT NUMBER,
|
||||||
SPEED NUMBER,
|
SPEED NUMBER,
|
||||||
SPEED_BUS NUMBER,
|
SPEED_BUS NUMBER,
|
||||||
TRAFFIC_GRADE VARCHAR2(1),
|
TRAFFIC_GRADE VARCHAR2(1),
|
||||||
TRAFFIC_GRADE_BUS VARCHAR2(1),
|
TRAFFIC_GRADE_BUS VARCHAR2(1),
|
||||||
CCTV_ID VARCHAR2(30),
|
CCTV_ID VARCHAR2(30),
|
||||||
CCTV_AREA VARCHAR2(200),
|
CCTV_AREA VARCHAR2(200),
|
||||||
HLS_URL VARCHAR2(500),
|
HLS_URL VARCHAR2(500),
|
||||||
FILEURL_IMG VARCHAR2(500),
|
FILEURL_IMG VARCHAR2(500),
|
||||||
INCIDENT_TYPE_CD VARCHAR2(10),
|
INCIDENT_TYPE_CD VARCHAR2(10),
|
||||||
INCIDENT_DESC VARCHAR2(200),
|
INCIDENT_DESC VARCHAR2(200),
|
||||||
MSG VARCHAR2(2000),
|
MSG VARCHAR2(2000),
|
||||||
INCIDENT_POS_NAME VARCHAR2(500),
|
INCIDENT_POS_NAME VARCHAR2(500),
|
||||||
DETR_ID VARCHAR2(30),
|
DETR_ID VARCHAR2(30),
|
||||||
SPEED_DETR NUMBER,
|
SPEED_DETR NUMBER,
|
||||||
TRAFFIC_GRADE_DETR VARCHAR2(1),
|
TRAFFIC_GRADE_DETR VARCHAR2(1),
|
||||||
RESTAREA_ID VARCHAR2(30),
|
RESTAREA_ID VARCHAR2(30),
|
||||||
RESTAREA_NM VARCHAR2(200),
|
RESTAREA_NM VARCHAR2(200),
|
||||||
CONZONE_X NUMBER,
|
CONZONE_X NUMBER,
|
||||||
CONZONE_Y NUMBER,
|
CONZONE_Y NUMBER,
|
||||||
DRIVE_DRCT_CD VARCHAR2(1),
|
DRIVE_DRCT_CD VARCHAR2(1),
|
||||||
SECT_SQNO NUMBER,
|
SECT_SQNO NUMBER,
|
||||||
ROUTE_CD VARCHAR2(4),
|
ROUTE_CD VARCHAR2(4),
|
||||||
GRP_ID VARCHAR2(2),
|
GRP_ID VARCHAR2(2),
|
||||||
WORK_CD VARCHAR2(10),
|
WORK_CD VARCHAR2(10),
|
||||||
VVALUE01 VARCHAR2(2000),
|
VVALUE01 VARCHAR2(2000),
|
||||||
VVALUE02 VARCHAR2(2000),
|
VVALUE02 VARCHAR2(2000),
|
||||||
VVALUE03 VARCHAR2(2000),
|
VVALUE03 VARCHAR2(2000),
|
||||||
VVALUE04 VARCHAR2(2000),
|
VVALUE04 VARCHAR2(2000),
|
||||||
VVALUE05 VARCHAR2(2000),
|
VVALUE05 VARCHAR2(2000),
|
||||||
VVALUE06 VARCHAR2(2000),
|
VVALUE06 VARCHAR2(2000),
|
||||||
VVALUE07 VARCHAR2(2000),
|
VVALUE07 VARCHAR2(2000),
|
||||||
VVALUE08 VARCHAR2(2000),
|
VVALUE08 VARCHAR2(2000),
|
||||||
VVALUE09 VARCHAR2(2000)
|
VVALUE09 VARCHAR2(2000)
|
||||||
)
|
)
|
||||||
]';
|
]';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -955 THEN RAISE; END IF;
|
IF SQLCODE != -955 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'CREATE INDEX TROAD_APP.IX_ROUTE_TRFC_ROUTE ' ||
|
'CREATE INDEX TROAD_APP.IX_ROUTE_TRFC_ROUTE ' ||
|
||||||
'ON TROAD_APP.T_ROUTE_TRFC_VER001 ' ||
|
'ON TROAD_APP.T_ROUTE_TRFC_VER001 ' ||
|
||||||
'(ROUTE_CD, GRP_ID, DRIVE_DRCT_CD, SECT_SQNO)';
|
'(ROUTE_CD, GRP_ID, DRIVE_DRCT_CD, SECT_SQNO)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'CREATE INDEX TROAD_APP.IX_ROUTE_TRFC_CONZONE ' ||
|
'CREATE INDEX TROAD_APP.IX_ROUTE_TRFC_CONZONE ' ||
|
||||||
'ON TROAD_APP.T_ROUTE_TRFC_VER001 (CONZONE_ID, DRIVE_DRCT_CD)';
|
'ON TROAD_APP.T_ROUTE_TRFC_VER001 (CONZONE_ID, DRIVE_DRCT_CD)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW TROAD_APP.V_ROUTE_NEW_NM AS
|
CREATE OR REPLACE VIEW TROAD_APP.V_ROUTE_NEW_NM AS
|
||||||
SELECT ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR,
|
SELECT ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR,
|
||||||
ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD
|
ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD
|
||||||
FROM TROAD_APP.T_ROUTE_NEW_NM;
|
FROM TROAD_APP.T_ROUTE_NEW_NM;
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW TROAD_APP.V_ROUTE_TRFC_VER001 AS
|
CREATE OR REPLACE VIEW TROAD_APP.V_ROUTE_TRFC_VER001 AS
|
||||||
SELECT NODE_NM, CONZONE_ID, ROUTE_NO_LIST, LINK_LEN_KM, BUS_YN, ROUTESORT,
|
SELECT NODE_NM, CONZONE_ID, ROUTE_NO_LIST, LINK_LEN_KM, BUS_YN, ROUTESORT,
|
||||||
SPEED, SPEED_BUS, TRAFFIC_GRADE, TRAFFIC_GRADE_BUS, CCTV_ID, CCTV_AREA,
|
SPEED, SPEED_BUS, TRAFFIC_GRADE, TRAFFIC_GRADE_BUS, CCTV_ID, CCTV_AREA,
|
||||||
HLS_URL, FILEURL_IMG, INCIDENT_TYPE_CD, INCIDENT_DESC, MSG,
|
HLS_URL, FILEURL_IMG, INCIDENT_TYPE_CD, INCIDENT_DESC, MSG,
|
||||||
INCIDENT_POS_NAME, DETR_ID, SPEED_DETR, TRAFFIC_GRADE_DETR,
|
INCIDENT_POS_NAME, DETR_ID, SPEED_DETR, TRAFFIC_GRADE_DETR,
|
||||||
RESTAREA_ID, RESTAREA_NM, CONZONE_X, CONZONE_Y, DRIVE_DRCT_CD,
|
RESTAREA_ID, RESTAREA_NM, CONZONE_X, CONZONE_Y, DRIVE_DRCT_CD,
|
||||||
SECT_SQNO, ROUTE_CD, GRP_ID, WORK_CD, VVALUE01, VVALUE02, VVALUE03,
|
SECT_SQNO, ROUTE_CD, GRP_ID, WORK_CD, VVALUE01, VVALUE02, VVALUE03,
|
||||||
VVALUE04, VVALUE05, VVALUE06, VVALUE07, VVALUE08, VVALUE09
|
VVALUE04, VVALUE05, VVALUE06, VVALUE07, VVALUE08, VVALUE09
|
||||||
FROM TROAD_APP.T_ROUTE_TRFC_VER001;
|
FROM TROAD_APP.T_ROUTE_TRFC_VER001;
|
||||||
|
|
||||||
GRANT SELECT ON TLISDEV.T_TRMB_CD_INFO01M1 TO OPR_MAIN;
|
GRANT SELECT ON TLISDEV.T_TRMB_CD_INFO01M1 TO OPR_MAIN;
|
||||||
GRANT SELECT ON TROAD_APP.V_ROUTE_NEW_NM TO OPR_MAIN;
|
GRANT SELECT ON TROAD_APP.V_ROUTE_NEW_NM TO OPR_MAIN;
|
||||||
GRANT SELECT ON TROAD_APP.V_ROUTE_TRFC_VER001 TO OPR_MAIN;
|
GRANT SELECT ON TROAD_APP.V_ROUTE_TRFC_VER001 TO OPR_MAIN;
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW OPR_MAIN.V_ROUTE_NEW_NM AS
|
CREATE OR REPLACE VIEW OPR_MAIN.V_ROUTE_NEW_NM AS
|
||||||
SELECT * FROM TROAD_APP.V_ROUTE_NEW_NM;
|
SELECT * FROM TROAD_APP.V_ROUTE_NEW_NM;
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW OPR_MAIN.V_ROUTE_TRFC_VER001 AS
|
CREATE OR REPLACE VIEW OPR_MAIN.V_ROUTE_TRFC_VER001 AS
|
||||||
SELECT * FROM TROAD_APP.V_ROUTE_TRFC_VER001;
|
SELECT * FROM TROAD_APP.V_ROUTE_TRFC_VER001;
|
||||||
|
|
||||||
|
|||||||
Regular → Executable
Regular → Executable
+151
-151
@@ -1,151 +1,151 @@
|
|||||||
-- 자동 생성: V_ROUTE_NEW_NM_202607310912.csv -> TROAD_APP.T_ROUTE_NEW_NM
|
-- 자동 생성: V_ROUTE_NEW_NM_202607310912.csv -> TROAD_APP.T_ROUTE_NEW_NM
|
||||||
-- 행 수: 138
|
-- 행 수: 138
|
||||||
-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py
|
-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py
|
||||||
|
|
||||||
SET DEFINE OFF
|
SET DEFINE OFF
|
||||||
SET SQLBLANKLINES ON
|
SET SQLBLANKLINES ON
|
||||||
|
|
||||||
DELETE FROM TROAD_APP.T_ROUTE_NEW_NM;
|
DELETE FROM TROAD_APP.T_ROUTE_NEW_NM;
|
||||||
|
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '1', 17, '평택화성선', 6, 'S', '오성', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '1', 17, '평택화성선', 6, 'S', '오성', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0200', '1', 20, '대구포항선', 6, 'S', '대구', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0200', '1', 20, '대구포항선', 6, 'S', '대구', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0201', '1', 20, '익산장수선', 6, 'S', '익산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0201', '1', 20, '익산장수선', 6, 'S', '익산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0251', '1', 25, '호남선', 6, 'S', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0251', '1', 25, '호남선', 6, 'S', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0270', '1', 27, '순천완주선', 6, 'S', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0270', '1', 27, '순천완주선', 6, 'S', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0290', '1', 29, '세종포천선(안성-포천)', 6, 'S', '안성', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0290', '1', 29, '세종포천선(안성-포천)', 6, 'S', '안성', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0300', '1', 30, '청주영덕선', 6, 'S', '청주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0300', '1', 30, '청주영덕선', 6, 'S', '청주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0301', '1', 30, '당진대전선', 6, 'S', '당진', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0301', '1', 30, '당진대전선', 6, 'S', '당진', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0351', '1', 35, '통영대전선', 6, 'S', '통영', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0351', '1', 35, '통영대전선', 6, 'S', '통영', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0352', '1', 35, '중부선', 3, 'S', '남이', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0352', '1', 35, '중부선', 3, 'S', '남이', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0370', '1', 37, '제2중부선', 6, 'S', '이천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0370', '1', 37, '제2중부선', 6, 'S', '이천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0400', '1', 40, '평택제천선', 6, 'S', '평택', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0400', '1', 40, '평택제천선', 6, 'S', '평택', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0450', '1', 45, '중부내륙선', 6, 'S', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0450', '1', 45, '중부내륙선', 6, 'S', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0500', '1', 50, '영동선', 4, 'S', '인천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0500', '1', 50, '영동선', 4, 'S', '인천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0520', '1', 52, '광주원주선', 6, 'S', '광주', NULL, '공영', '제이영동고속도로㈜', '1877-0200', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0520', '1', 52, '광주원주선', 6, 'S', '광주', NULL, '공영', '제이영동고속도로㈜', '1877-0200', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0550', '2', 55, '중앙선', 6, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0550', '2', 55, '중앙선', 6, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0552', '1', 55, '대구부산선', 6, 'S', '부산', NULL, '공영', '신대구부산고속도로㈜', '1688-7003', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0552', '1', 55, '대구부산선', 6, 'S', '부산', NULL, '공영', '신대구부산고속도로㈜', '1688-7003', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0600', '1', 60, '서울양양선', 6, 'S', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0600', '1', 60, '서울양양선', 6, 'S', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0650', '1', 65, '동해선(삼척-속초)', 6, 'S', '삼척', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0650', '1', 65, '동해선(삼척-속초)', 6, 'S', '삼척', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0651', '1', 65, '부산울산선', 6, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0651', '1', 65, '부산울산선', 6, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0652', '1', 65, '동해선(부산-포항)', 6, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0652', '1', 65, '동해선(부산-포항)', 6, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1000', '1', 100, '수도권제1순환선', 5, 'S', '일산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1000', '1', 100, '수도권제1순환선', 5, 'S', '일산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1020', '1', 102, '남해1지선', 6, 'S', '함안', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1020', '1', 102, '남해1지선', 6, 'S', '함안', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1040', '1', 104, '남해2지선', 6, 'S', '김해', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1040', '1', 104, '남해2지선', 6, 'S', '김해', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1100', '1', 110, '제2경인선', 6, 'S', '인천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1100', '1', 110, '제2경인선', 6, 'S', '인천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1102', '1', 110, '인천대교선', 6, 'S', '공항', NULL, '공영', '인천대교㈜', '032-745-8000', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1102', '1', 110, '인천대교선', 6, 'S', '공항', NULL, '공영', '인천대교㈜', '032-745-8000', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1200', '1', 120, '경인선', 6, 'S', '인천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1200', '1', 120, '경인선', 6, 'S', '인천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1300', '1', 130, '인천공항선', 6, 'S', '공항', NULL, '공영', '신공항하이웨이㈜', '032-560-6114', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1300', '1', 130, '인천공항선', 6, 'S', '공항', NULL, '공영', '신공항하이웨이㈜', '032-560-6114', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1510', '1', 151, '서천공주선', 6, 'S', '서천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1510', '1', 151, '서천공주선', 6, 'S', '서천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1710', '1', 171, '용인서울선', 6, 'S', '용인', NULL, '공영', '경수고속도로㈜', '1599-2505', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1710', '1', 171, '용인서울선', 6, 'S', '용인', NULL, '공영', '경수고속도로㈜', '1599-2505', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('2510', '1', 251, '호남지선', 6, 'S', '논산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('2510', '1', 251, '호남지선', 6, 'S', '논산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3000', '1', 300, '대전남부선', 6, 'S', '서대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3000', '1', 300, '대전남부선', 6, 'S', '서대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3010', '1', 301, '상주영천선', 6, 'S', '상주', NULL, '공영', '상주영천고속도로㈜', '1877-1925', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3010', '1', 301, '상주영천선', 6, 'S', '상주', NULL, '공영', '상주영천고속도로㈜', '1877-1925', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3300', '1', 330, '제3경인선', 6, 'S', '인천', NULL, '공영', '제삼경인고속도로㈜', '031-8084-8900', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3300', '1', 330, '제3경인선', 6, 'S', '인천', NULL, '공영', '제삼경인고속도로㈜', '031-8084-8900', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4000', '1', 400, '수도권제2순환선(봉담-동탄)', 6, 'S', '동탄', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4000', '1', 400, '수도권제2순환선(봉담-동탄)', 6, 'S', '동탄', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4001', '1', 400, '수도권제2순환선(인천-김포)', 6, 'S', '인천', NULL, '공영', '인천김포고속도로㈜', '1566-7069', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4001', '1', 400, '수도권제2순환선(인천-김포)', 6, 'S', '인천', NULL, '공영', '인천김포고속도로㈜', '1566-7069', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4002', '1', 400, '수도권제2순환선(파주-포천)', 6, 'S', '포천', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4002', '1', 400, '수도권제2순환선(파주-포천)', 6, 'S', '포천', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4510', '1', 451, '중부내륙지선', 6, 'S', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4510', '1', 451, '중부내륙지선', 6, 'S', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5510', '1', 551, '중앙선지선', 6, 'S', '김해', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5510', '1', 551, '중앙선지선', 6, 'S', '김해', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0252', '1', 25, '논산천안선', 6, 'S', '논산', NULL, '공영', '천안논산고속도로㈜', '041-850-6700', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0252', '1', 25, '논산천안선', 6, 'S', '논산', NULL, '공영', '천안논산고속도로㈜', '041-850-6700', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0320', '1', 32, '당진청주선(옥산-오창)', 6, 'S', '옥산', NULL, '공영', '옥산오창고속도로㈜', '1877-1108', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0320', '1', 32, '당진청주선(옥산-오창)', 6, 'S', '옥산', NULL, '공영', '옥산오창고속도로㈜', '1877-1108', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('6000', '1', 600, '부산외곽선', 6, 'S', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('6000', '1', 600, '부산외곽선', 6, 'S', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0173', '1', 173, '서울문산지선', 6, 'S', '서울', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0173', '1', 173, '서울문산지선', 6, 'S', '서울', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0172', '1', 17, '서울문산선', 6, 'S', '서울', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0172', '1', 17, '서울문산선', 6, 'S', '서울', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0141', '1', 14, '함양울산선', 6, 'S', '함양', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0141', '1', 14, '함양울산선', 6, 'S', '함양', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4003', '1', 400, '수도권제2순환선(송산-봉담)', 6, 'S', '봉담', NULL, '공영', '경기동서순환고속도로㈜', '1877-0427', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4003', '1', 400, '수도권제2순환선(송산-봉담)', 6, 'S', '봉담', NULL, '공영', '경기동서순환고속도로㈜', '1877-0427', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4004', '1', 400, '수도권제2순환선(화성-광주)', 6, 'S', '화성', NULL, '공영', '화성광주고속도로㈜', '1877-0380', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4004', '1', 400, '수도권제2순환선(화성-광주)', 6, 'S', '화성', NULL, '공영', '화성광주고속도로㈜', '1877-0380', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0700', '1', 700, '대구외곽선', 6, 'S', '달서', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0700', '1', 700, '대구외곽선', 6, 'S', '달서', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4005', '1', 400, '수도권제2순환선(화도-양평)', 6, 'S', '양평', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4005', '1', 400, '수도권제2순환선(화도-양평)', 6, 'S', '양평', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5000', '1', 500, '광주외곽선', 6, 'S', '광주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5000', '1', 500, '광주외곽선', 6, 'S', '광주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0010', '1', 1, '경부선', 1, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0010', '1', 1, '경부선', 1, 'S', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0100', '1', 10, '남해선(순천-부산)', 6, 'S', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0100', '1', 10, '남해선(순천-부산)', 6, 'S', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0101', '1', 101, '남해선(영암-순천)', 6, 'S', '영암', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0101', '1', 101, '남해선(영암-순천)', 6, 'S', '영암', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0105', '1', 105, '부산신항선', 6, 'S', '신항', NULL, '공영', '부산신항제이배후도로㈜', '055-339-7164', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0105', '1', 105, '부산신항선', 6, 'S', '신항', NULL, '공영', '부산신항제이배후도로㈜', '055-339-7164', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0120', '1', 12, '광주대구선', 6, 'S', '광주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0120', '1', 12, '광주대구선', 6, 'S', '광주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0121', '1', 12, '무안광주선', 6, 'S', '무안', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0121', '1', 12, '무안광주선', 6, 'S', '무안', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0140', '1', 253, '고창담양선', 6, 'S', '고창', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0140', '1', 253, '고창담양선', 6, 'S', '고창', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0150', '1', 15, '서해안선', 2, 'S', '목포', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0150', '1', 15, '서해안선', 2, 'S', '목포', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0153', '1', 153, '평택시흥선', 6, 'S', '평택', NULL, '공영', '제2서해안고속도로㈜', '1661-5688', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0153', '1', 153, '평택시흥선', 6, 'S', '평택', NULL, '공영', '제2서해안고속도로㈜', '1661-5688', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0160', '1', 16, '울산선', 6, 'S', '언양', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0160', '1', 16, '울산선', 6, 'S', '언양', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '3', 171, '오산화성선', 6, 'S', '서오산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '3', 171, '오산화성선', 6, 'S', '서오산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '2', 17, '수원광명선', 6, 'S', '봉담', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '2', 17, '수원광명선', 6, 'S', '봉담', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0321', '1', 32, '당진청주선(아산-천안)', 6, 'S', '천안', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0321', '1', 32, '당진청주선(아산-천안)', 6, 'S', '천안', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4006', '1', 400, '수도권제2순환선(시화-남안산)', 6, 'S', '남안산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4006', '1', 400, '수도권제2순환선(시화-남안산)', 6, 'S', '남안산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4007', '1', 400, '수도권제2순환선(포천-화도)', 6, 'S', '포천', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4007', '1', 400, '수도권제2순환선(포천-화도)', 6, 'S', '포천', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1730', '1', 173, '익산평택지선', 6, 'S', '현덕', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1730', '1', 173, '익산평택지선', 6, 'S', '현덕', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0175', '1', 17, '익산평택선', 6, 'S', '익산', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0175', '1', 17, '익산평택선', 6, 'S', '익산', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0653', '1', 65, '동해선(포항-영덕)', 6, 'S', '포항', NULL, '공영', NULL, NULL, '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0653', '1', 65, '동해선(포항-영덕)', 6, 'S', '포항', NULL, '공영', NULL, NULL, '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0202', '1', 20, '새만금전주선', 6, 'S', '전주', NULL, '공영', NULL, NULL, '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0202', '1', 20, '새만금전주선', 6, 'S', '전주', NULL, '공영', NULL, NULL, '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '1', 17, '평택화성선', 6, 'E', '봉담', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '1', 17, '평택화성선', 6, 'E', '봉담', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0200', '1', 20, '대구포항선', 6, 'E', '포항', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0200', '1', 20, '대구포항선', 6, 'E', '포항', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0201', '1', 20, '익산장수선', 6, 'E', '장수', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0201', '1', 20, '익산장수선', 6, 'E', '장수', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0251', '1', 25, '호남선', 6, 'E', '천안', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0251', '1', 25, '호남선', 6, 'E', '천안', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0270', '1', 27, '순천완주선', 6, 'E', '완주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0270', '1', 27, '순천완주선', 6, 'E', '완주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0290', '1', 29, '세종포천선(안성-포천)', 6, 'E', '포천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0290', '1', 29, '세종포천선(안성-포천)', 6, 'E', '포천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0300', '1', 30, '청주영덕선', 6, 'E', '영덕', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0300', '1', 30, '청주영덕선', 6, 'E', '영덕', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0301', '1', 30, '당진대전선', 6, 'E', '대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0301', '1', 30, '당진대전선', 6, 'E', '대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0351', '1', 35, '통영대전선', 6, 'E', '대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0351', '1', 35, '통영대전선', 6, 'E', '대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0352', '1', 35, '중부선', 3, 'E', '하남', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0352', '1', 35, '중부선', 3, 'E', '하남', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0370', '1', 37, '제2중부선', 6, 'E', '하남', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0370', '1', 37, '제2중부선', 6, 'E', '하남', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0400', '1', 40, '평택제천선', 6, 'E', '제천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0400', '1', 40, '평택제천선', 6, 'E', '제천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0450', '1', 45, '중부내륙선', 6, 'E', '양평', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0450', '1', 45, '중부내륙선', 6, 'E', '양평', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0500', '1', 50, '영동선', 4, 'E', '강릉', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0500', '1', 50, '영동선', 4, 'E', '강릉', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0520', '1', 52, '광주원주선', 6, 'E', '원주', NULL, '공영', '제이영동고속도로㈜', '1877-0200', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0520', '1', 52, '광주원주선', 6, 'E', '원주', NULL, '공영', '제이영동고속도로㈜', '1877-0200', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0550', '2', 55, '중앙선', 6, 'E', '춘천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0550', '2', 55, '중앙선', 6, 'E', '춘천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0552', '1', 55, '대구부산선', 6, 'E', '대구', NULL, '공영', '신대구부산고속도로㈜', '1688-7003', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0552', '1', 55, '대구부산선', 6, 'E', '대구', NULL, '공영', '신대구부산고속도로㈜', '1688-7003', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0600', '1', 60, '서울양양선', 6, 'E', '양양', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0600', '1', 60, '서울양양선', 6, 'E', '양양', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0650', '1', 65, '동해선(삼척-속초)', 6, 'E', '속초', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0650', '1', 65, '동해선(삼척-속초)', 6, 'E', '속초', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0651', '1', 65, '부산울산선', 6, 'E', '울산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0651', '1', 65, '부산울산선', 6, 'E', '울산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0652', '1', 65, '동해선(부산-포항)', 6, 'E', '포항', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0652', '1', 65, '동해선(부산-포항)', 6, 'E', '포항', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1000', '1', 100, '수도권제1순환선', 5, 'E', '판교', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1000', '1', 100, '수도권제1순환선', 5, 'E', '판교', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1020', '1', 102, '남해1지선', 6, 'E', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1020', '1', 102, '남해1지선', 6, 'E', '창원', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1040', '1', 104, '남해2지선', 6, 'E', '서부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1040', '1', 104, '남해2지선', 6, 'E', '서부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1100', '1', 110, '제2경인선', 6, 'E', '성남', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1100', '1', 110, '제2경인선', 6, 'E', '성남', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1102', '1', 110, '인천대교선', 6, 'E', '송도', NULL, '공영', '인천대교㈜', '032-745-8000', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1102', '1', 110, '인천대교선', 6, 'E', '송도', NULL, '공영', '인천대교㈜', '032-745-8000', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1200', '1', 120, '경인선', 6, 'E', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1200', '1', 120, '경인선', 6, 'E', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1300', '1', 130, '인천공항선', 6, 'E', '서울', NULL, '공영', '신공항하이웨이㈜', '032-560-6114', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1300', '1', 130, '인천공항선', 6, 'E', '서울', NULL, '공영', '신공항하이웨이㈜', '032-560-6114', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1510', '1', 151, '서천공주선', 6, 'E', '공주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1510', '1', 151, '서천공주선', 6, 'E', '공주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1710', '1', 171, '용인서울선', 6, 'E', '서울', NULL, '공영', '경수고속도로㈜', '1599-2505', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1710', '1', 171, '용인서울선', 6, 'E', '서울', NULL, '공영', '경수고속도로㈜', '1599-2505', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('2510', '1', 251, '호남지선', 6, 'E', '대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('2510', '1', 251, '호남지선', 6, 'E', '대전', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3000', '1', 300, '대전남부선', 6, 'E', '산내', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3000', '1', 300, '대전남부선', 6, 'E', '산내', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3010', '1', 301, '상주영천선', 6, 'E', '영천', NULL, '공영', '상주영천고속도로㈜', '1877-1925', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3010', '1', 301, '상주영천선', 6, 'E', '영천', NULL, '공영', '상주영천고속도로㈜', '1877-1925', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3300', '1', 330, '제3경인선', 6, 'E', '시흥', NULL, '공영', '제삼경인고속도로㈜', '031-8084-8900', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('3300', '1', 330, '제3경인선', 6, 'E', '시흥', NULL, '공영', '제삼경인고속도로㈜', '031-8084-8900', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4000', '1', 400, '수도권제2순환선(봉담-동탄)', 6, 'E', '봉담', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4000', '1', 400, '수도권제2순환선(봉담-동탄)', 6, 'E', '봉담', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4001', '1', 400, '수도권제2순환선(인천-김포)', 6, 'E', '김포', NULL, '공영', '인천김포고속도로㈜', '1566-7069', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4001', '1', 400, '수도권제2순환선(인천-김포)', 6, 'E', '김포', NULL, '공영', '인천김포고속도로㈜', '1566-7069', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4002', '1', 400, '수도권제2순환선(파주-포천)', 6, 'E', '파주', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4002', '1', 400, '수도권제2순환선(파주-포천)', 6, 'E', '파주', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4510', '1', 451, '중부내륙지선', 6, 'E', '대구', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4510', '1', 451, '중부내륙지선', 6, 'E', '대구', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5510', '1', 551, '중앙선지선', 6, 'E', '양산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5510', '1', 551, '중앙선지선', 6, 'E', '양산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0252', '1', 25, '논산천안선', 6, 'E', '천안', NULL, '공영', '천안논산고속도로㈜', '041-850-6700', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0252', '1', 25, '논산천안선', 6, 'E', '천안', NULL, '공영', '천안논산고속도로㈜', '041-850-6700', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0320', '1', 32, '당진청주선(옥산-오창)', 6, 'E', '오창', NULL, '공영', '옥산오창고속도로㈜', '1877-1108', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0320', '1', 32, '당진청주선(옥산-오창)', 6, 'E', '오창', NULL, '공영', '옥산오창고속도로㈜', '1877-1108', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('6000', '1', 600, '부산외곽선', 6, 'E', '기장', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('6000', '1', 600, '부산외곽선', 6, 'E', '기장', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0173', '1', 173, '서울문산지선', 6, 'E', '문산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0173', '1', 173, '서울문산지선', 6, 'E', '문산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0172', '1', 17, '서울문산선', 6, 'E', '문산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0172', '1', 17, '서울문산선', 6, 'E', '문산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0141', '1', 14, '함양울산선', 6, 'E', '울산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0141', '1', 14, '함양울산선', 6, 'E', '울산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4003', '1', 400, '수도권제2순환선(송산-봉담)', 6, 'E', '송산', NULL, '공영', '경기동서순환고속도로㈜', '1877-0427', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4003', '1', 400, '수도권제2순환선(송산-봉담)', 6, 'E', '송산', NULL, '공영', '경기동서순환고속도로㈜', '1877-0427', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4004', '1', 400, '수도권제2순환선(화성-광주)', 6, 'E', '광주', NULL, '공영', '화성광주고속도로㈜', '1877-0380', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4004', '1', 400, '수도권제2순환선(화성-광주)', 6, 'E', '광주', NULL, '공영', '화성광주고속도로㈜', '1877-0380', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0700', '1', 700, '대구외곽선', 6, 'E', '상매', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0700', '1', 700, '대구외곽선', 6, 'E', '상매', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4005', '1', 400, '수도권제2순환선(화도-양평)', 6, 'E', '화도', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4005', '1', 400, '수도권제2순환선(화도-양평)', 6, 'E', '화도', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5000', '1', 500, '광주외곽선', 6, 'E', '장성', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('5000', '1', 500, '광주외곽선', 6, 'E', '장성', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0010', '1', 1, '경부선', 1, 'E', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0010', '1', 1, '경부선', 1, 'E', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0100', '1', 10, '남해선(순천-부산)', 6, 'E', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0100', '1', 10, '남해선(순천-부산)', 6, 'E', '부산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0101', '1', 101, '남해선(영암-순천)', 6, 'E', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0101', '1', 101, '남해선(영암-순천)', 6, 'E', '순천', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0105', '1', 105, '부산신항선', 6, 'E', '김해', NULL, '공영', '부산신항제이배후도로㈜', '055-339-7164', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0105', '1', 105, '부산신항선', 6, 'E', '김해', NULL, '공영', '부산신항제이배후도로㈜', '055-339-7164', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0120', '1', 12, '광주대구선', 6, 'E', '대구', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0120', '1', 12, '광주대구선', 6, 'E', '대구', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0121', '1', 12, '무안광주선', 6, 'E', '광주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0121', '1', 12, '무안광주선', 6, 'E', '광주', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0140', '1', 253, '고창담양선', 6, 'E', '담양', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0140', '1', 253, '고창담양선', 6, 'E', '담양', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0150', '1', 15, '서해안선', 2, 'E', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0150', '1', 15, '서해안선', 2, 'E', '서울', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0153', '1', 153, '평택시흥선', 6, 'E', '시흥', NULL, '공영', '제2서해안고속도로㈜', '1661-5688', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0153', '1', 153, '평택시흥선', 6, 'E', '시흥', NULL, '공영', '제2서해안고속도로㈜', '1661-5688', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0160', '1', 16, '울산선', 6, 'E', '울산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0160', '1', 16, '울산선', 6, 'E', '울산', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '3', 171, '오산화성선', 6, 'E', '안녕', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '3', 171, '오산화성선', 6, 'E', '안녕', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '2', 17, '수원광명선', 6, 'E', '소하', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0170', '2', 17, '수원광명선', 6, 'E', '소하', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0321', '1', 32, '당진청주선(아산-천안)', 6, 'E', '아산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0321', '1', 32, '당진청주선(아산-천안)', 6, 'E', '아산', NULL, '공영', '한국도로공사', '1588-2504', '108');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4006', '1', 400, '수도권제2순환선(시화-남안산)', 6, 'E', '시화', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4006', '1', 400, '수도권제2순환선(시화-남안산)', 6, 'E', '시화', NULL, '공영', '한국도로공사', '1588-2504', '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4007', '1', 400, '수도권제2순환선(포천-화도)', 6, 'E', '화도', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('4007', '1', 400, '수도권제2순환선(포천-화도)', 6, 'E', '화도', NULL, '공영', '포천화도고속도로㈜', '1877-1140', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1730', '1', 173, '익산평택지선', 6, 'E', '포승', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('1730', '1', 173, '익산평택지선', 6, 'E', '포승', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0175', '1', 17, '익산평택선', 6, 'E', '평택', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0175', '1', 17, '익산평택선', 6, 'E', '평택', NULL, '공영', '서부내륙고속도로㈜', '070-7460-3896', '109');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0653', '1', 65, '동해선(포항-영덕)', 6, 'E', '영덕', NULL, '공영', NULL, NULL, '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0653', '1', 65, '동해선(포항-영덕)', 6, 'E', '영덕', NULL, '공영', NULL, NULL, '101');
|
||||||
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0202', '1', 20, '새만금전주선', 6, 'E', '새만금', NULL, '공영', NULL, NULL, '101');
|
INSERT INTO TROAD_APP.T_ROUTE_NEW_NM (ROUTECD, GRPID, ROUTESHORTNO, ROUTENM, ROUTESORT, UPDOWNDIR, ROUTEDIRNM, ROUTELAYOVERNM, OPER, HOINSTNM, RPRSTELNO, CLSSCD) VALUES ('0202', '1', 20, '새만금전주선', 6, 'E', '새만금', NULL, '공영', NULL, NULL, '101');
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|||||||
Regular → Executable
+8697
-8697
File diff suppressed because it is too large
Load Diff
Regular → Executable
+88
-88
@@ -1,88 +1,88 @@
|
|||||||
-- 교통속보(V_ACDT_BRNWS_VER001) 개발서버용 스키마
|
-- 교통속보(V_ACDT_BRNWS_VER001) 개발서버용 스키마
|
||||||
-- chatbotApi TroadService.getBreakingNews 기존 SQL 그대로 사용
|
-- chatbotApi TroadService.getBreakingNews 기존 SQL 그대로 사용
|
||||||
|
|
||||||
SET DEFINE OFF
|
SET DEFINE OFF
|
||||||
SET SERVEROUTPUT ON
|
SET SERVEROUTPUT ON
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'CREATE USER TROAD_APP NO AUTHENTICATION';
|
EXECUTE IMMEDIATE 'CREATE USER TROAD_APP NO AUTHENTICATION';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -1920 THEN RAISE; END IF;
|
IF SQLCODE != -1920 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO TROAD_APP;
|
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO TROAD_APP;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE q'[
|
EXECUTE IMMEDIATE q'[
|
||||||
CREATE TABLE TROAD_APP.T_ACDT_BRNWS_VER001 (
|
CREATE TABLE TROAD_APP.T_ACDT_BRNWS_VER001 (
|
||||||
ROUTECD VARCHAR2(4),
|
ROUTECD VARCHAR2(4),
|
||||||
GRPID VARCHAR2(2),
|
GRPID VARCHAR2(2),
|
||||||
BOUND VARCHAR2(1),
|
BOUND VARCHAR2(1),
|
||||||
ROADNM VARCHAR2(100),
|
ROADNM VARCHAR2(100),
|
||||||
ROUTESORT NUMBER,
|
ROUTESORT NUMBER,
|
||||||
ROADSHORTNO NUMBER,
|
ROADSHORTNO NUMBER,
|
||||||
BOUNDNM VARCHAR2(100),
|
BOUNDNM VARCHAR2(100),
|
||||||
INCIDENT_ID VARCHAR2(30),
|
INCIDENT_ID VARCHAR2(30),
|
||||||
INCI_TP_ORDER VARCHAR2(10),
|
INCI_TP_ORDER VARCHAR2(10),
|
||||||
INCI_TP VARCHAR2(50),
|
INCI_TP VARCHAR2(50),
|
||||||
MSG VARCHAR2(2000),
|
MSG VARCHAR2(2000),
|
||||||
INCIDENT_POS_NAME VARCHAR2(500),
|
INCIDENT_POS_NAME VARCHAR2(500),
|
||||||
OCRN_DSTNC NUMBER,
|
OCRN_DSTNC NUMBER,
|
||||||
CNGS_LNGT NUMBER,
|
CNGS_LNGT NUMBER,
|
||||||
LAT NUMBER,
|
LAT NUMBER,
|
||||||
LON NUMBER,
|
LON NUMBER,
|
||||||
CCTV_ID VARCHAR2(30),
|
CCTV_ID VARCHAR2(30),
|
||||||
CCTV_NM VARCHAR2(200),
|
CCTV_NM VARCHAR2(200),
|
||||||
THUMBIMAGE VARCHAR2(500),
|
THUMBIMAGE VARCHAR2(500),
|
||||||
HLS_URL VARCHAR2(500),
|
HLS_URL VARCHAR2(500),
|
||||||
ST_D NUMBER,
|
ST_D NUMBER,
|
||||||
EN_D NUMBER,
|
EN_D NUMBER,
|
||||||
VVALUE01 VARCHAR2(2000),
|
VVALUE01 VARCHAR2(2000),
|
||||||
VVALUE02 VARCHAR2(2000),
|
VVALUE02 VARCHAR2(2000),
|
||||||
VVALUE03 VARCHAR2(2000),
|
VVALUE03 VARCHAR2(2000),
|
||||||
VVALUE04 VARCHAR2(2000),
|
VVALUE04 VARCHAR2(2000),
|
||||||
VVALUE05 VARCHAR2(2000),
|
VVALUE05 VARCHAR2(2000),
|
||||||
CRCM_TIME VARCHAR2(100),
|
CRCM_TIME VARCHAR2(100),
|
||||||
CRCM_MSG VARCHAR2(2000)
|
CRCM_MSG VARCHAR2(2000)
|
||||||
)
|
)
|
||||||
]';
|
]';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE != -955 THEN RAISE; END IF;
|
IF SQLCODE != -955 THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'CREATE INDEX TROAD_APP.IX_ACDT_BRNWS_ROUTE ' ||
|
'CREATE INDEX TROAD_APP.IX_ACDT_BRNWS_ROUTE ' ||
|
||||||
'ON TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, BOUND, ROADNM)';
|
'ON TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, BOUND, ROADNM)';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
IF SQLCODE NOT IN (-955, -1408) THEN RAISE; END IF;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW TROAD_APP.V_ACDT_BRNWS_VER001 AS
|
CREATE OR REPLACE VIEW TROAD_APP.V_ACDT_BRNWS_VER001 AS
|
||||||
SELECT ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM,
|
SELECT ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM,
|
||||||
INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME,
|
INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME,
|
||||||
OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE,
|
OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE,
|
||||||
HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04,
|
HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04,
|
||||||
VVALUE05, CRCM_TIME, CRCM_MSG
|
VVALUE05, CRCM_TIME, CRCM_MSG
|
||||||
FROM TROAD_APP.T_ACDT_BRNWS_VER001;
|
FROM TROAD_APP.T_ACDT_BRNWS_VER001;
|
||||||
|
|
||||||
GRANT SELECT ON TROAD_APP.V_ACDT_BRNWS_VER001 TO OPR_MAIN;
|
GRANT SELECT ON TROAD_APP.V_ACDT_BRNWS_VER001 TO OPR_MAIN;
|
||||||
GRANT SELECT ON TLISDEV.T_TRMB_CD_INFO01M1 TO OPR_MAIN;
|
GRANT SELECT ON TLISDEV.T_TRMB_CD_INFO01M1 TO OPR_MAIN;
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW OPR_MAIN.V_ACDT_BRNWS_VER001 AS
|
CREATE OR REPLACE VIEW OPR_MAIN.V_ACDT_BRNWS_VER001 AS
|
||||||
SELECT * FROM TROAD_APP.V_ACDT_BRNWS_VER001;
|
SELECT * FROM TROAD_APP.V_ACDT_BRNWS_VER001;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'CREATE OR REPLACE PUBLIC SYNONYM V_ACDT_BRNWS_VER001 ' ||
|
'CREATE OR REPLACE PUBLIC SYNONYM V_ACDT_BRNWS_VER001 ' ||
|
||||||
'FOR TROAD_APP.V_ACDT_BRNWS_VER001';
|
'FOR TROAD_APP.V_ACDT_BRNWS_VER001';
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN NULL;
|
WHEN OTHERS THEN NULL;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|||||||
Regular → Executable
+100
-100
@@ -1,100 +1,100 @@
|
|||||||
-- 자동 생성: V_ACDT_BRNWS_VER001_202607301705.csv -> TROAD_APP.T_ACDT_BRNWS_VER001
|
-- 자동 생성: V_ACDT_BRNWS_VER001_202607301705.csv -> TROAD_APP.T_ACDT_BRNWS_VER001
|
||||||
-- 행 수: 88
|
-- 행 수: 88
|
||||||
-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py
|
-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py
|
||||||
|
|
||||||
SET DEFINE OFF
|
SET DEFINE OFF
|
||||||
SET SQLBLANKLINES ON
|
SET SQLBLANKLINES ON
|
||||||
|
|
||||||
DELETE FROM TROAD_APP.T_ACDT_BRNWS_VER001;
|
DELETE FROM TROAD_APP.T_ACDT_BRNWS_VER001;
|
||||||
|
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('4004', '1', 'S', '수도권제2순환선(화성-광주)', 5, 400, '화성방향', '20260521143800', '03', '작업', 'K (2차로) 비탈면보수 작업중 (14시 38분부터)', '동탄방향 26.0', 0, 0, 0, 0, 'cctv00007433', '동탄JC', 'https://exmobile4.hscdn.com/cctv7433image/ch00007433_20260730.154600.000.jpg', 'https://live18.exmobile.hscdn.com/exlive/cctv7433.stream/playlist.m3u8', 0, 0, NULL, NULL, NULL, NULL, NULL, '(14시 38분부터)', 'K (2차로) 비탈면보수 작업중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('4004', '1', 'S', '수도권제2순환선(화성-광주)', 5, 400, '화성방향', '20260521143800', '03', '작업', 'K (2차로) 비탈면보수 작업중 (14시 38분부터)', '동탄방향 26.0', 0, 0, 0, 0, 'cctv00007433', '동탄JC', 'https://exmobile4.hscdn.com/cctv7433image/ch00007433_20260730.154600.000.jpg', 'https://live18.exmobile.hscdn.com/exlive/cctv7433.stream/playlist.m3u8', 0, 0, NULL, NULL, NULL, NULL, NULL, '(14시 38분부터)', 'K (2차로) 비탈면보수 작업중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0650', '1', 'E', '동해선(삼척-속초)', 6, 65, '속초방향', '20260703074200', '03', '작업', '(2차로)졸음쉼터 설치 작업중 (07시 42분부터)', '쇄운교(15K)-지흥1교(16.7K)', 15, -1, 37.486292, 129.090703, 'cctv00005829', '쇄운교', 'https://exmobile4.hscdn.com/cctv5829image/ch00005829_20260730.154600.000.jpg', 'https://live7.exmobile.hscdn.com/exlive/cctv5829.stream/playlist.m3u8', 15, 15, NULL, NULL, NULL, NULL, NULL, '(07시 42분부터)', '(2차로)졸음쉼터 설치 작업중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0650', '1', 'E', '동해선(삼척-속초)', 6, 65, '속초방향', '20260703074200', '03', '작업', '(2차로)졸음쉼터 설치 작업중 (07시 42분부터)', '쇄운교(15K)-지흥1교(16.7K)', 15, -1, 37.486292, 129.090703, 'cctv00005829', '쇄운교', 'https://exmobile4.hscdn.com/cctv5829image/ch00005829_20260730.154600.000.jpg', 'https://live7.exmobile.hscdn.com/exlive/cctv5829.stream/playlist.m3u8', 15, 15, NULL, NULL, NULL, NULL, NULL, '(07시 42분부터)', '(2차로)졸음쉼터 설치 작업중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0652', '1', 'E', '동해선(부산-포항)', 6, 65, '포항방향', '20260720082502', '03', '작업', '(2차로)노면보강 공사 작업중, 장기차단 (08시 25분부터)', '남경주부근(68K)-문무대왕1터널(74K)', 68, -1, 35.724019, 129.296973, 'cctv00005797', '냉천3교', 'https://exmobile8.hscdn.com/cctv5797image/ch00005797_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv5797.stream/playlist.m3u8', 68, 68, NULL, NULL, NULL, NULL, NULL, '(08시 25분부터)', '(2차로)노면보강 공사 작업중, 장기차단');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0652', '1', 'E', '동해선(부산-포항)', 6, 65, '포항방향', '20260720082502', '03', '작업', '(2차로)노면보강 공사 작업중, 장기차단 (08시 25분부터)', '남경주부근(68K)-문무대왕1터널(74K)', 68, -1, 35.724019, 129.296973, 'cctv00005797', '냉천3교', 'https://exmobile8.hscdn.com/cctv5797image/ch00005797_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv5797.stream/playlist.m3u8', 68, 68, NULL, NULL, NULL, NULL, NULL, '(08시 25분부터)', '(2차로)노면보강 공사 작업중, 장기차단');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('4004', '1', 'S', '수도권제2순환선(화성-광주)', 5, 400, '화성방향', '20260723135200', '03', '작업', 'null (13시 52분부터)', '동탄방향 9.8', 0, 0, 0, 0, 'cctv00007433', '동탄JC', 'https://exmobile4.hscdn.com/cctv7433image/ch00007433_20260730.154600.000.jpg', 'https://live18.exmobile.hscdn.com/exlive/cctv7433.stream/playlist.m3u8', 0, 0, NULL, NULL, NULL, NULL, NULL, '(13시 52분부터)', 'null');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('4004', '1', 'S', '수도권제2순환선(화성-광주)', 5, 400, '화성방향', '20260723135200', '03', '작업', 'null (13시 52분부터)', '동탄방향 9.8', 0, 0, 0, 0, 'cctv00007433', '동탄JC', 'https://exmobile4.hscdn.com/cctv7433image/ch00007433_20260730.154600.000.jpg', 'https://live18.exmobile.hscdn.com/exlive/cctv7433.stream/playlist.m3u8', 0, 0, NULL, NULL, NULL, NULL, NULL, '(13시 52분부터)', 'null');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'S', '제2경인선', 6, 110, '인천방향', '20260730065400', '04', '정체', '(06시 54분부터)', '서창분기점(9K)-남동부근(6K)', 9, 3, 37.433276, 126.729185, 'cctv00000762', '서창분기점', 'https://exmobile8.hscdn.com/cctv0762image/ch00000762_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0762.stream/playlist.m3u8', 9, 9, NULL, NULL, NULL, NULL, NULL, '(06시 54분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'S', '제2경인선', 6, 110, '인천방향', '20260730065400', '04', '정체', '(06시 54분부터)', '서창분기점(9K)-남동부근(6K)', 9, 3, 37.433276, 126.729185, 'cctv00000762', '서창분기점', 'https://exmobile8.hscdn.com/cctv0762image/ch00000762_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0762.stream/playlist.m3u8', 9, 9, NULL, NULL, NULL, NULL, NULL, '(06시 54분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730065451', '04', '정체', '(06시 54분부터)', '광명역(334K)-금천(340K)', 334, 6, 37.407933, 126.88693, 'cctv00000215', '충훈대교', 'https://exmobile8.hscdn.com/cctv0215image/ch00000215_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0215.stream/playlist.m3u8', 334, 334, NULL, NULL, NULL, NULL, NULL, '(06시 54분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730065451', '04', '정체', '(06시 54분부터)', '광명역(334K)-금천(340K)', 334, 6, 37.407933, 126.88693, 'cctv00000215', '충훈대교', 'https://exmobile8.hscdn.com/cctv0215image/ch00000215_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0215.stream/playlist.m3u8', 334, 334, NULL, NULL, NULL, NULL, NULL, '(06시 54분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730072448', '04', '정체', '(07시 24분부터)', '시흥요금소(96K)-중동(86K)', 96, 10, 37.449284, 126.805207, 'cctv00002060', '시흥TG_일산', 'https://exmobile4.hscdn.com/cctv2060image/ch00002060_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv2060.stream/playlist.m3u8', 96, 96, NULL, NULL, NULL, NULL, NULL, '(07시 24분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730072448', '04', '정체', '(07시 24분부터)', '시흥요금소(96K)-중동(86K)', 96, 10, 37.449284, 126.805207, 'cctv00002060', '시흥TG_일산', 'https://exmobile4.hscdn.com/cctv2060image/ch00002060_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv2060.stream/playlist.m3u8', 96, 96, NULL, NULL, NULL, NULL, NULL, '(07시 24분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0351', '1', 'S', '통영대전선', 6, 35, '통영방향', '20260730081231', '03', '작업', '(갓길) 시설물 보수 작업중 (08시 12분부터)', '오동터널부근(132K)', 132, -1, 35.707033, 127.624994, 'cctv00002182', '오동2교', 'https://exmobile4.hscdn.com/cctv2182image/ch00002182_20260730.154600.000.jpg', 'https://live8.exmobile.hscdn.com/exlive/cctv2182.stream/playlist.m3u8', 132, 0, NULL, NULL, NULL, NULL, NULL, '(08시 12분부터)', '(갓길) 시설물 보수 작업중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0351', '1', 'S', '통영대전선', 6, 35, '통영방향', '20260730081231', '03', '작업', '(갓길) 시설물 보수 작업중 (08시 12분부터)', '오동터널부근(132K)', 132, -1, 35.707033, 127.624994, 'cctv00002182', '오동2교', 'https://exmobile4.hscdn.com/cctv2182image/ch00002182_20260730.154600.000.jpg', 'https://live8.exmobile.hscdn.com/exlive/cctv2182.stream/playlist.m3u8', 132, 0, NULL, NULL, NULL, NULL, NULL, '(08시 12분부터)', '(갓길) 시설물 보수 작업중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'S', '논산천안선', 6, 25, '논산방향', '20260730082406', '04', '정체', '3km 정체 (08시 24분부터)', '차령터널 무학천교(266.0K)-차령터널 (263.0K)', 269, 0, 36.72055, 127.13463, 'cctv00007136', '호정1교', 'https://exmobile4.hscdn.com/cctv7136image/ch00007136_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7136.stream/playlist.m3u8', 269, 269, NULL, NULL, NULL, NULL, NULL, '(08시 24분부터)', '3km 정체');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'S', '논산천안선', 6, 25, '논산방향', '20260730082406', '04', '정체', '3km 정체 (08시 24분부터)', '차령터널 무학천교(266.0K)-차령터널 (263.0K)', 269, 0, 36.72055, 127.13463, 'cctv00007136', '호정1교', 'https://exmobile4.hscdn.com/cctv7136image/ch00007136_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7136.stream/playlist.m3u8', 269, 269, NULL, NULL, NULL, NULL, NULL, '(08시 24분부터)', '3km 정체');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0201', '1', 'S', '익산장수선', 6, 20, '익산방향', '20260730084122', '03', '작업', '(갓길) 덩쿨제거 작업중 (08시 41분부터)', '소양(16K)-소양부근(15K)', 16, -1, 35.865021, 127.230784, 'cctv00003867', '소양', 'https://exmobile8.hscdn.com/cctv3867image/ch00003867_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3867.stream/playlist.m3u8', 16, 16, NULL, NULL, NULL, NULL, NULL, '(08시 41분부터)', '(갓길) 덩쿨제거 작업중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0201', '1', 'S', '익산장수선', 6, 20, '익산방향', '20260730084122', '03', '작업', '(갓길) 덩쿨제거 작업중 (08시 41분부터)', '소양(16K)-소양부근(15K)', 16, -1, 35.865021, 127.230784, 'cctv00003867', '소양', 'https://exmobile8.hscdn.com/cctv3867image/ch00003867_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3867.stream/playlist.m3u8', 16, 16, NULL, NULL, NULL, NULL, NULL, '(08시 41분부터)', '(갓길) 덩쿨제거 작업중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'S', '중부내륙선', 6, 45, '창원방향', '20260730094639', '04', '정체', '(09시 46분부터)', '감곡부근(258K)-감곡부근(255K)', 258, 3, 37.172225, 127.622368, 'cctv00003204', '삼승교', 'https://exmobile4.hscdn.com/cctv3204image/ch00003204_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv3204.stream/playlist.m3u8', 258, 258, NULL, NULL, NULL, NULL, NULL, '(09시 46분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'S', '중부내륙선', 6, 45, '창원방향', '20260730094639', '04', '정체', '(09시 46분부터)', '감곡부근(258K)-감곡부근(255K)', 258, 3, 37.172225, 127.622368, 'cctv00003204', '삼승교', 'https://exmobile4.hscdn.com/cctv3204image/ch00003204_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv3204.stream/playlist.m3u8', 258, 258, NULL, NULL, NULL, NULL, NULL, '(09시 46분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0100', '1', 'E', '남해선(순천-부산)', 6, 10, '부산방향', '20260730103250', '04', '정체', '(10시 32분부터)', '함안2터널부근(119K)-함안2터널부근(120K)', 119, 1, 35.288699, 128.542006, 'cctv00000560', '함안2터널(부산외부)', 'https://exmobile4.hscdn.com/cctv0560image/ch00000560_20260730.154600.000.jpg', 'https://live13.exmobile.hscdn.com/exlive/cctv0560.stream/playlist.m3u8', 119, 119, NULL, NULL, NULL, NULL, NULL, '(10시 32분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0100', '1', 'E', '남해선(순천-부산)', 6, 10, '부산방향', '20260730103250', '04', '정체', '(10시 32분부터)', '함안2터널부근(119K)-함안2터널부근(120K)', 119, 1, 35.288699, 128.542006, 'cctv00000560', '함안2터널(부산외부)', 'https://exmobile4.hscdn.com/cctv0560image/ch00000560_20260730.154600.000.jpg', 'https://live13.exmobile.hscdn.com/exlive/cctv0560.stream/playlist.m3u8', 119, 119, NULL, NULL, NULL, NULL, NULL, '(10시 32분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'S', '논산천안선', 6, 25, '논산방향', '20260728140304', '04', '정체', '5km 정체 (14시 03분부터)', '남풍세IC 호정 1교(268.0K)-차령터널 (263.0K)', 269, 0, 36.72055, 127.13463, 'cctv00007136', '호정1교', 'https://exmobile4.hscdn.com/cctv7136image/ch00007136_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7136.stream/playlist.m3u8', 269, 269, NULL, NULL, NULL, NULL, NULL, '(14시 03분부터)', '5km 정체');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'S', '논산천안선', 6, 25, '논산방향', '20260728140304', '04', '정체', '5km 정체 (14시 03분부터)', '남풍세IC 호정 1교(268.0K)-차령터널 (263.0K)', 269, 0, 36.72055, 127.13463, 'cctv00007136', '호정1교', 'https://exmobile4.hscdn.com/cctv7136image/ch00007136_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7136.stream/playlist.m3u8', 269, 269, NULL, NULL, NULL, NULL, NULL, '(14시 03분부터)', '5km 정체');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730051106', '04', '정체', '(05시 11분부터)', '노오지분기점(79K)-송내(88K)', 79, 9, 37.570368, 126.753178, 'cctv00000227', '노오지분기점', 'https://exmobile4.hscdn.com/cctv0227image/ch00000227_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0227.stream/playlist.m3u8', 79, 79, NULL, NULL, NULL, NULL, NULL, '(05시 11분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730051106', '04', '정체', '(05시 11분부터)', '노오지분기점(79K)-송내(88K)', 79, 9, 37.570368, 126.753178, 'cctv00000227', '노오지분기점', 'https://exmobile4.hscdn.com/cctv0227image/ch00000227_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0227.stream/playlist.m3u8', 79, 79, NULL, NULL, NULL, NULL, NULL, '(05시 11분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730062713', '04', '정체', '(06시 27분부터)', '양재부근(415K)-반포(420K)', 415, 5, 37.456747, 127.046344, 'cctv00000002', '양재', 'https://exmobile4.hscdn.com/cctv0002image/ch00000002_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0002.stream/playlist.m3u8', 415, 415, NULL, NULL, NULL, NULL, NULL, '(06시 27분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730062713', '04', '정체', '(06시 27분부터)', '양재부근(415K)-반포(420K)', 415, 5, 37.456747, 127.046344, 'cctv00000002', '양재', 'https://exmobile4.hscdn.com/cctv0002image/ch00000002_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0002.stream/playlist.m3u8', 415, 415, NULL, NULL, NULL, NULL, NULL, '(06시 27분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730105038', '04', '정체', '(10시 50분부터)', '천안분기점부근(332K)-천안호두(휴)(324K)', 332, 8, 36.766668, 127.196939, 'cctv00003848', '응원고개', 'https://exmobile4.hscdn.com/cctv3848image/ch00003848_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3848.stream/playlist.m3u8', 332, 332, NULL, NULL, NULL, NULL, NULL, '(10시 50분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730105038', '04', '정체', '(10시 50분부터)', '천안분기점부근(332K)-천안호두(휴)(324K)', 332, 8, 36.766668, 127.196939, 'cctv00003848', '응원고개', 'https://exmobile4.hscdn.com/cctv3848image/ch00003848_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3848.stream/playlist.m3u8', 332, 332, NULL, NULL, NULL, NULL, NULL, '(10시 50분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730132759', '04', '정체', '(13시 27분부터)', '충주분기점부근(238K)-충주분기점부근(241K)', 238, 3, 37.041776, 127.75111, 'cctv00003209', '한포천', 'https://exmobile4.hscdn.com/cctv3209image/ch00003209_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv3209.stream/playlist.m3u8', 238, 238, NULL, NULL, NULL, NULL, NULL, '(13시 27분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730132759', '04', '정체', '(13시 27분부터)', '충주분기점부근(238K)-충주분기점부근(241K)', 238, 3, 37.041776, 127.75111, 'cctv00003209', '한포천', 'https://exmobile4.hscdn.com/cctv3209image/ch00003209_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv3209.stream/playlist.m3u8', 238, 238, NULL, NULL, NULL, NULL, NULL, '(13시 27분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0100', '1', 'E', '남해선(순천-부산)', 6, 10, '부산방향', '20260730134538', '04', '정체', '(13시 45분부터)', '대저분기점(163K)-덕천(166K)', 163, 3, 35.219275, 128.969671, 'cctv00003930', '대저', 'https://exmobile4.hscdn.com/cctv3930image/ch00003930_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv3930.stream/playlist.m3u8', 163, 163, NULL, NULL, NULL, NULL, NULL, '(13시 45분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0100', '1', 'E', '남해선(순천-부산)', 6, 10, '부산방향', '20260730134538', '04', '정체', '(13시 45분부터)', '대저분기점(163K)-덕천(166K)', 163, 3, 35.219275, 128.969671, 'cctv00003930', '대저', 'https://exmobile4.hscdn.com/cctv3930image/ch00003930_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv3930.stream/playlist.m3u8', 163, 163, NULL, NULL, NULL, NULL, NULL, '(13시 45분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'E', '제2경인선', 6, 110, '성남방향', '20260730135457', '04', '정체', '(13시 54분부터)', '학익분기점(3K)-남동(8K)', 3, 5, 37.438267, 126.662356, 'cctv00001535', '학익대교1', 'https://exmobile4.hscdn.com/cctv1535image/ch00001535_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv1535.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(13시 54분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'E', '제2경인선', 6, 110, '성남방향', '20260730135457', '04', '정체', '(13시 54분부터)', '학익분기점(3K)-남동(8K)', 3, 5, 37.438267, 126.662356, 'cctv00001535', '학익대교1', 'https://exmobile4.hscdn.com/cctv1535image/ch00001535_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv1535.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(13시 54분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730135951', '04', '정체', '(13시 59분부터)', '군자분기점(7K)-월곶분기점부근(4K)', 7, 3, 37.382693, 126.762417, 'cctv00000854', '군자분기점', 'https://exmobile4.hscdn.com/cctv0854image/ch00000854_20260730.154600.000.jpg', 'https://live2.exmobile.hscdn.com/exlive/cctv0854.stream/playlist.m3u8', 7, 7, NULL, NULL, NULL, NULL, NULL, '(13시 59분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730135951', '04', '정체', '(13시 59분부터)', '군자분기점(7K)-월곶분기점부근(4K)', 7, 3, 37.382693, 126.762417, 'cctv00000854', '군자분기점', 'https://exmobile4.hscdn.com/cctv0854image/ch00000854_20260730.154600.000.jpg', 'https://live2.exmobile.hscdn.com/exlive/cctv0854.stream/playlist.m3u8', 7, 7, NULL, NULL, NULL, NULL, NULL, '(13시 59분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730140943', '04', '정체', '(14시 09분부터)', '서평택분기점부근(295K)-화성(휴)부근(303K)', 295, 8, 37.08446, 126.886438, 'cctv00000054', '상신2교', 'https://exmobile4.hscdn.com/cctv0054image/ch00000054_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0054.stream/playlist.m3u8', 295, 295, NULL, NULL, NULL, NULL, NULL, '(14시 09분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730140943', '04', '정체', '(14시 09분부터)', '서평택분기점부근(295K)-화성(휴)부근(303K)', 295, 8, 37.08446, 126.886438, 'cctv00000054', '상신2교', 'https://exmobile4.hscdn.com/cctv0054image/ch00000054_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0054.stream/playlist.m3u8', 295, 295, NULL, NULL, NULL, NULL, NULL, '(14시 09분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730141000', '04', '정체', '(14시 10분부터)', '매송(휴)부근(315K)-용담터널(319K)', 315, 4, 37.260631, 126.887041, 'cctv00002409', '야목2교', 'https://exmobile8.hscdn.com/cctv2409image/ch00002409_20260730.154600.000.jpg', 'https://live3.exmobile.hscdn.com/exlive/cctv2409.stream/playlist.m3u8', 315, 315, NULL, NULL, NULL, NULL, NULL, '(14시 10분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730141000', '04', '정체', '(14시 10분부터)', '매송(휴)부근(315K)-용담터널(319K)', 315, 4, 37.260631, 126.887041, 'cctv00002409', '야목2교', 'https://exmobile8.hscdn.com/cctv2409image/ch00002409_20260730.154600.000.jpg', 'https://live3.exmobile.hscdn.com/exlive/cctv2409.stream/playlist.m3u8', 315, 315, NULL, NULL, NULL, NULL, NULL, '(14시 10분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0352', '1', 'S', '중부선', 3, 35, '남이방향', '20260730141034', '04', '정체', '(14시 10분부터)', '진천터널부근(277K)-진천터널부근(274K)', 277, 3, 36.835086, 127.494366, 'cctv00003845', '백곡천교', 'https://exmobile8.hscdn.com/cctv3845image/ch00003845_20260730.154600.000.jpg', 'https://live9.exmobile.hscdn.com/exlive/cctv3845.stream/playlist.m3u8', 277, 277, NULL, NULL, NULL, NULL, NULL, '(14시 10분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0352', '1', 'S', '중부선', 3, 35, '남이방향', '20260730141034', '04', '정체', '(14시 10분부터)', '진천터널부근(277K)-진천터널부근(274K)', 277, 3, 36.835086, 127.494366, 'cctv00003845', '백곡천교', 'https://exmobile8.hscdn.com/cctv3845image/ch00003845_20260730.154600.000.jpg', 'https://live9.exmobile.hscdn.com/exlive/cctv3845.stream/playlist.m3u8', 277, 277, NULL, NULL, NULL, NULL, NULL, '(14시 10분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0202', '1', 'E', '새만금전주선', 6, 202, '새만금방향', '20260730141437', '01', '기타', '(갓길)소형화물차 고장 처리중 (14시 14분부터)', '석구터널(46.1K)', 46.1, -1, 35.773544, 127.153308, 'cctv00002613', '원은육교2', 'https://exmobile4.hscdn.com/cctv2613image/ch00002613_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv2613.stream/playlist.m3u8', 46.1, 0, NULL, NULL, NULL, NULL, NULL, '(14시 14분부터)', '(갓길)소형화물차 고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0202', '1', 'E', '새만금전주선', 6, 202, '새만금방향', '20260730141437', '01', '기타', '(갓길)소형화물차 고장 처리중 (14시 14분부터)', '석구터널(46.1K)', 46.1, -1, 35.773544, 127.153308, 'cctv00002613', '원은육교2', 'https://exmobile4.hscdn.com/cctv2613image/ch00002613_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv2613.stream/playlist.m3u8', 46.1, 0, NULL, NULL, NULL, NULL, NULL, '(14시 14분부터)', '(갓길)소형화물차 고장 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730142623', '04', '정체', '(14시 26분부터)', '동수원(37K)-북수원(30K)', 37, 7, 37.299117, 127.051361, 'cctv00002415', '동수원', 'https://exmobile4.hscdn.com/cctv2415image/ch00002415_20260730.154500.000.jpg', 'https://live3.exmobile.hscdn.com/exlive/cctv2415.stream/playlist.m3u8', 37, 37, NULL, NULL, NULL, NULL, NULL, '(14시 26분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730142623', '04', '정체', '(14시 26분부터)', '동수원(37K)-북수원(30K)', 37, 7, 37.299117, 127.051361, 'cctv00002415', '동수원', 'https://exmobile4.hscdn.com/cctv2415image/ch00002415_20260730.154500.000.jpg', 'https://live3.exmobile.hscdn.com/exlive/cctv2415.stream/playlist.m3u8', 37, 37, NULL, NULL, NULL, NULL, NULL, '(14시 26분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730143713', '04', '정체', '(14시 37분부터)', '안성분기점(364K)-안성(휴)부근(368K)', 364, 4, 37.028613, 127.140833, 'cctv00000037', '안성분기점2', 'https://exmobile8.hscdn.com/cctv0037image/ch00000037_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0037.stream/playlist.m3u8', 364, 364, NULL, NULL, NULL, NULL, NULL, '(14시 37분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730143713', '04', '정체', '(14시 37분부터)', '안성분기점(364K)-안성(휴)부근(368K)', 364, 4, 37.028613, 127.140833, 'cctv00000037', '안성분기점2', 'https://exmobile8.hscdn.com/cctv0037image/ch00000037_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0037.stream/playlist.m3u8', 364, 364, NULL, NULL, NULL, NULL, NULL, '(14시 37분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'S', '제2경인선', 6, 110, '인천방향', '20260730143718', '04', '정체', '(14시 37분부터)', '삼막(25.98K)-광명터널(22K)', 25.98, 4, 37.425507, 126.912049, 'cctv00000767', '석수', 'https://exmobile8.hscdn.com/cctv0767image/ch00000767_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0767.stream/playlist.m3u8', 25.98, 25.98, NULL, NULL, NULL, NULL, NULL, '(14시 37분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'S', '제2경인선', 6, 110, '인천방향', '20260730143718', '04', '정체', '(14시 37분부터)', '삼막(25.98K)-광명터널(22K)', 25.98, 4, 37.425507, 126.912049, 'cctv00000767', '석수', 'https://exmobile8.hscdn.com/cctv0767image/ch00000767_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0767.stream/playlist.m3u8', 25.98, 25.98, NULL, NULL, NULL, NULL, NULL, '(14시 37분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0651', '1', 'S', '부산울산선', 6, 65, '부산방향', '20260730144311', '04', '정체', '(14시 43분부터)', '해운대터널부근(3K)-부산울산선시점(0K)', 3, 3, 35.190683, 129.201783, 'cctv00000728', '고래진2교', 'https://exmobile8.hscdn.com/cctv0728image/ch00000728_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0728.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(14시 43분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0651', '1', 'S', '부산울산선', 6, 65, '부산방향', '20260730144311', '04', '정체', '(14시 43분부터)', '해운대터널부근(3K)-부산울산선시점(0K)', 3, 3, 35.190683, 129.201783, 'cctv00000728', '고래진2교', 'https://exmobile8.hscdn.com/cctv0728image/ch00000728_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0728.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(14시 43분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730144715', '00', '사고', '(3차로,갓길)화물차관련 사고 처리중 (14시 47분부터)', '영천분기점(91.5K)', 91.5, -1, 35.924733, 128.998642, 'cctv00000819', '반정1교', 'https://exmobile4.hscdn.com/cctv0819image/ch00000819_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv0819.stream/playlist.m3u8', 91.5, 0, NULL, NULL, NULL, NULL, NULL, '(14시 47분부터)', '(3차로,갓길)화물차관련 사고 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730144715', '00', '사고', '(3차로,갓길)화물차관련 사고 처리중 (14시 47분부터)', '영천분기점(91.5K)', 91.5, -1, 35.924733, 128.998642, 'cctv00000819', '반정1교', 'https://exmobile4.hscdn.com/cctv0819image/ch00000819_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv0819.stream/playlist.m3u8', 91.5, 0, NULL, NULL, NULL, NULL, NULL, '(14시 47분부터)', '(3차로,갓길)화물차관련 사고 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730145917', '04', '정체', '(14시 59분부터)', '자유로(72K)-김포(74K)', 72, 2, 37.618882, 126.799826, 'cctv00000224', '자유로분기점', 'https://exmobile4.hscdn.com/cctv0224image/ch00000224_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0224.stream/playlist.m3u8', 72, 72, NULL, NULL, NULL, NULL, NULL, '(14시 59분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730145917', '04', '정체', '(14시 59분부터)', '자유로(72K)-김포(74K)', 72, 2, 37.618882, 126.799826, 'cctv00000224', '자유로분기점', 'https://exmobile4.hscdn.com/cctv0224image/ch00000224_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0224.stream/playlist.m3u8', 72, 72, NULL, NULL, NULL, NULL, NULL, '(14시 59분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0400', '1', 'S', '평택제천선', 6, 40, '평택방향', '20260730150604', '04', '정체', '(15시 06분부터)', '서안성(25K)-안성분기점(24K)', 25, 1, 37.036583, 127.153094, 'cctv00005947', '강문교', 'https://exmobile4.hscdn.com/cctv5947image/ch00005947_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5947.stream/playlist.m3u8', 25, 25, NULL, NULL, NULL, NULL, NULL, '(15시 06분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0400', '1', 'S', '평택제천선', 6, 40, '평택방향', '20260730150604', '04', '정체', '(15시 06분부터)', '서안성(25K)-안성분기점(24K)', 25, 1, 37.036583, 127.153094, 'cctv00005947', '강문교', 'https://exmobile4.hscdn.com/cctv5947image/ch00005947_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5947.stream/playlist.m3u8', 25, 25, NULL, NULL, NULL, NULL, NULL, '(15시 06분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1200', '1', 'S', '경인선', 6, 120, '인천방향', '20260730150911', '04', '정체', '(15시 09분부터)', '인천요금소(16K)-서인천(11K)', 16, 5, 37.523954, 126.742937, 'cctv00005038', '인천영업소', 'https://exmobile8.hscdn.com/cctv5038image/ch00005038_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv5038.stream/playlist.m3u8', 16, 16, NULL, NULL, NULL, NULL, NULL, '(15시 09분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1200', '1', 'S', '경인선', 6, 120, '인천방향', '20260730150911', '04', '정체', '(15시 09분부터)', '인천요금소(16K)-서인천(11K)', 16, 5, 37.523954, 126.742937, 'cctv00005038', '인천영업소', 'https://exmobile8.hscdn.com/cctv5038image/ch00005038_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv5038.stream/playlist.m3u8', 16, 16, NULL, NULL, NULL, NULL, NULL, '(15시 09분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730152029', '04', '정체', '(15시 20분부터)', '입장거봉포도(휴)부근(355K)-안성(360K)', 355, 5, 36.955513, 127.181906, 'cctv00003102', '연곡', 'https://exmobile8.hscdn.com/cctv3102image/ch00003102_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3102.stream/playlist.m3u8', 355, 355, NULL, NULL, NULL, NULL, NULL, '(15시 20분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730152029', '04', '정체', '(15시 20분부터)', '입장거봉포도(휴)부근(355K)-안성(360K)', 355, 5, 36.955513, 127.181906, 'cctv00003102', '연곡', 'https://exmobile8.hscdn.com/cctv3102image/ch00003102_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3102.stream/playlist.m3u8', 355, 355, NULL, NULL, NULL, NULL, NULL, '(15시 20분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1200', '1', 'E', '경인선', 6, 120, '서울방향', '20260730152128', '04', '정체', '(15시 21분부터)', '신월(23K)-신월(24K)', 23, 1, 37.523394, 126.821631, 'cctv00001451', '신월-1', 'https://exmobile4.hscdn.com/cctv1451image/ch00001451_20260730.154600.000.jpg', 'https://live8.exmobile.hscdn.com/exlive/cctv1451.stream/playlist.m3u8', 23, 23, NULL, NULL, NULL, NULL, NULL, '(15시 21분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1200', '1', 'E', '경인선', 6, 120, '서울방향', '20260730152128', '04', '정체', '(15시 21분부터)', '신월(23K)-신월(24K)', 23, 1, 37.523394, 126.821631, 'cctv00001451', '신월-1', 'https://exmobile4.hscdn.com/cctv1451image/ch00001451_20260730.154600.000.jpg', 'https://live8.exmobile.hscdn.com/exlive/cctv1451.stream/playlist.m3u8', 23, 23, NULL, NULL, NULL, NULL, NULL, '(15시 21분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1040', '1', 'E', '남해2지선', 6, 104, '서부산방향', '20260730152500', '04', '정체', '(15시 25분부터)', '서부산(휴)(18K)-사상(20K)', 18, 2, 35.156477, 128.948907, 'cctv00003718', '서부산', 'https://exmobile4.hscdn.com/cctv3718image/ch00003718_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3718.stream/playlist.m3u8', 18, 18, NULL, NULL, NULL, NULL, NULL, '(15시 25분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1040', '1', 'E', '남해2지선', 6, 104, '서부산방향', '20260730152500', '04', '정체', '(15시 25분부터)', '서부산(휴)(18K)-사상(20K)', 18, 2, 35.156477, 128.948907, 'cctv00003718', '서부산', 'https://exmobile4.hscdn.com/cctv3718image/ch00003718_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3718.stream/playlist.m3u8', 18, 18, NULL, NULL, NULL, NULL, NULL, '(15시 25분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730152539', '01', '기타', '(갓길) 승용 고장차 처리중 (15시 25분부터)', '청주분기점(297K)', 297, -1, 36.568675, 127.429435, 'cctv00002129', '청주분기점2', 'https://exmobile4.hscdn.com/cctv2129image/ch00002129_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv2129.stream/playlist.m3u8', 297, 0, NULL, NULL, NULL, NULL, NULL, '(15시 25분부터)', '(갓길) 승용 고장차 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730152539', '01', '기타', '(갓길) 승용 고장차 처리중 (15시 25분부터)', '청주분기점(297K)', 297, -1, 36.568675, 127.429435, 'cctv00002129', '청주분기점2', 'https://exmobile4.hscdn.com/cctv2129image/ch00002129_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv2129.stream/playlist.m3u8', 297, 0, NULL, NULL, NULL, NULL, NULL, '(15시 25분부터)', '(갓길) 승용 고장차 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'E', '논산천안선', 6, 25, '천안방향', '20260730152731', '04', '정체', '3km 정체 (15시 27분부터)', '남공주IC 오룡교(232.0K)-남공주IC 검상천교(235.0K)', 225, 0, 36.34541, 127.06794, 'cctv00007164', '이인SA/남', 'https://exmobile4.hscdn.com/cctv7164image/ch00007164_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7164.stream/playlist.m3u8', 225, 225, NULL, NULL, NULL, NULL, NULL, '(15시 27분부터)', '3km 정체');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'E', '논산천안선', 6, 25, '천안방향', '20260730152731', '04', '정체', '3km 정체 (15시 27분부터)', '남공주IC 오룡교(232.0K)-남공주IC 검상천교(235.0K)', 225, 0, 36.34541, 127.06794, 'cctv00007164', '이인SA/남', 'https://exmobile4.hscdn.com/cctv7164image/ch00007164_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7164.stream/playlist.m3u8', 225, 225, NULL, NULL, NULL, NULL, NULL, '(15시 27분부터)', '3km 정체');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('6000', '1', 'S', '부산외곽선', 6, 600, '창원방향', '20260730152946', '04', '정체', '(15시 29분부터)', '기장분기점(48K)-기장분기점부근(47K)', 48, 1, 35.281987, 129.2089, 'cctv00000517', '용천교', 'https://exmobile4.hscdn.com/cctv0517image/ch00000517_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv0517.stream/playlist.m3u8', 48, 48, NULL, NULL, NULL, NULL, NULL, '(15시 29분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('6000', '1', 'S', '부산외곽선', 6, 600, '창원방향', '20260730152946', '04', '정체', '(15시 29분부터)', '기장분기점(48K)-기장분기점부근(47K)', 48, 1, 35.281987, 129.2089, 'cctv00000517', '용천교', 'https://exmobile4.hscdn.com/cctv0517image/ch00000517_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv0517.stream/playlist.m3u8', 48, 48, NULL, NULL, NULL, NULL, NULL, '(15시 29분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1300', '1', 'S', '인천공항선', 6, 130, '공항방향', '20260730153000', '04', '정체', '청라IC 진출 1km 정체 (15시 30분부터)', '[본선-공항] 20.8Km', 20.8, 0, 37.569859, 126.670011, 'cctv00007097', '인천공항영업소', 'https://exmobile4.hscdn.com/cctv7097image/ch00007097_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7097.stream/playlist.m3u8', 20.8, 20.8, NULL, NULL, NULL, NULL, NULL, '(15시 30분부터)', '청라IC 진출 1km 정체');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1300', '1', 'S', '인천공항선', 6, 130, '공항방향', '20260730153000', '04', '정체', '청라IC 진출 1km 정체 (15시 30분부터)', '[본선-공항] 20.8Km', 20.8, 0, 37.569859, 126.670011, 'cctv00007097', '인천공항영업소', 'https://exmobile4.hscdn.com/cctv7097image/ch00007097_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7097.stream/playlist.m3u8', 20.8, 20.8, NULL, NULL, NULL, NULL, NULL, '(15시 30분부터)', '청라IC 진출 1km 정체');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730153338', '04', '정체', '(15시 33분부터)', '안양터널(114K)-수리터널(112K)', 114, 2, 37.37919, 126.946985, 'cctv00000292', '안양터널', 'https://exmobile4.hscdn.com/cctv0292image/ch00000292_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0292.stream/playlist.m3u8', 114, 114, NULL, NULL, NULL, NULL, NULL, '(15시 33분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730153338', '04', '정체', '(15시 33분부터)', '안양터널(114K)-수리터널(112K)', 114, 2, 37.37919, 126.946985, 'cctv00000292', '안양터널', 'https://exmobile4.hscdn.com/cctv0292image/ch00000292_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0292.stream/playlist.m3u8', 114, 114, NULL, NULL, NULL, NULL, NULL, '(15시 33분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730153400', '04', '정체', '(15시 34분부터)', '덕평부근(66K)-양지터널부근(58K)', 66, 8, 37.250668, 127.352923, 'cctv00000371', '오천교', 'https://exmobile8.hscdn.com/cctv0371image/ch00000371_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0371.stream/playlist.m3u8', 66, 66, NULL, NULL, NULL, NULL, NULL, '(15시 34분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730153400', '04', '정체', '(15시 34분부터)', '덕평부근(66K)-양지터널부근(58K)', 66, 8, 37.250668, 127.352923, 'cctv00000371', '오천교', 'https://exmobile8.hscdn.com/cctv0371image/ch00000371_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0371.stream/playlist.m3u8', 66, 66, NULL, NULL, NULL, NULL, NULL, '(15시 34분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('2510', '1', 'S', '호남지선', 6, 251, '논산방향', '20260730154509', '04', '정체', '(15시 45분부터)', '회덕분기점(54K)-북대전부근(52K)', 54, 2, 0, 0, 'cctv00000297', '전민', 'https://exmobile4.hscdn.com/cctv0297image/ch00000297_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv0297.stream/playlist.m3u8', 54, 54, NULL, NULL, NULL, NULL, NULL, '(15시 45분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('2510', '1', 'S', '호남지선', 6, 251, '논산방향', '20260730154509', '04', '정체', '(15시 45분부터)', '회덕분기점(54K)-북대전부근(52K)', 54, 2, 0, 0, 'cctv00000297', '전민', 'https://exmobile4.hscdn.com/cctv0297image/ch00000297_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv0297.stream/playlist.m3u8', 54, 54, NULL, NULL, NULL, NULL, NULL, '(15시 45분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0400', '1', 'S', '평택제천선', 6, 40, '평택방향', '20260730155518', '04', '정체', '(15시 55분부터)', '대소분기점(57K)-안진터널(52K)', 57, 5, 36.941808, 127.463959, 'cctv00003794', '대소분기점', 'https://exmobile4.hscdn.com/cctv3794image/ch00003794_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv3794.stream/playlist.m3u8', 57, 57, NULL, NULL, NULL, NULL, NULL, '(15시 55분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0400', '1', 'S', '평택제천선', 6, 40, '평택방향', '20260730155518', '04', '정체', '(15시 55분부터)', '대소분기점(57K)-안진터널(52K)', 57, 5, 36.941808, 127.463959, 'cctv00003794', '대소분기점', 'https://exmobile4.hscdn.com/cctv3794image/ch00003794_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv3794.stream/playlist.m3u8', 57, 57, NULL, NULL, NULL, NULL, NULL, '(15시 55분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730155707', '04', '정체', '(15시 57분부터)', '화도(15K)-화도부근(13K)', 15, 2, 37.63154, 127.312837, 'cctv00000400', '화도영업소', 'https://exmobile8.hscdn.com/cctv0400image/ch00000400_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0400.stream/playlist.m3u8', 15, 15, NULL, NULL, NULL, NULL, NULL, '(15시 57분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730155707', '04', '정체', '(15시 57분부터)', '화도(15K)-화도부근(13K)', 15, 2, 37.63154, 127.312837, 'cctv00000400', '화도영업소', 'https://exmobile8.hscdn.com/cctv0400image/ch00000400_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0400.stream/playlist.m3u8', 15, 15, NULL, NULL, NULL, NULL, NULL, '(15시 57분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730160049', '04', '정체', '(순환선 진출로) (16시 00분부터)', '판교분기점(408K)', 408, 1, 37.406461, 127.09392, 'cctv00000006', '판교분기점_경부', 'https://exmobile4.hscdn.com/cctv0006image/ch00000006_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0006.stream/playlist.m3u8', 408, 0, NULL, NULL, NULL, NULL, NULL, '(16시 00분부터)', '(순환선 진출로)');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730160049', '04', '정체', '(순환선 진출로) (16시 00분부터)', '판교분기점(408K)', 408, 1, 37.406461, 127.09392, 'cctv00000006', '판교분기점_경부', 'https://exmobile4.hscdn.com/cctv0006image/ch00000006_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0006.stream/playlist.m3u8', 408, 0, NULL, NULL, NULL, NULL, NULL, '(16시 00분부터)', '(순환선 진출로)');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0251', '1', 'E', '호남선', 6, 25, '천안방향', '20260730160618', '04', '정체', '교통량 증가 (16시 06분부터)', '동광주(74K)', 74, 1, 35.183438, 126.926925, 'cctv00003382', '동광주', 'https://exmobile4.hscdn.com/cctv3382image/ch00003382_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv3382.stream/playlist.m3u8', 74, 0, NULL, NULL, NULL, NULL, NULL, '(16시 06분부터)', '교통량 증가');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0251', '1', 'E', '호남선', 6, 25, '천안방향', '20260730160618', '04', '정체', '교통량 증가 (16시 06분부터)', '동광주(74K)', 74, 1, 35.183438, 126.926925, 'cctv00003382', '동광주', 'https://exmobile4.hscdn.com/cctv3382image/ch00003382_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv3382.stream/playlist.m3u8', 74, 0, NULL, NULL, NULL, NULL, NULL, '(16시 06분부터)', '교통량 증가');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730160627', '04', '정체', '(16시 06분부터)', '조남분기점(107K)-수암터널(108K)', 107, 1, 37.368655, 126.869846, 'cctv00000238', '조남분기점', 'https://exmobile4.hscdn.com/cctv0238image/ch00000238_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0238.stream/playlist.m3u8', 107, 107, NULL, NULL, NULL, NULL, NULL, '(16시 06분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730160627', '04', '정체', '(16시 06분부터)', '조남분기점(107K)-수암터널(108K)', 107, 1, 37.368655, 126.869846, 'cctv00000238', '조남분기점', 'https://exmobile4.hscdn.com/cctv0238image/ch00000238_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0238.stream/playlist.m3u8', 107, 107, NULL, NULL, NULL, NULL, NULL, '(16시 06분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0352', '1', 'E', '중부선', 3, 35, '하남방향', '20260730160933', '04', '정체', '(16시 09분부터)', '일죽부근(304K)-일죽부근(309K)', 304, 5, 37.070051, 127.468948, 'cctv00000667', '장암1', 'https://exmobile4.hscdn.com/cctv0667image/ch00000667_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0667.stream/playlist.m3u8', 304, 304, NULL, NULL, NULL, NULL, NULL, '(16시 09분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0352', '1', 'E', '중부선', 3, 35, '하남방향', '20260730160933', '04', '정체', '(16시 09분부터)', '일죽부근(304K)-일죽부근(309K)', 304, 5, 37.070051, 127.468948, 'cctv00000667', '장암1', 'https://exmobile4.hscdn.com/cctv0667image/ch00000667_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0667.stream/playlist.m3u8', 304, 304, NULL, NULL, NULL, NULL, NULL, '(16시 09분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730161003', '04', '정체', '(16시 10분부터)', '서창분기점(1K)-서창(0K)', 1, 1, 37.428961, 126.737875, 'cctv00005669', '서창', 'https://exmobile8.hscdn.com/cctv5669image/ch00005669_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv5669.stream/playlist.m3u8', 1, 1, NULL, NULL, NULL, NULL, NULL, '(16시 10분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730161003', '04', '정체', '(16시 10분부터)', '서창분기점(1K)-서창(0K)', 1, 1, 37.428961, 126.737875, 'cctv00005669', '서창', 'https://exmobile8.hscdn.com/cctv5669image/ch00005669_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv5669.stream/playlist.m3u8', 1, 1, NULL, NULL, NULL, NULL, NULL, '(16시 10분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730161104', '01', '기타', '(갓길)승합차고장 처리중 (16시 11분부터)', '감곡부근(252.1K)', 252.1, -1, 37.129423, 127.66049, 'cctv00005386', '상우1교', 'https://exmobile8.hscdn.com/cctv5386image/ch00005386_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5386.stream/playlist.m3u8', 252.1, 0, NULL, NULL, NULL, NULL, NULL, '(16시 11분부터)', '(갓길)승합차고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730161104', '01', '기타', '(갓길)승합차고장 처리중 (16시 11분부터)', '감곡부근(252.1K)', 252.1, -1, 37.129423, 127.66049, 'cctv00005386', '상우1교', 'https://exmobile8.hscdn.com/cctv5386image/ch00005386_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5386.stream/playlist.m3u8', 252.1, 0, NULL, NULL, NULL, NULL, NULL, '(16시 11분부터)', '(갓길)승합차고장 처리중');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730161342', '01', '기타', '(갓길)중형화물차 고장 처리중 (16시 13분부터)', '서천(휴)부근(166.5K)', 166.5, -1, 36.119755, 126.636626, 'cctv00002043', '종천1교', 'https://exmobile4.hscdn.com/cctv2043image/ch00002043_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv2043.stream/playlist.m3u8', 166.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 13분부터)', '(갓길)중형화물차 고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730161342', '01', '기타', '(갓길)중형화물차 고장 처리중 (16시 13분부터)', '서천(휴)부근(166.5K)', 166.5, -1, 36.119755, 126.636626, 'cctv00002043', '종천1교', 'https://exmobile4.hscdn.com/cctv2043image/ch00002043_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv2043.stream/playlist.m3u8', 166.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 13분부터)', '(갓길)중형화물차 고장 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730161727', '04', '정체', '(16시 17분부터)', '둔대분기점(23K)-반월터널부근(21K)', 23, 2, 37.322581, 126.907065, 'cctv00005041', '둔대분기점', 'https://exmobile8.hscdn.com/cctv5041image/ch00005041_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv5041.stream/playlist.m3u8', 23, 23, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730161727', '04', '정체', '(16시 17분부터)', '둔대분기점(23K)-반월터널부근(21K)', 23, 2, 37.322581, 126.907065, 'cctv00005041', '둔대분기점', 'https://exmobile8.hscdn.com/cctv5041image/ch00005041_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv5041.stream/playlist.m3u8', 23, 23, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0270', '1', 'E', '순천완주선', 6, 27, '완주방향', '20260730161748', '01', '기타', '(갓길) 화물차 고장 처리중 (16시 17분부터)', '서면2터널부근(10.7K)', 10.7, -1, 35.028166, 127.507502, 'cctv00005578', '서면2터널(완주외부1)', 'https://exmobile8.hscdn.com/cctv5578image/ch00005578_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5578.stream/playlist.m3u8', 10.7, 0, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', '(갓길) 화물차 고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0270', '1', 'E', '순천완주선', 6, 27, '완주방향', '20260730161748', '01', '기타', '(갓길) 화물차 고장 처리중 (16시 17분부터)', '서면2터널부근(10.7K)', 10.7, -1, 35.028166, 127.507502, 'cctv00005578', '서면2터널(완주외부1)', 'https://exmobile8.hscdn.com/cctv5578image/ch00005578_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5578.stream/playlist.m3u8', 10.7, 0, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', '(갓길) 화물차 고장 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0160', '1', 'E', '울산선', 6, 16, '울산방향', '20260730161750', '01', '기타', '(갓길)화물차 고장처리 중 (16시 17분부터)', '범서하이패스(10.3K)', 10.3, -1, 35.570555, 129.227118, 'cctv00005346', '입암', 'https://exmobile4.hscdn.com/cctv5346image/ch00005346_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5346.stream/playlist.m3u8', 10.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', '(갓길)화물차 고장처리 중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0160', '1', 'E', '울산선', 6, 16, '울산방향', '20260730161750', '01', '기타', '(갓길)화물차 고장처리 중 (16시 17분부터)', '범서하이패스(10.3K)', 10.3, -1, 35.570555, 129.227118, 'cctv00005346', '입암', 'https://exmobile4.hscdn.com/cctv5346image/ch00005346_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv5346.stream/playlist.m3u8', 10.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', '(갓길)화물차 고장처리 중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730161757', '04', '정체', '진출로 (16시 17분부터)', '서용인분기점(50K)', 50, 1, 37.268988, 127.186046, 'cctv00000363', '마성터널(강릉)', 'https://exmobile8.hscdn.com/cctv0363image/ch00000363_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0363.stream/playlist.m3u8', 50, 0, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', '진출로');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730161757', '04', '정체', '진출로 (16시 17분부터)', '서용인분기점(50K)', 50, 1, 37.268988, 127.186046, 'cctv00000363', '마성터널(강릉)', 'https://exmobile8.hscdn.com/cctv0363image/ch00000363_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0363.stream/playlist.m3u8', 50, 0, NULL, NULL, NULL, NULL, NULL, '(16시 17분부터)', '진출로');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730161803', '01', '기타', '(갓길) 화물 고장차 처리중 (16시 18분부터)', '당진부근(267.3K)', 267.3, -1, 36.906553, 126.733865, 'cctv00000626', '영천교(고정)', 'https://exmobile4.hscdn.com/cctv0626image/ch00000626_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0626.stream/playlist.m3u8', 267.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 18분부터)', '(갓길) 화물 고장차 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730161803', '01', '기타', '(갓길) 화물 고장차 처리중 (16시 18분부터)', '당진부근(267.3K)', 267.3, -1, 36.906553, 126.733865, 'cctv00000626', '영천교(고정)', 'https://exmobile4.hscdn.com/cctv0626image/ch00000626_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0626.stream/playlist.m3u8', 267.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 18분부터)', '(갓길) 화물 고장차 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0550', '2', 'S', '중앙선', 6, 55, '부산방향', '20260730161902', '04', '정체', '(16시 19분부터)', '초정(5K)-삼락(0K)', 5, 5, 35.235254, 128.980641, 'cctv00003672', '초정', 'https://exmobile8.hscdn.com/cctv3672image/ch00003672_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3672.stream/playlist.m3u8', 5, 5, NULL, NULL, NULL, NULL, NULL, '(16시 19분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0550', '2', 'S', '중앙선', 6, 55, '부산방향', '20260730161902', '04', '정체', '(16시 19분부터)', '초정(5K)-삼락(0K)', 5, 5, 35.235254, 128.980641, 'cctv00003672', '초정', 'https://exmobile8.hscdn.com/cctv3672image/ch00003672_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv3672.stream/playlist.m3u8', 5, 5, NULL, NULL, NULL, NULL, NULL, '(16시 19분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'E', '영동선', 4, 50, '강릉방향', '20260730161916', '04', '정체', '(16시 19분부터)', '둔대분기점(22K)-부곡(27K)', 22, 5, 37.322957, 126.895948, 'cctv00000220', '둔대교', 'https://exmobile8.hscdn.com/cctv0220image/ch00000220_20260730.154600.000.jpg', 'https://live2.exmobile.hscdn.com/exlive/cctv0220.stream/playlist.m3u8', 22, 22, NULL, NULL, NULL, NULL, NULL, '(16시 19분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'E', '영동선', 4, 50, '강릉방향', '20260730161916', '04', '정체', '(16시 19분부터)', '둔대분기점(22K)-부곡(27K)', 22, 5, 37.322957, 126.895948, 'cctv00000220', '둔대교', 'https://exmobile8.hscdn.com/cctv0220image/ch00000220_20260730.154600.000.jpg', 'https://live2.exmobile.hscdn.com/exlive/cctv0220.stream/playlist.m3u8', 22, 22, NULL, NULL, NULL, NULL, NULL, '(16시 19분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'E', '논산천안선', 6, 25, '천안방향', '20260730162057', '00', '사고', '1차로 승용차 관련 사고발생 (16시 20분부터)', '남공주IC 오룡교(232.1K)', 225, 0, 36.34541, 127.06794, 'cctv00007164', '이인SA/남', 'https://exmobile4.hscdn.com/cctv7164image/ch00007164_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7164.stream/playlist.m3u8', 225, 225, NULL, NULL, NULL, NULL, NULL, '(16시 20분부터)', '1차로 승용차 관련 사고발생');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0252', '1', 'E', '논산천안선', 6, 25, '천안방향', '20260730162057', '00', '사고', '1차로 승용차 관련 사고발생 (16시 20분부터)', '남공주IC 오룡교(232.1K)', 225, 0, 36.34541, 127.06794, 'cctv00007164', '이인SA/남', 'https://exmobile4.hscdn.com/cctv7164image/ch00007164_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv7164.stream/playlist.m3u8', 225, 225, NULL, NULL, NULL, NULL, NULL, '(16시 20분부터)', '1차로 승용차 관련 사고발생');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730162117', '04', '정체', '(16시 21분부터)', '성남부근(3K)-판교분기점(0K)', 3, 3, 37.416928, 127.122446, 'cctv00005932', '성남삼평교2', 'https://exmobile4.hscdn.com/cctv5932image/ch00005932_20260730.154600.000.jpg', 'https://live5.exmobile.hscdn.com/exlive/cctv5932.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(16시 21분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730162117', '04', '정체', '(16시 21분부터)', '성남부근(3K)-판교분기점(0K)', 3, 3, 37.416928, 127.122446, 'cctv00005932', '성남삼평교2', 'https://exmobile4.hscdn.com/cctv5932image/ch00005932_20260730.154600.000.jpg', 'https://live5.exmobile.hscdn.com/exlive/cctv5932.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(16시 21분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730162134', '04', '정체', '(16시 21분부터)', '판교분기점(128K)-판교분기점부근(126K)', 128, 2, 37.405686, 127.094436, 'cctv00005666', '금토', 'https://exmobile8.hscdn.com/cctv5666image/ch00005666_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv5666.stream/playlist.m3u8', 128, 128, NULL, NULL, NULL, NULL, NULL, '(16시 21분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730162134', '04', '정체', '(16시 21분부터)', '판교분기점(128K)-판교분기점부근(126K)', 128, 2, 37.405686, 127.094436, 'cctv00005666', '금토', 'https://exmobile8.hscdn.com/cctv5666image/ch00005666_20260730.154600.000.jpg', 'https://live11.exmobile.hscdn.com/exlive/cctv5666.stream/playlist.m3u8', 128, 128, NULL, NULL, NULL, NULL, NULL, '(16시 21분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730162214', '04', '정체', '(16시 22분부터)', '서하남분기점(16K)-송파부근(7K)', 16, 9, 37.515281, 127.169685, 'cctv00000251', '광암터널2', 'https://exmobile4.hscdn.com/cctv0251image/ch00000251_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0251.stream/playlist.m3u8', 16, 16, NULL, NULL, NULL, NULL, NULL, '(16시 22분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'S', '수도권제1순환선', 5, 100, '일산방향', '20260730162214', '04', '정체', '(16시 22분부터)', '서하남분기점(16K)-송파부근(7K)', 16, 9, 37.515281, 127.169685, 'cctv00000251', '광암터널2', 'https://exmobile4.hscdn.com/cctv0251image/ch00000251_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0251.stream/playlist.m3u8', 16, 16, NULL, NULL, NULL, NULL, NULL, '(16시 22분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730162324', '04', '정체', '(16시 23분부터)', '덕소삼패(3K)-강일(0K)', 3, 3, 37.587067, 127.199448, 'cctv00000427', '미사대교종점', 'https://exmobile8.hscdn.com/cctv0427image/ch00000427_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0427.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(16시 23분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730162324', '04', '정체', '(16시 23분부터)', '덕소삼패(3K)-강일(0K)', 3, 3, 37.587067, 127.199448, 'cctv00000427', '미사대교종점', 'https://exmobile8.hscdn.com/cctv0427image/ch00000427_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0427.stream/playlist.m3u8', 3, 3, NULL, NULL, NULL, NULL, NULL, '(16시 23분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730162343', '04', '정체', '(16시 23분부터)', '감곡(251K)-감곡부근(255K)', 251, 4, 37.124313, 127.670833, 'cctv00003206', '감곡', 'https://exmobile4.hscdn.com/cctv3206image/ch00003206_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv3206.stream/playlist.m3u8', 251, 251, NULL, NULL, NULL, NULL, NULL, '(16시 23분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730162343', '04', '정체', '(16시 23분부터)', '감곡(251K)-감곡부근(255K)', 251, 4, 37.124313, 127.670833, 'cctv00003206', '감곡', 'https://exmobile4.hscdn.com/cctv3206image/ch00003206_20260730.154600.000.jpg', 'https://live10.exmobile.hscdn.com/exlive/cctv3206.stream/playlist.m3u8', 251, 251, NULL, NULL, NULL, NULL, NULL, '(16시 23분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730162344', '04', '정체', '(16시 23분부터)', '강일(24K)-구리남양주요금소(27K)', 24, 3, 37.566883, 127.170658, 'cctv00000143', '강일육교', 'https://exmobile8.hscdn.com/cctv0143image/ch00000143_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0143.stream/playlist.m3u8', 24, 24, NULL, NULL, NULL, NULL, NULL, '(16시 23분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730162344', '04', '정체', '(16시 23분부터)', '강일(24K)-구리남양주요금소(27K)', 24, 3, 37.566883, 127.170658, 'cctv00000143', '강일육교', 'https://exmobile8.hscdn.com/cctv0143image/ch00000143_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0143.stream/playlist.m3u8', 24, 24, NULL, NULL, NULL, NULL, NULL, '(16시 23분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'E', '제2경인선', 6, 110, '성남방향', '20260730162409', '04', '정체', '(16시 24분부터)', '안현분기점(17K)-안현분기점(18K)', 17, 1, 37.437119, 126.816192, 'cctv00001536', '안현분기점1', 'https://exmobile4.hscdn.com/cctv1536image/ch00001536_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv1536.stream/playlist.m3u8', 17, 17, NULL, NULL, NULL, NULL, NULL, '(16시 24분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'E', '제2경인선', 6, 110, '성남방향', '20260730162409', '04', '정체', '(16시 24분부터)', '안현분기점(17K)-안현분기점(18K)', 17, 1, 37.437119, 126.816192, 'cctv00001536', '안현분기점1', 'https://exmobile4.hscdn.com/cctv1536image/ch00001536_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv1536.stream/playlist.m3u8', 17, 17, NULL, NULL, NULL, NULL, NULL, '(16시 24분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730163326', '04', '정체', '(16시 33분부터)', '회덕분기점(277K)-회덕분기점부근(276K)', 277, 1, 36.396149, 127.419059, 'cctv00000873', '신대철교', 'https://exmobile4.hscdn.com/cctv0873image/ch00000873_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0873.stream/playlist.m3u8', 277, 277, NULL, NULL, NULL, NULL, NULL, '(16시 33분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730163326', '04', '정체', '(16시 33분부터)', '회덕분기점(277K)-회덕분기점부근(276K)', 277, 1, 36.396149, 127.419059, 'cctv00000873', '신대철교', 'https://exmobile4.hscdn.com/cctv0873image/ch00000873_20260730.154600.000.jpg', 'https://live4.exmobile.hscdn.com/exlive/cctv0873.stream/playlist.m3u8', 277, 277, NULL, NULL, NULL, NULL, NULL, '(16시 33분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0270', '1', 'E', '순천완주선', 6, 27, '완주방향', '20260730163357', '03', '작업', '(갓길) 노면보수 작업중 (16시 33분부터)', '황전(25.4K)', 25.4, -1, 35.149569, 127.455096, 'cctv00001436', '황전', 'https://exmobile8.hscdn.com/cctv1436image/ch00001436_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv1436.stream/playlist.m3u8', 25.4, 0, NULL, NULL, NULL, NULL, NULL, '(16시 33분부터)', '(갓길) 노면보수 작업중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0270', '1', 'E', '순천완주선', 6, 27, '완주방향', '20260730163357', '03', '작업', '(갓길) 노면보수 작업중 (16시 33분부터)', '황전(25.4K)', 25.4, -1, 35.149569, 127.455096, 'cctv00001436', '황전', 'https://exmobile8.hscdn.com/cctv1436image/ch00001436_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv1436.stream/playlist.m3u8', 25.4, 0, NULL, NULL, NULL, NULL, NULL, '(16시 33분부터)', '(갓길) 노면보수 작업중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730163548', '04', '정체', '(16시 35분부터)', '이천부근(82K)-호법분기점부근(75K)', 82, 7, 37.242627, 127.522886, 'cctv00000359', '가산리', 'https://exmobile4.hscdn.com/cctv0359image/ch00000359_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0359.stream/playlist.m3u8', 82, 82, NULL, NULL, NULL, NULL, NULL, '(16시 35분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730163548', '04', '정체', '(16시 35분부터)', '이천부근(82K)-호법분기점부근(75K)', 82, 7, 37.242627, 127.522886, 'cctv00000359', '가산리', 'https://exmobile4.hscdn.com/cctv0359image/ch00000359_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0359.stream/playlist.m3u8', 82, 82, NULL, NULL, NULL, NULL, NULL, '(16시 35분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0352', '1', 'E', '중부선', 3, 35, '하남방향', '20260730164203', '04', '정체', '(16시 42분부터)', '경기광주IC(352K)-중부1터널부근(355K)', 352, 3, 37.447946, 127.269718, 'cctv00000267', '광주', 'https://exmobile4.hscdn.com/cctv0267image/ch00000267_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0267.stream/playlist.m3u8', 352, 352, NULL, NULL, NULL, NULL, NULL, '(16시 42분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0352', '1', 'E', '중부선', 3, 35, '하남방향', '20260730164203', '04', '정체', '(16시 42분부터)', '경기광주IC(352K)-중부1터널부근(355K)', 352, 3, 37.447946, 127.269718, 'cctv00000267', '광주', 'https://exmobile4.hscdn.com/cctv0267image/ch00000267_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0267.stream/playlist.m3u8', 352, 352, NULL, NULL, NULL, NULL, NULL, '(16시 42분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730164308', '01', '기타', '(갓길) 승용차 고장 처리중 (16시 43분부터)', '남춘천부근(53.6K)', 53.6, -1, 37.745234, 127.694504, 'cctv00000172', '행촌2교', 'https://exmobile4.hscdn.com/cctv0172image/ch00000172_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0172.stream/playlist.m3u8', 53.6, 0, NULL, NULL, NULL, NULL, NULL, '(16시 43분부터)', '(갓길) 승용차 고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730164308', '01', '기타', '(갓길) 승용차 고장 처리중 (16시 43분부터)', '남춘천부근(53.6K)', 53.6, -1, 37.745234, 127.694504, 'cctv00000172', '행촌2교', 'https://exmobile4.hscdn.com/cctv0172image/ch00000172_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0172.stream/playlist.m3u8', 53.6, 0, NULL, NULL, NULL, NULL, NULL, '(16시 43분부터)', '(갓길) 승용차 고장 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'E', '영동선', 4, 50, '강릉방향', '20260730164416', '00', '사고', '(인천 진출로)사고 처리중 (16시 44분부터)', '서창분기점(0.5K)', .5, -1, 37.433432, 126.738571, 'cctv00005927', '서창JC', 'https://exmobile4.hscdn.com/cctv5927image/ch00005927_20260730.154600.000.jpg', 'https://live8.exmobile.hscdn.com/exlive/cctv5927.stream/playlist.m3u8', 0.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 44분부터)', '(인천 진출로)사고 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'E', '영동선', 4, 50, '강릉방향', '20260730164416', '00', '사고', '(인천 진출로)사고 처리중 (16시 44분부터)', '서창분기점(0.5K)', .5, -1, 37.433432, 126.738571, 'cctv00005927', '서창JC', 'https://exmobile4.hscdn.com/cctv5927image/ch00005927_20260730.154600.000.jpg', 'https://live8.exmobile.hscdn.com/exlive/cctv5927.stream/playlist.m3u8', 0.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 44분부터)', '(인천 진출로)사고 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730164625', '01', '기타', '(2차로)고장차 처리중 (16시 46분부터)', '월곶분기점부근(6.3K)', 6.3, -1, 37.386135, 126.755797, 'cctv00000336', '월곶', 'https://exmobile4.hscdn.com/cctv0336image/ch00000336_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0336.stream/playlist.m3u8', 6.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 46분부터)', '(2차로)고장차 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0500', '1', 'S', '영동선', 4, 50, '인천방향', '20260730164625', '01', '기타', '(2차로)고장차 처리중 (16시 46분부터)', '월곶분기점부근(6.3K)', 6.3, -1, 37.386135, 126.755797, 'cctv00000336', '월곶', 'https://exmobile4.hscdn.com/cctv0336image/ch00000336_20260730.154600.000.jpg', 'https://live16.exmobile.hscdn.com/exlive/cctv0336.stream/playlist.m3u8', 6.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 46분부터)', '(2차로)고장차 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0351', '1', 'S', '통영대전선', 6, 35, '통영방향', '20260730164648', '01', '기타', '(2차로,갓길)승용차 고장 처리중 (16시 46분부터)', '마달터널부근(202.5K)', 202.5, -1, 36.248086, 127.474032, 'cctv00000463', '공주교', 'https://exmobile8.hscdn.com/cctv0463image/ch00000463_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0463.stream/playlist.m3u8', 202.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 46분부터)', '(2차로,갓길)승용차 고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0351', '1', 'S', '통영대전선', 6, 35, '통영방향', '20260730164648', '01', '기타', '(2차로,갓길)승용차 고장 처리중 (16시 46분부터)', '마달터널부근(202.5K)', 202.5, -1, 36.248086, 127.474032, 'cctv00000463', '공주교', 'https://exmobile8.hscdn.com/cctv0463image/ch00000463_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0463.stream/playlist.m3u8', 202.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 46분부터)', '(2차로,갓길)승용차 고장 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730164727', '00', '사고', '(3,4차로) 사고 처리중 (16시 47분부터)', '자유로(72K)', 72, 2, 37.618882, 126.799826, 'cctv00000224', '자유로분기점', 'https://exmobile4.hscdn.com/cctv0224image/ch00000224_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0224.stream/playlist.m3u8', 72, 0, NULL, NULL, NULL, NULL, NULL, '(16시 47분부터)', '(3,4차로) 사고 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1000', '1', 'E', '수도권제1순환선', 5, 100, '구리방향', '20260730164727', '00', '사고', '(3,4차로) 사고 처리중 (16시 47분부터)', '자유로(72K)', 72, 2, 37.618882, 126.799826, 'cctv00000224', '자유로분기점', 'https://exmobile4.hscdn.com/cctv0224image/ch00000224_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0224.stream/playlist.m3u8', 72, 0, NULL, NULL, NULL, NULL, NULL, '(16시 47분부터)', '(3,4차로) 사고 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730164739', '04', '정체', '(16시 47분부터)', '기흥(388K)-신갈분기점(394K)', 388, 6, 37.228626, 127.105739, 'cctv00000700', '보정교', 'https://exmobile4.hscdn.com/cctv0700image/ch00000700_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv0700.stream/playlist.m3u8', 388, 388, NULL, NULL, NULL, NULL, NULL, '(16시 47분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730164739', '04', '정체', '(16시 47분부터)', '기흥(388K)-신갈분기점(394K)', 388, 6, 37.228626, 127.105739, 'cctv00000700', '보정교', 'https://exmobile4.hscdn.com/cctv0700image/ch00000700_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv0700.stream/playlist.m3u8', 388, 388, NULL, NULL, NULL, NULL, NULL, '(16시 47분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730164817', '04', '정체', '(16시 48분부터)', '신갈분기점부근(397K)-신갈분기점(394K)', 397, 3, 37.309238, 127.103578, 'cctv00000008', '죽전', 'https://exmobile4.hscdn.com/cctv0008image/ch00000008_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0008.stream/playlist.m3u8', 397, 397, NULL, NULL, NULL, NULL, NULL, '(16시 48분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730164817', '04', '정체', '(16시 48분부터)', '신갈분기점부근(397K)-신갈분기점(394K)', 397, 3, 37.309238, 127.103578, 'cctv00000008', '죽전', 'https://exmobile4.hscdn.com/cctv0008image/ch00000008_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv0008.stream/playlist.m3u8', 397, 397, NULL, NULL, NULL, NULL, NULL, '(16시 48분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0351', '1', 'S', '통영대전선', 6, 35, '통영방향', '20260730165102', '01', '기타', '(갓길)화물차 고장 처리중 (16시 51분부터)', '동고성(14.3K)', 14.3, -1, 34.970155, 128.385918, 'cctv00001582', '송산', 'https://exmobile4.hscdn.com/cctv1582image/ch00001582_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv1582.stream/playlist.m3u8', 14.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 51분부터)', '(갓길)화물차 고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0351', '1', 'S', '통영대전선', 6, 35, '통영방향', '20260730165102', '01', '기타', '(갓길)화물차 고장 처리중 (16시 51분부터)', '동고성(14.3K)', 14.3, -1, 34.970155, 128.385918, 'cctv00001582', '송산', 'https://exmobile4.hscdn.com/cctv1582image/ch00001582_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv1582.stream/playlist.m3u8', 14.3, 0, NULL, NULL, NULL, NULL, NULL, '(16시 51분부터)', '(갓길)화물차 고장 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0400', '1', 'E', '평택제천선', 6, 40, '제천방향', '20260730165135', '04', '정체', '(16시 51분부터)', '안성분기점(23K)-안성분기점(24K)', 23, 1, 37.034317, 127.131112, 'cctv00000388', '안성분기점_평택제천', 'https://exmobile4.hscdn.com/cctv0388image/ch00000388_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv0388.stream/playlist.m3u8', 23, 23, NULL, NULL, NULL, NULL, NULL, '(16시 51분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0400', '1', 'E', '평택제천선', 6, 40, '제천방향', '20260730165135', '04', '정체', '(16시 51분부터)', '안성분기점(23K)-안성분기점(24K)', 23, 1, 37.034317, 127.131112, 'cctv00000388', '안성분기점_평택제천', 'https://exmobile4.hscdn.com/cctv0388image/ch00000388_20260730.154600.000.jpg', 'https://live14.exmobile.hscdn.com/exlive/cctv0388.stream/playlist.m3u8', 23, 23, NULL, NULL, NULL, NULL, NULL, '(16시 51분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730165504', '01', '기타', '(갓길)승용차 고장처리중 (16시 55분부터)', '동대구분기점(122.5K)', 122.5, -1, 35.887948, 128.690911, 'cctv00002300', '동대구', 'https://exmobile8.hscdn.com/cctv2300image/ch00002300_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv2300.stream/playlist.m3u8', 122.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 55분부터)', '(갓길)승용차 고장처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'S', '경부선', 1, 1, '부산방향', '20260730165504', '01', '기타', '(갓길)승용차 고장처리중 (16시 55분부터)', '동대구분기점(122.5K)', 122.5, -1, 35.887948, 128.690911, 'cctv00002300', '동대구', 'https://exmobile8.hscdn.com/cctv2300image/ch00002300_20260730.154600.000.jpg', 'https://live1.exmobile.hscdn.com/exlive/cctv2300.stream/playlist.m3u8', 122.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 55분부터)', '(갓길)승용차 고장처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730165618', '00', '사고', '(2,3차로)승용차관련 사고처리중 (16시 56분부터)', '남춘천부근(53.8K)', 53.8, 3, 37.745877, 127.696623, 'cctv00000172', '행촌2교', 'https://exmobile4.hscdn.com/cctv0172image/ch00000172_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0172.stream/playlist.m3u8', 53.8, 0, NULL, NULL, NULL, NULL, NULL, '(16시 56분부터)', '(2,3차로)승용차관련 사고처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0600', '1', 'S', '서울양양선', 6, 60, '서울방향', '20260730165618', '00', '사고', '(2,3차로)승용차관련 사고처리중 (16시 56분부터)', '남춘천부근(53.8K)', 53.8, 3, 37.745877, 127.696623, 'cctv00000172', '행촌2교', 'https://exmobile4.hscdn.com/cctv0172image/ch00000172_20260730.154600.000.jpg', 'https://live17.exmobile.hscdn.com/exlive/cctv0172.stream/playlist.m3u8', 53.8, 0, NULL, NULL, NULL, NULL, NULL, '(16시 56분부터)', '(2,3차로)승용차관련 사고처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730165638', '22', '기타', '(갓길)보행자 조치중 (16시 56분부터)', '안성(휴)(370K)', 370, -1, 37.080963, 127.127648, 'cctv00000097', '산하', 'https://exmobile8.hscdn.com/cctv0097image/ch00000097_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0097.stream/playlist.m3u8', 370, 0, NULL, NULL, NULL, NULL, NULL, '(16시 56분부터)', '(갓길)보행자 조치중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0010', '1', 'E', '경부선', 1, 1, '서울방향', '20260730165638', '22', '기타', '(갓길)보행자 조치중 (16시 56분부터)', '안성(휴)(370K)', 370, -1, 37.080963, 127.127648, 'cctv00000097', '산하', 'https://exmobile8.hscdn.com/cctv0097image/ch00000097_20260730.154600.000.jpg', 'https://live15.exmobile.hscdn.com/exlive/cctv0097.stream/playlist.m3u8', 370, 0, NULL, NULL, NULL, NULL, NULL, '(16시 56분부터)', '(갓길)보행자 조치중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1200', '1', 'S', '경인선', 6, 120, '인천방향', '20260730165724', '04', '정체', '(16시 57분부터)', '부천(20K)-부천(19K)', 20, 1, 37.523066, 126.788085, 'cctv00005937', '도당육교', 'https://exmobile4.hscdn.com/cctv5937image/ch00005937_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv5937.stream/playlist.m3u8', 20, 20, NULL, NULL, NULL, NULL, NULL, '(16시 57분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1200', '1', 'S', '경인선', 6, 120, '인천방향', '20260730165724', '04', '정체', '(16시 57분부터)', '부천(20K)-부천(19K)', 20, 1, 37.523066, 126.788085, 'cctv00005937', '도당육교', 'https://exmobile4.hscdn.com/cctv5937image/ch00005937_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv5937.stream/playlist.m3u8', 20, 20, NULL, NULL, NULL, NULL, NULL, '(16시 57분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730165823', '01', '기타', '(진입로 갓길) 화물차 고장 처리 중 (16시 58분부터)', '영산(24K)', 24, -1, 35.450343, 128.508937, 'cctv00001539', '봉산', 'https://exmobile4.hscdn.com/cctv1539image/ch00001539_20260730.154600.000.jpg', 'https://live3.exmobile.hscdn.com/exlive/cctv1539.stream/playlist.m3u8', 24, 0, NULL, NULL, NULL, NULL, NULL, '(16시 58분부터)', '(진입로 갓길) 화물차 고장 처리 중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730165823', '01', '기타', '(진입로 갓길) 화물차 고장 처리 중 (16시 58분부터)', '영산(24K)', 24, -1, 35.450343, 128.508937, 'cctv00001539', '봉산', 'https://exmobile4.hscdn.com/cctv1539image/ch00001539_20260730.154600.000.jpg', 'https://live3.exmobile.hscdn.com/exlive/cctv1539.stream/playlist.m3u8', 24, 0, NULL, NULL, NULL, NULL, NULL, '(16시 58분부터)', '(진입로 갓길) 화물차 고장 처리 중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730165846', '00', '사고', '(1차로)사고 처리중 (16시 58분부터)', '화성(휴)(301.5K)', 301.5, 1, 37.141864, 126.880157, 'cctv00002406', '화성휴게소2', 'https://exmobile8.hscdn.com/cctv2406image/ch00002406_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv2406.stream/playlist.m3u8', 301.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 58분부터)', '(1차로)사고 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0150', '1', 'E', '서해안선', 2, 15, '서울방향', '20260730165846', '00', '사고', '(1차로)사고 처리중 (16시 58분부터)', '화성(휴)(301.5K)', 301.5, 1, 37.141864, 126.880157, 'cctv00002406', '화성휴게소2', 'https://exmobile8.hscdn.com/cctv2406image/ch00002406_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv2406.stream/playlist.m3u8', 301.5, 0, NULL, NULL, NULL, NULL, NULL, '(16시 58분부터)', '(1차로)사고 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'S', '제2경인선', 6, 110, '인천방향', '20260730170117', '04', '정체', '(17시 01분부터)', '안현분기점(18K)-신천(14K)', 18, 4, 37.440082, 126.826665, 'cctv00001537', '안현분기점2', 'https://exmobile4.hscdn.com/cctv1537image/ch00001537_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv1537.stream/playlist.m3u8', 18, 18, NULL, NULL, NULL, NULL, NULL, '(17시 01분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('1100', '1', 'S', '제2경인선', 6, 110, '인천방향', '20260730170117', '04', '정체', '(17시 01분부터)', '안현분기점(18K)-신천(14K)', 18, 4, 37.440082, 126.826665, 'cctv00001537', '안현분기점2', 'https://exmobile4.hscdn.com/cctv1537image/ch00001537_20260730.154600.000.jpg', 'https://live12.exmobile.hscdn.com/exlive/cctv1537.stream/playlist.m3u8', 18, 18, NULL, NULL, NULL, NULL, NULL, '(17시 01분부터)', NULL);
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730170123', '01', '기타', '(갓길)승용차고장 처리중 (17시 01분부터)', '여주분기점부근(261K)', 261, -1, 37.196645, 127.61217, 'cctv00005146', '금당교_중부내륙', 'https://exmobile8.hscdn.com/cctv5146image/ch00005146_20260730.154600.000.jpg', 'https://live5.exmobile.hscdn.com/exlive/cctv5146.stream/playlist.m3u8', 261, 0, NULL, NULL, NULL, NULL, NULL, '(17시 01분부터)', '(갓길)승용차고장 처리중');
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('0450', '1', 'E', '중부내륙선', 6, 45, '양평방향', '20260730170123', '01', '기타', '(갓길)승용차고장 처리중 (17시 01분부터)', '여주분기점부근(261K)', 261, -1, 37.196645, 127.61217, 'cctv00005146', '금당교_중부내륙', 'https://exmobile8.hscdn.com/cctv5146image/ch00005146_20260730.154600.000.jpg', 'https://live5.exmobile.hscdn.com/exlive/cctv5146.stream/playlist.m3u8', 261, 0, NULL, NULL, NULL, NULL, NULL, '(17시 01분부터)', '(갓길)승용차고장 처리중');
|
||||||
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('2510', '1', 'E', '호남지선', 6, 251, '대전방향', '20260730170212', '04', '정체', '(17시 02분부터)', '북대전부근(52K)-회덕분기점(54K)', 52, 2, 36.409214, 127.399012, 'cctv00005468', '탑립육교', 'https://exmobile4.hscdn.com/cctv5468image/ch00005468_20260730.154600.000.jpg', 'https://live7.exmobile.hscdn.com/exlive/cctv5468.stream/playlist.m3u8', 52, 52, NULL, NULL, NULL, NULL, NULL, '(17시 02분부터)', NULL);
|
INSERT INTO TROAD_APP.T_ACDT_BRNWS_VER001 (ROUTECD, GRPID, BOUND, ROADNM, ROUTESORT, ROADSHORTNO, BOUNDNM, INCIDENT_ID, INCI_TP_ORDER, INCI_TP, MSG, INCIDENT_POS_NAME, OCRN_DSTNC, CNGS_LNGT, LAT, LON, CCTV_ID, CCTV_NM, THUMBIMAGE, HLS_URL, ST_D, EN_D, VVALUE01, VVALUE02, VVALUE03, VVALUE04, VVALUE05, CRCM_TIME, CRCM_MSG) VALUES ('2510', '1', 'E', '호남지선', 6, 251, '대전방향', '20260730170212', '04', '정체', '(17시 02분부터)', '북대전부근(52K)-회덕분기점(54K)', 52, 2, 36.409214, 127.399012, 'cctv00005468', '탑립육교', 'https://exmobile4.hscdn.com/cctv5468image/ch00005468_20260730.154600.000.jpg', 'https://live7.exmobile.hscdn.com/exlive/cctv5468.stream/playlist.m3u8', 52, 52, NULL, NULL, NULL, NULL, NULL, '(17시 02분부터)', NULL);
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|||||||
Regular → Executable
+110
-110
@@ -1,110 +1,110 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""TROAD CSV 덤프를 Oracle INSERT 스크립트로 변환한다.
|
"""TROAD CSV 덤프를 Oracle INSERT 스크립트로 변환한다.
|
||||||
|
|
||||||
사용법:
|
사용법:
|
||||||
python3 csv_to_insert.py <csv> --table OPR_MAIN.T_INCIDENT_FTMS \
|
python3 csv_to_insert.py <csv> --table OPR_MAIN.T_INCIDENT_FTMS \
|
||||||
--numeric ROAD_NO,START_MILEPOST --out ../sql/20_v_incident_ftms_data.sql
|
--numeric ROAD_NO,START_MILEPOST --out ../sql/20_v_incident_ftms_data.sql
|
||||||
|
|
||||||
CSV 헤더가 대상 테이블의 컬럼명과 같아야 한다.
|
CSV 헤더가 대상 테이블의 컬럼명과 같아야 한다.
|
||||||
공백만 있는 값은 NULL 로 넣는다.
|
공백만 있는 값은 NULL 로 넣는다.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import csv
|
import csv
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
BATCH_COMMIT = 50
|
BATCH_COMMIT = 50
|
||||||
|
|
||||||
|
|
||||||
def sql_literal(value: str, numeric: bool, date: bool) -> str:
|
def sql_literal(value: str, numeric: bool, date: bool) -> str:
|
||||||
text = value.strip()
|
text = value.strip()
|
||||||
if not text:
|
if not text:
|
||||||
return "NULL"
|
return "NULL"
|
||||||
if date:
|
if date:
|
||||||
escaped = text.replace("'", "''")
|
escaped = text.replace("'", "''")
|
||||||
return (
|
return (
|
||||||
f"TO_TIMESTAMP('{escaped}', "
|
f"TO_TIMESTAMP('{escaped}', "
|
||||||
"'YYYY-MM-DD HH24:MI:SS.FF')"
|
"'YYYY-MM-DD HH24:MI:SS.FF')"
|
||||||
)
|
)
|
||||||
if numeric:
|
if numeric:
|
||||||
try:
|
try:
|
||||||
float(text)
|
float(text)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return "NULL"
|
return "NULL"
|
||||||
return text
|
return text
|
||||||
return "'" + text.replace("'", "''") + "'"
|
return "'" + text.replace("'", "''") + "'"
|
||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("csv_path")
|
parser.add_argument("csv_path")
|
||||||
parser.add_argument("--table", required=True)
|
parser.add_argument("--table", required=True)
|
||||||
parser.add_argument("--numeric", default="", help="숫자 컬럼 목록(콤마 구분)")
|
parser.add_argument("--numeric", default="", help="숫자 컬럼 목록(콤마 구분)")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--date",
|
"--date",
|
||||||
default="",
|
default="",
|
||||||
help="날짜/시간 컬럼 목록(콤마 구분, YYYY-MM-DD HH24:MI:SS.FF)",
|
help="날짜/시간 컬럼 목록(콤마 구분, YYYY-MM-DD HH24:MI:SS.FF)",
|
||||||
)
|
)
|
||||||
parser.add_argument("--encoding", default="utf-8")
|
parser.add_argument("--encoding", default="utf-8")
|
||||||
parser.add_argument("--out", required=True)
|
parser.add_argument("--out", required=True)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--no-truncate",
|
"--no-truncate",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
help="기존 데이터 삭제 구문을 생략한다",
|
help="기존 데이터 삭제 구문을 생략한다",
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
numeric_cols = {c.strip().upper() for c in args.numeric.split(",") if c.strip()}
|
numeric_cols = {c.strip().upper() for c in args.numeric.split(",") if c.strip()}
|
||||||
date_cols = {c.strip().upper() for c in args.date.split(",") if c.strip()}
|
date_cols = {c.strip().upper() for c in args.date.split(",") if c.strip()}
|
||||||
overlap = numeric_cols & date_cols
|
overlap = numeric_cols & date_cols
|
||||||
if overlap:
|
if overlap:
|
||||||
parser.error(f"--numeric과 --date에 중복된 컬럼: {', '.join(sorted(overlap))}")
|
parser.error(f"--numeric과 --date에 중복된 컬럼: {', '.join(sorted(overlap))}")
|
||||||
csv_path = Path(args.csv_path)
|
csv_path = Path(args.csv_path)
|
||||||
|
|
||||||
with csv_path.open(newline="", encoding=args.encoding) as fp:
|
with csv_path.open(newline="", encoding=args.encoding) as fp:
|
||||||
rows = list(csv.reader(fp))
|
rows = list(csv.reader(fp))
|
||||||
|
|
||||||
if not rows:
|
if not rows:
|
||||||
print(f"빈 CSV: {csv_path}", file=sys.stderr)
|
print(f"빈 CSV: {csv_path}", file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
header = [h.strip().strip('"').upper() for h in rows[0]]
|
header = [h.strip().strip('"').upper() for h in rows[0]]
|
||||||
data = [r for r in rows[1:] if any(v.strip() for v in r)]
|
data = [r for r in rows[1:] if any(v.strip() for v in r)]
|
||||||
bad = [i for i, r in enumerate(data, start=2) if len(r) != len(header)]
|
bad = [i for i, r in enumerate(data, start=2) if len(r) != len(header)]
|
||||||
if bad:
|
if bad:
|
||||||
print(f"컬럼 수 불일치 라인: {bad[:10]}", file=sys.stderr)
|
print(f"컬럼 수 불일치 라인: {bad[:10]}", file=sys.stderr)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
out_path = Path(args.out)
|
out_path = Path(args.out)
|
||||||
out_path.parent.mkdir(parents=True, exist_ok=True)
|
out_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
with out_path.open("w", encoding="utf-8") as out:
|
with out_path.open("w", encoding="utf-8") as out:
|
||||||
out.write(f"-- 자동 생성: {csv_path.name} -> {args.table}\n")
|
out.write(f"-- 자동 생성: {csv_path.name} -> {args.table}\n")
|
||||||
out.write(f"-- 행 수: {len(data)}\n")
|
out.write(f"-- 행 수: {len(data)}\n")
|
||||||
out.write("-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py\n\n")
|
out.write("-- 생성 도구: server-dev/oracle/tools/csv_to_insert.py\n\n")
|
||||||
out.write("SET DEFINE OFF\n")
|
out.write("SET DEFINE OFF\n")
|
||||||
out.write("SET SQLBLANKLINES ON\n\n")
|
out.write("SET SQLBLANKLINES ON\n\n")
|
||||||
if not args.no_truncate:
|
if not args.no_truncate:
|
||||||
out.write(f"DELETE FROM {args.table};\n\n")
|
out.write(f"DELETE FROM {args.table};\n\n")
|
||||||
|
|
||||||
cols = ", ".join(header)
|
cols = ", ".join(header)
|
||||||
for idx, row in enumerate(data, start=1):
|
for idx, row in enumerate(data, start=1):
|
||||||
values = ", ".join(
|
values = ", ".join(
|
||||||
sql_literal(v, h in numeric_cols, h in date_cols)
|
sql_literal(v, h in numeric_cols, h in date_cols)
|
||||||
for h, v in zip(header, row)
|
for h, v in zip(header, row)
|
||||||
)
|
)
|
||||||
out.write(f"INSERT INTO {args.table} ({cols}) VALUES ({values});\n")
|
out.write(f"INSERT INTO {args.table} ({cols}) VALUES ({values});\n")
|
||||||
if idx % BATCH_COMMIT == 0:
|
if idx % BATCH_COMMIT == 0:
|
||||||
out.write("COMMIT;\n")
|
out.write("COMMIT;\n")
|
||||||
|
|
||||||
out.write("\nCOMMIT;\n")
|
out.write("\nCOMMIT;\n")
|
||||||
|
|
||||||
print(f"{len(data)} rows -> {out_path}")
|
print(f"{len(data)} rows -> {out_path}")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
raise SystemExit(main())
|
raise SystemExit(main())
|
||||||
|
|||||||
Regular → Executable
+5
-5
@@ -1,5 +1,5 @@
|
|||||||
Host github.exdev.co.kr
|
Host github.exdev.co.kr
|
||||||
HostName github.exdev.co.kr
|
HostName github.exdev.co.kr
|
||||||
Port 2222
|
Port 2222
|
||||||
User aidev
|
User aidev
|
||||||
IdentityFile ~/.ssh/id_ed25519
|
IdentityFile ~/.ssh/id_ed25519
|
||||||
|
|||||||
@@ -1,86 +1,86 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Gitea push 후 chatbot.exdev.co.kr 배포 완료 대기
|
# Gitea push 후 chatbot.exdev.co.kr 배포 완료 대기
|
||||||
# - UI 응답 또는 배포 로그의 "배포 완료" 확인
|
# - UI 응답 또는 배포 로그의 "배포 완료" 확인
|
||||||
# - "배포 실패"/컴파일 오류는 즉시 종료 (900s 무의미 대기 방지)
|
# - "배포 실패"/컴파일 오류는 즉시 종료 (900s 무의미 대기 방지)
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
EXDEV_SSH="${EXDEV_SSH:-aidev@chatbot.exdev.co.kr}"
|
EXDEV_SSH="${EXDEV_SSH:-aidev@chatbot.exdev.co.kr}"
|
||||||
DEPLOY_LOG="${DEPLOY_LOG:-/Volumes/ADATA/logs/deploy/exAichatbot_agent.log}"
|
DEPLOY_LOG="${DEPLOY_LOG:-/Volumes/ADATA/logs/deploy/exAichatbot_agent.log}"
|
||||||
PUBLIC_URL="${PUBLIC_BASE_URL:-https://chatbot.exdev.co.kr}/chatbot/ai/"
|
PUBLIC_URL="${PUBLIC_BASE_URL:-https://chatbot.exdev.co.kr}/chatbot/ai/"
|
||||||
MAX_WAIT="${DEPLOY_WAIT_SEC:-900}"
|
MAX_WAIT="${DEPLOY_WAIT_SEC:-900}"
|
||||||
|
|
||||||
log() { echo "[wait-deploy] $*"; }
|
log() { echo "[wait-deploy] $*"; }
|
||||||
|
|
||||||
ssh_cmd() {
|
ssh_cmd() {
|
||||||
ssh -o BatchMode=yes -o ConnectTimeout=15 "${EXDEV_SSH}" "$@"
|
ssh -o BatchMode=yes -o ConnectTimeout=15 "${EXDEV_SSH}" "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ! ssh_cmd "test -f '${DEPLOY_LOG}'" 2>/dev/null; then
|
if ! ssh_cmd "test -f '${DEPLOY_LOG}'" 2>/dev/null; then
|
||||||
log "배포 로그 없음 — SSH로 deploy 스크립트 직접 실행"
|
log "배포 로그 없음 — SSH로 deploy 스크립트 직접 실행"
|
||||||
ssh_cmd "bash /Volumes/ADATA/git/deploy-exAichatbot_agent.sh" || true
|
ssh_cmd "bash /Volumes/ADATA/git/deploy-exAichatbot_agent.sh" || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 대기 시작 시점의 로그 길이 — 이후 새로 찍힌 줄만 성공/실패 판정에 사용
|
# 대기 시작 시점의 로그 길이 — 이후 새로 찍힌 줄만 성공/실패 판정에 사용
|
||||||
LOG_BASE_BYTES="$(ssh_cmd "wc -c < '${DEPLOY_LOG}' 2>/dev/null || echo 0" | tr -d '[:space:]')"
|
LOG_BASE_BYTES="$(ssh_cmd "wc -c < '${DEPLOY_LOG}' 2>/dev/null || echo 0" | tr -d '[:space:]')"
|
||||||
LOG_BASE_BYTES="${LOG_BASE_BYTES:-0}"
|
LOG_BASE_BYTES="${LOG_BASE_BYTES:-0}"
|
||||||
|
|
||||||
log "배포 완료 대기 (최대 ${MAX_WAIT}s) — ${EXDEV_SSH}"
|
log "배포 완료 대기 (최대 ${MAX_WAIT}s) — ${EXDEV_SSH}"
|
||||||
start_ts="$(date +%s)"
|
start_ts="$(date +%s)"
|
||||||
deadline=$((start_ts + MAX_WAIT))
|
deadline=$((start_ts + MAX_WAIT))
|
||||||
|
|
||||||
new_log_tail() {
|
new_log_tail() {
|
||||||
ssh_cmd "tail -c +$((LOG_BASE_BYTES + 1)) '${DEPLOY_LOG}' 2>/dev/null | tail -80" || true
|
ssh_cmd "tail -c +$((LOG_BASE_BYTES + 1)) '${DEPLOY_LOG}' 2>/dev/null | tail -80" || true
|
||||||
}
|
}
|
||||||
|
|
||||||
while (( $(date +%s) < deadline )); do
|
while (( $(date +%s) < deadline )); do
|
||||||
recent="$(new_log_tail)"
|
recent="$(new_log_tail)"
|
||||||
|
|
||||||
# 신규 로그에 실패 마커가 있으면 즉시 종료
|
# 신규 로그에 실패 마커가 있으면 즉시 종료
|
||||||
if echo "${recent}" | grep -qE '\[ERROR\] 배포 실패|ERROR: chatbotApi 컴파일 실패|BUILD FAILED|\[ERROR\] 다른 배포 진행 중'; then
|
if echo "${recent}" | grep -qE '\[ERROR\] 배포 실패|ERROR: chatbotApi 컴파일 실패|BUILD FAILED|\[ERROR\] 다른 배포 진행 중'; then
|
||||||
log "⚠️ 원격 배포 실패 감지 — 최근 로그:"
|
log "⚠️ 원격 배포 실패 감지 — 최근 로그:"
|
||||||
echo "${recent}" | tail -40
|
echo "${recent}" | tail -40
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if curl -sf --max-time 5 "${PUBLIC_URL}" 2>/dev/null | grep -q 'data-chatbot-app'; then
|
if curl -sf --max-time 5 "${PUBLIC_URL}" 2>/dev/null | grep -q 'data-chatbot-app'; then
|
||||||
# UI 살아있어도, 이번 배포가 아직 실패로 끝났으면 성공으로 치지 않음
|
# UI 살아있어도, 이번 배포가 아직 실패로 끝났으면 성공으로 치지 않음
|
||||||
if echo "${recent}" | grep -qE '\[ERROR\] 배포 실패|ERROR: chatbotApi 컴파일 실패|BUILD FAILED'; then
|
if echo "${recent}" | grep -qE '\[ERROR\] 배포 실패|ERROR: chatbotApi 컴파일 실패|BUILD FAILED'; then
|
||||||
log "⚠️ UI는 응답하나 이번 배포 로그에 실패가 있습니다"
|
log "⚠️ UI는 응답하나 이번 배포 로그에 실패가 있습니다"
|
||||||
echo "${recent}" | tail -40
|
echo "${recent}" | tail -40
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if echo "${recent}" | grep -q '배포 완료'; then
|
if echo "${recent}" | grep -q '배포 완료'; then
|
||||||
log "✅ UI 응답 + 배포 완료 로그: ${PUBLIC_URL}"
|
log "✅ UI 응답 + 배포 완료 로그: ${PUBLIC_URL}"
|
||||||
ssh_cmd "tail -8 '${DEPLOY_LOG}'" 2>/dev/null || true
|
ssh_cmd "tail -8 '${DEPLOY_LOG}'" 2>/dev/null || true
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
# start-only 직후 UI 가 이전 빌드로 살아 있을 수 있음 — 신규 성공 로그를 우선
|
# start-only 직후 UI 가 이전 빌드로 살아 있을 수 있음 — 신규 성공 로그를 우선
|
||||||
if echo "${recent}" | grep -q '배포 시작'; then
|
if echo "${recent}" | grep -q '배포 시작'; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
log "✅ UI 응답: ${PUBLIC_URL}"
|
log "✅ UI 응답: ${PUBLIC_URL}"
|
||||||
ssh_cmd "tail -8 '${DEPLOY_LOG}'" 2>/dev/null || true
|
ssh_cmd "tail -8 '${DEPLOY_LOG}'" 2>/dev/null || true
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if echo "${recent}" | grep -q '배포 완료'; then
|
if echo "${recent}" | grep -q '배포 완료'; then
|
||||||
last_line="$(ssh_cmd "tail -1 '${DEPLOY_LOG}'" 2>/dev/null || true)"
|
last_line="$(ssh_cmd "tail -1 '${DEPLOY_LOG}'" 2>/dev/null || true)"
|
||||||
if [[ "${last_line}" == *"배포 완료"* ]] || [[ "${last_line}" == *"락 해제"* ]]; then
|
if [[ "${last_line}" == *"배포 완료"* ]] || [[ "${last_line}" == *"락 해제"* ]]; then
|
||||||
# 성공 후 trap 이 락 해제를 찍을 수 있음
|
# 성공 후 trap 이 락 해제를 찍을 수 있음
|
||||||
if echo "${recent}" | grep -qE '\[ERROR\] 배포 실패|BUILD FAILED'; then
|
if echo "${recent}" | grep -qE '\[ERROR\] 배포 실패|BUILD FAILED'; then
|
||||||
log "⚠️ 배포 실패 로그 감지"
|
log "⚠️ 배포 실패 로그 감지"
|
||||||
echo "${recent}" | tail -40
|
echo "${recent}" | tail -40
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log "✅ 배포 로그 확인"
|
log "✅ 배포 로그 확인"
|
||||||
ssh_cmd "tail -8 '${DEPLOY_LOG}'" 2>/dev/null || true
|
ssh_cmd "tail -8 '${DEPLOY_LOG}'" 2>/dev/null || true
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
|
|
||||||
log "⚠️ 배포 대기 타임아웃 — 로그 확인: ssh ${EXDEV_SSH} tail -50 ${DEPLOY_LOG}"
|
log "⚠️ 배포 대기 타임아웃 — 로그 확인: ssh ${EXDEV_SSH} tail -50 ${DEPLOY_LOG}"
|
||||||
new_log_tail | tail -40
|
new_log_tail | tail -40
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user