Deploy: exdev sync 2026-08-13 13:38:36

This commit is contained in:
bkyungee
2026-08-13 13:38:36 +09:00
parent fab7a5ba49
commit f15b666da9
47 changed files with 17539 additions and 17539 deletions
Regular → Executable
+18 -18
View File
@@ -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
View File
@@ -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
+5 -5
View File
@@ -1,5 +1,5 @@
node_modules/ node_modules/
dist/ dist/
.venv-icons/ .venv-icons/
*.log *.log
.DS_Store .DS_Store
+48 -48
View File
@@ -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 → 추가 정보 → 실행.
+181 -181
View File
@@ -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}`);
}); });
} }
Generated Regular → Executable
+5288 -5288
View File
File diff suppressed because it is too large Load Diff
+72 -72
View File
@@ -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"
} }
} }
+14 -14
View File
@@ -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>
+36 -36
View File
@@ -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 파일을 받으세요.
+6 -6
View File
@@ -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,
}); });
+230 -230
View File
@@ -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())
+23 -23
View File
@@ -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",
]; ];
+226 -226
View File
@@ -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);
} }
+69 -69
View File
@@ -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);
} }
+76 -76
View File
@@ -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
View File
@@ -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
View File
@@ -1,3 +1,3 @@
run/ run/
logs/ logs/
*.pid *.pid
Regular → Executable
+109 -109
View File
@@ -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`** 조합을 사용합니다.
+53 -53
View File
@@ -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
View File
@@ -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
+29 -29
View File
@@ -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
View File
@@ -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
View File
@@ -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` 옵션을 사용하세요.
+154 -154
View File
@@ -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
View File
@@ -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 "======================================================"
+27 -27
View File
@@ -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:
+39 -39
View File
@@ -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
+80 -80
View File
@@ -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
+45 -45
View File
@@ -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
View File
@@ -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` 을 지정해야 깨지지 않습니다.
View File
Can't render this file because it is too large.
View File
View File
View File
View File
Can't render this file because it is too large.
+33 -33
View File
@@ -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;
/ /
+99 -99
View File
@@ -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;
/ /
+137 -137
View File
@@ -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;
+196 -196
View File
@@ -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;
View File
+151 -151
View File
@@ -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;
+8697 -8697
View File
File diff suppressed because it is too large Load Diff
+88 -88
View File
@@ -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;
/ /
+100 -100
View File
@@ -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;
+110 -110
View File
@@ -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
View File
@@ -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
+86 -86
View File
@@ -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