Files
PM_test/테이블명세서.html
2026-06-12 17:14:03 +09:00

2247 lines
101 KiB
HTML

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PROJECT MASTER ver 4.0 테이블명세서</title>
<!-- Pretendard Font & Google Fonts - Inter -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700&display=swap" rel="stylesheet">
<style>
:root {
--primary: #1e5149;
/* Deep Forest Green (pm_ver4 lv5) */
--primary-dark: #142e29;
/* Dark Forest Green (pm_ver4 lv7) */
--primary-light: #e9eeed;
/* Soft Gray-Green (pm_ver4 lv0) */
--bg: #f4f7f6;
--card-bg: #ffffff;
--text-main: #141e1d;
/* Very Dark Forest (pm_ver4 lv9) */
--text-muted: #4b746d;
/* Muted Green (pm_ver4 lv4) */
--border: #d2dcdb;
/* Light Green Gray (pm_ver4 lv1) */
--shadow: 0 4px 6px -1px rgb(20 30 29 / 0.05), 0 2px 4px -2px rgb(20 30 29 / 0.05);
--shadow-lg: 0 10px 15px -3px rgb(20 30 29 / 0.05), 0 4px 6px -4px rgb(20 30 29 / 0.05);
--radius-lg: 8px;
--radius-md: 4px;
}
body {
font-family: 'Pretendard Variable', 'Pretendard', 'Inter', 'Malgun Gothic', sans-serif;
background-color: var(--bg);
color: var(--text-main);
line-height: 1.7;
margin: 0;
padding: 0;
display: flex;
}
/* Sidebar Navigation */
.sidebar {
width: 280px;
height: 100vh;
background-color: var(--primary-dark);
color: #ffffff;
position: fixed;
top: 0;
left: 0;
overflow-y: auto;
border-right: 1px solid rgba(255, 255, 255, 0.1);
z-index: 100;
}
.sidebar-header {
padding: 24px 20px;
font-size: 1.1rem;
font-weight: 700;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
}
.sidebar-menu {
padding: 20px 10px;
}
.menu-category {
margin-bottom: 25px;
}
.menu-category-title {
font-size: 0.75rem;
font-weight: 700;
color: #789792;
text-transform: uppercase;
padding-left: 10px;
margin-bottom: 8px;
letter-spacing: 1px;
}
.menu-item {
display: block;
padding: 8px 12px;
font-size: 0.85rem;
color: #cbd5e1;
text-decoration: none;
border-radius: var(--radius-md);
transition: all 0.2s ease;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.menu-item:hover {
background-color: rgba(255, 255, 255, 0.05);
color: #ffffff;
}
/* Main Content Container */
.main-content {
margin-left: 280px;
flex: 1;
padding: 40px;
max-width: 1000px;
box-sizing: border-box;
}
header {
border-bottom: 2px solid var(--border);
padding-bottom: 24px;
margin-bottom: 40px;
}
h1 {
font-size: 2rem;
font-weight: 700;
margin: 0 0 8px 0;
color: var(--primary-dark);
}
.subtitle {
font-size: 1.05rem;
color: var(--text-muted);
margin: 0;
}
/* Section Title Style */
h2 {
font-size: 1.4rem;
font-weight: 700;
color: var(--primary-dark);
margin-top: 50px;
margin-bottom: 24px;
display: flex;
align-items: center;
border-left: 5px solid var(--primary);
padding-left: 12px;
scroll-margin-top: 20px;
}
/* Card Layout for Tables */
.table-card {
background: #ffffff;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
padding: 24px;
margin-bottom: 30px;
box-shadow: var(--shadow);
scroll-margin-top: 20px;
}
.table-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 14px;
border-bottom: 1px solid var(--border);
padding-bottom: 12px;
flex-wrap: wrap;
gap: 10px;
}
.table-name {
font-size: 1.2rem;
font-weight: 700;
color: var(--text-main);
}
.table-name span {
font-family: monospace;
font-size: 1rem;
color: var(--primary);
background-color: var(--primary-light);
padding: 3px 8px;
border-radius: var(--radius-md);
margin-right: 8px;
}
.table-role {
font-size: 0.85rem;
color: var(--text-muted);
font-weight: 600;
background: #f0f4f3;
padding: 2px 8px;
border-radius: 4px;
border: 1px solid var(--border);
}
.table-description {
font-size: 0.9rem;
color: var(--text-muted);
margin-bottom: 16px;
background-color: #fafbfb;
padding: 12px 16px;
border-radius: var(--radius-md);
border-left: 3px solid var(--primary);
}
/* Mini Column Table Styles */
.column-table {
width: 100%;
border-collapse: collapse;
font-size: 0.85rem;
margin-top: 12px;
}
.column-table th {
background-color: #f4f7f6;
color: var(--text-main);
font-weight: 600;
padding: 10px 12px;
border-bottom: 2px solid var(--border);
text-align: left;
}
.column-table td {
padding: 10px 12px;
border-bottom: 1px solid var(--border);
color: var(--text-muted);
}
.column-table tr:hover td {
background-color: #fafbfb;
color: var(--text-main);
}
.badge {
display: inline-block;
padding: 2px 6px;
font-size: 0.7rem;
font-weight: 600;
border-radius: 4px;
text-transform: uppercase;
white-space: nowrap;
}
.badge-pk {
background-color: #fef3c7;
color: #d97706;
border: 1px solid #fcd34d;
}
.badge-fk {
background-color: #e9eeed;
color: #1e5149;
border: 1px solid #d2dcdb;
}
.badge-nn {
background-color: #fee2e2;
color: #ef4444;
border: 1px solid #fca5a5;
}
/* Responsive Design */
@media (max-width: 1024px) {
body {
flex-direction: column;
}
.sidebar {
width: 100%;
height: auto;
position: static;
border-right: none;
border-bottom: 1px solid var(--border);
}
.sidebar-header {
padding: 15px 20px;
}
.sidebar-menu {
display: flex;
flex-wrap: wrap;
gap: 10px;
padding: 10px 20px;
}
.menu-category {
margin-bottom: 0;
}
.menu-category-title {
display: none;
}
.menu-item {
display: inline-block;
}
.main-content {
margin-left: 0;
padding: 20px;
}
}
</style>
</head>
<body>
<!-- Sidebar LNB -->
<div class="sidebar">
<div class="sidebar-header">
📁 PM_ver4 DB 명세서
</div>
<div class="sidebar-menu">
<div class="menu-category">
<div class="menu-category-title">1. 계정 및 권한</div>
<a href="#tb_user" class="menu-item">tb_user (사용자)</a>
<a href="#tb_project" class="menu-item">tb_project (프로젝트)</a>
<a href="#tb_permission" class="menu-item">tb_permission (권한 등급)</a>
<a href="#tb_user_setting" class="menu-item">tb_user_setting (개인 설정)</a>
</div>
<div class="menu-category">
<div class="menu-category-title">2. 대시보드 및 과업</div>
<a href="#tb_overview" class="menu-item">tb_overview (과업 개요)</a>
<a href="#tb_facility_size" class="menu-item">tb_facility_size (시설 규모)</a>
<a href="#tb_task_history" class="menu-item">tb_task_history (변경 이력)</a>
<a href="#tb_calendar_event" class="menu-item">tb_calendar_event (일정/공휴일)</a>
</div>
<div class="menu-category">
<div class="menu-category-title">3. 아카이브 및 파일</div>
<a href="#tb_data" class="menu-item">tb_data (산출물 관리)</a>
<a href="#tb_download_folder" class="menu-item">tb_download_folder (압축다운)</a>
</div>
<div class="menu-category">
<div class="menu-category-title">4. 공문서 관리</div>
<a href="#tb_official_doc_file" class="menu-item">tb_official_doc_file (공문 대장)</a>
<a href="#tb_official_doc_company" class="menu-item">tb_official_doc_company (참여기관)</a>
</div>
<div class="menu-category">
<div class="menu-category-title">5. 모니터링 및 로그</div>
<a href="#tb_log" class="menu-item">tb_log (감사 로그)</a>
<a href="#tb_click_log" class="menu-item">tb_click_log (클릭 로그)</a>
</div>
<div class="menu-category">
<div class="menu-category-title">6. 통합 관리자(추가)</div>
<a href="#code_master" class="menu-item">code_master (대분류 코드)</a>
<a href="#code_detail" class="menu-item">code_detail (소분류 코드)</a>
<a href="#tb_system_policy" class="menu-item">tb_system_policy (보존 정책)</a>
<a href="#tb_banner_notice" class="menu-item">tb_banner_notice (배너 공지)</a>
<a href="#tb_auto_clean_log" class="menu-item">tb_auto_clean_log (자동삭제 로그)</a>
</div>
</div>
</div>
<!-- Main Content -->
<div class="main-content">
<header>
<h1>PROJECT MASTER ver 4.0 데이터베이스 테이블 명세서</h1>
<p class="subtitle">PostgreSQL (ver4 스키마) 물리 설계 명세 및 컬럼 바인딩 상세 설명서</p>
</header>
<p>본 명세서는 <code>ver4_init_schema.sql</code> 물리 DDL 기준 및 ver.2 통합 관리자 시스템 설계를 전적으로 준수하여 작성된 전체 19개 테이블(ver 2.0 추가
테이블 5개 포함)의 스펙 및 맵 구성서입니다. 개발 및 테스트 용도의 분기 테이블(<code>_test_tb_project</code>, <code>_test_tb_data</code>,
<code>_test_tb_log</code>, <code>_test_tb_click_log</code>)은 원본 테이블과 물리적 스키마(컬럼명, 데이터 타입)가 100% 동일하게 복사되어
구동됩니다.
</p>
<!-- CATEGORY 1 -->
<h2>1. 사용자 계정 및 프로젝트 권한 영역</h2>
<!-- TABLE 1: tb_user -->
<div class="table-card" id="tb_user">
<div class="table-header">
<div class="table-name"><span>tb_user</span> 사용자 마스터</div>
<div class="table-role">사용자 계정 정보 관리</div>
</div>
<div class="table-description">시스템 로그인 계정 정보를 관리하며 Sentinel SSO(단일 로그인) 연동 정보, 즐겨찾기 북마크 및 임직원 직급 등의 정보를
보관합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>사용자 로그인 ID (예: test_user, admin)</td>
</tr>
<tr>
<td><strong>user_nm</strong></td>
<td>VARCHAR(100)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>사용자 실명</td>
</tr>
<tr>
<td><strong>user_pw</strong></td>
<td>VARCHAR(255)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>단방향 암호화 처리된 계정 패스워드</td>
</tr>
<tr>
<td><strong>company</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>소속 기관/회사 명칭 (예: 한맥기술)</td>
</tr>
<tr>
<td><strong>dept</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>소속 부서/팀 명칭 (예: 개발본부)</td>
</tr>
<tr>
<td><strong>position</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>임직원 직급 (예: 부장, 차장)</td>
</tr>
<tr>
<td><strong>"group"</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>계정 그룹 (예: dev, super, general)</td>
</tr>
<tr>
<td><strong>bookmark</strong></td>
<td>TEXT</td>
<td>-</td>
<td>개인화 즐겨찾기/북마크 폴더 JSON 설정 구문</td>
</tr>
<tr>
<td><strong>is_resigned</strong></td>
<td>BOOLEAN</td>
<td>Default: FALSE</td>
<td>퇴사 여부 및 계정 강제 잠금 토글</td>
</tr>
<tr>
<td><strong>create_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>계정 등록 일시</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 2: tb_project -->
<div class="table-card" id="tb_project">
<div class="table-header">
<div class="table-name"><span>tb_project</span> 프로젝트 마스터</div>
<div class="table-role">현장/공구 기본 마스터 정의</div>
</div>
<div class="table-description">
수행 중이거나 관리 대상인 토목/건축 현장 및 공구 프로젝트 리스트를 정의합니다.<br>
<code>_test_tb_project</code> 테이블은 본 테이블의 스키마를 복사하여 구동합니다.
</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>프로젝트 고유 식별 코드 (예: PM_TEST_01)</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_user)</span></td>
<td>해당 프로젝트 총괄 책임 관리자 ID</td>
</tr>
<tr>
<td><strong>category</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>프로젝트 분류 카테고리 (tdc, gpd, bimproject, overseas)</td>
</tr>
<tr>
<td><strong>project_nm</strong></td>
<td>VARCHAR(255)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>현장 공식 명칭 (예: 한국 가상 교량 건설 프로젝트)</td>
</tr>
<tr>
<td><strong>short_nm</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>프로젝트 축약명 (예: 가상교량)</td>
</tr>
<tr>
<td><strong>project_type</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>공개 구분 분류 유형 (예: public, private)</td>
</tr>
<tr>
<td><strong>step</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>현장 진행 단계 (예: 기획, 설계, 시공)</td>
</tr>
<tr>
<td><strong>emp_map</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>현장 인력 배치도 정적 이미지 스토리지 키</td>
</tr>
<tr>
<td><strong>flyto</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>3D Cesium 카메라 자동 이동용 고도/좌표 문자열</td>
</tr>
<tr>
<td><strong>show_in_index</strong></td>
<td>BOOLEAN</td>
<td>Default: TRUE</td>
<td>메인 포털 인덱스 화면 노출 여부</td>
</tr>
<tr>
<td><strong>is_active</strong></td>
<td>BOOLEAN</td>
<td>Default: TRUE</td>
<td>프로젝트 운영 활성화 여부 (비활성 시 사용자 진입 차단)</td>
</tr>
<tr>
<td><strong>banner_notice</strong></td>
<td>TEXT</td>
<td>-</td>
<td>대시보드 상단 텍스트 마르퀴 띠배너 공지사항 내용</td>
</tr>
<tr>
<td><strong>lon</strong></td>
<td>DOUBLE PRECISION</td>
<td>-</td>
<td>지도상 대표 중심 위치 경도(Longitude)</td>
</tr>
<tr>
<td><strong>lat</strong></td>
<td>DOUBLE PRECISION</td>
<td>-</td>
<td>지도상 대표 중심 위치 위도(Latitude)</td>
</tr>
<tr>
<td><strong>height</strong></td>
<td>DOUBLE PRECISION</td>
<td>-</td>
<td>3D 지도 대표 카메라 초기 고도(Height)</td>
</tr>
<tr>
<td><strong>overview</strong></td>
<td>BOOLEAN</td>
<td>Default: TRUE</td>
<td>메뉴 LNB '과업개요' 탭 활성화 여부</td>
</tr>
<tr>
<td><strong>official_doc</strong></td>
<td>BOOLEAN</td>
<td>Default: TRUE</td>
<td>메뉴 LNB '공문' 탭 활성화 여부</td>
</tr>
<tr>
<td><strong>gsim</strong></td>
<td>BOOLEAN</td>
<td>Default: TRUE</td>
<td>메뉴 LNB '위치기반모델' 탭 활성화 여부</td>
</tr>
<tr>
<td><strong>storage_byte</strong></td>
<td>BIGINT</td>
<td>Default: 10</td>
<td>현장별 스토리지 최대 제한 용량 (기본 10GB 단위 저장)</td>
</tr>
<tr>
<td><strong>create_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>프로젝트 레코드 최초 등록 일시</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 3: tb_permission -->
<div class="table-card" id="tb_permission">
<div class="table-header">
<div class="table-name"><span>tb_permission</span> 프로젝트별 사용자 권한 등급</div>
<div class="table-role">현장별 세부 접근 제어</div>
</div>
<div class="table-description">개별 프로젝트 내에서 유저가 행사할 수 있는 권한 레벨 상수를 복합 기본키로 식별하여 저장합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">PK</span> / <span class="badge badge-fk">FK (tb_project)</span>
</td>
<td>프로젝트 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">PK</span> / <span class="badge badge-fk">FK (tb_user)</span>
</td>
<td>사용자 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>lev</strong></td>
<td>INTEGER</td>
<td><span class="badge badge-nn">Not Null</span> Default: 1</td>
<td>권한 등급값 (Owner=255, Sub-Master/관리=7, Worker/쓰기=4, Viewer/읽기=1)</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 4: tb_user_setting -->
<div class="table-card" id="tb_user_setting">
<div class="table-header">
<div class="table-name"><span>tb_user_setting</span> 사용자 개인화 설정</div>
<div class="table-role">사용자 환경 옵션 저장</div>
</div>
<div class="table-description">공문 분석 탭 등에서 활용되는 AI 요약 옵션 및 유저의 편의 설정 상태값을 기록합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">PK</span> / <span class="badge badge-fk">FK (tb_project)</span>
</td>
<td>프로젝트 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">PK</span> / <span class="badge badge-fk">FK (tb_user)</span>
</td>
<td>사용자 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>doc_option_instructions</strong></td>
<td>BOOLEAN</td>
<td>Default: FALSE</td>
<td>공문 AI 요약 시 지시 사항 적용 여부 플래그</td>
</tr>
<tr>
<td><strong>doc_option_summary</strong></td>
<td>BOOLEAN</td>
<td>Default: FALSE</td>
<td>공문 AI 요약 결과 자동 팝업 노출 여부 플래그</td>
</tr>
</tbody>
</table>
</div>
<!-- CATEGORY 2 -->
<h2>2. 프로젝트 대시보드 및 과업 세부 명세 영역</h2>
<!-- TABLE 5: tb_overview -->
<div class="table-card" id="tb_overview">
<div class="table-header">
<div class="table-name"><span>tb_overview</span> 대시보드 과업 개요 정보</div>
<div class="table-role">프로젝트 기본 정보 대시보드 표출 데이터</div>
</div>
<div class="table-description">공사 계약 범위, 수주 정보, 발주기관, PM 성명, 시차 오프셋 등 과업개요 메인화면에 시각화될 종합 데이터를 포괄 저장합니다.
</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">Primary Key</span> / <span class="badge badge-fk">FK
(tb_project)</span></td>
<td>프로젝트 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>project_no</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>사업 공식 계약 번호 (예: PRJ-2026-001)</td>
</tr>
<tr>
<td><strong>business_purpose</strong></td>
<td>TEXT</td>
<td>-</td>
<td>사업 추진 목적 및 핵심 의의</td>
</tr>
<tr>
<td><strong>location_img</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>현장 위치도 이미지 파일의 스토리지(MinIO) 보관 key</td>
</tr>
<tr>
<td><strong>overview_img</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>현장 개요도 이미지 파일의 스토리지(MinIO) 보관 key</td>
</tr>
<tr>
<td><strong>continent</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>대상 현장 소속 대륙 (예: 아시아, 중동)</td>
</tr>
<tr>
<td><strong>performance_area</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>실제 과업 수행 행정 구역/지역</td>
</tr>
<tr>
<td><strong>reference_area</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>과업 관련 보조 참조 구역/지역</td>
</tr>
<tr>
<td><strong>facility_size_overview</strong></td>
<td>TEXT</td>
<td>-</td>
<td>현장 시설물 구조 규모에 대한 종합 요약 구문</td>
</tr>
<tr>
<td><strong>task_nm_kr</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>국문 공식 과업 명칭 (예: 가상교량 건설 관리 용역)</td>
</tr>
<tr>
<td><strong>task_nm_en</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>영문 공식 과업 명칭</td>
</tr>
<tr>
<td><strong>task_purpose</strong></td>
<td>TEXT</td>
<td>-</td>
<td>과업 수행 목적 명세</td>
</tr>
<tr>
<td><strong>task_type</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>용역/설계 과업의 형태 구분</td>
</tr>
<tr>
<td><strong>client</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>공식 발주기관/발주처 사명 (예: 서울지방국토관리청)</td>
</tr>
<tr>
<td><strong>financial</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>사업 재원 금융 조달방식 및 은행명</td>
</tr>
<tr>
<td><strong>financial_country</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>보증서 발급 금융 참여 보증 국가</td>
</tr>
<tr>
<td><strong>bid</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>입찰 방식 형태 (예: 종합심사낙찰제)</td>
</tr>
<tr>
<td><strong>selection_method</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>업체 선정 세부 규정 방식</td>
</tr>
<tr>
<td><strong>joint_contract_nm</strong></td>
<td>TEXT</td>
<td>-</td>
<td>공동수급 컨소시엄 구성 도급사 명칭 리스트</td>
</tr>
<tr>
<td><strong>joint_contract_shareratio</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>도급 지분율 (예: 한맥 60%, 공동 40%)</td>
</tr>
<tr>
<td><strong>contract_amount</strong></td>
<td>NUMERIC(20, 2)</td>
<td>-</td>
<td>원화 기준 계약 총액</td>
</tr>
<tr>
<td><strong>foreign_currency_amount</strong></td>
<td>NUMERIC(20, 2)</td>
<td>-</td>
<td>외화 기준 계약 총액 (달러, 유로화 등)</td>
</tr>
<tr>
<td><strong>contract_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>사업 최초 계약 체결 일자</td>
</tr>
<tr>
<td><strong>commencement_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>실제 공사/용역 착수 일자 (Commencement Date)</td>
</tr>
<tr>
<td><strong>original_completion_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>사업 최초 계약상 준공 예정일</td>
</tr>
<tr>
<td><strong>completion_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>변경/실제 최종 준공 일자</td>
</tr>
<tr>
<td><strong>projectmanager_nm</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>총괄 책임 PM 인명 (예: 홍길동 PM)</td>
</tr>
<tr>
<td><strong>manager_nm</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>부책임자/담당자 실무 관리 직원명</td>
</tr>
<tr>
<td><strong>nation_nm</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>현장 건설 국가 명칭 (예: 한국)</td>
</tr>
<tr>
<td><strong>client_origin</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>발주처 국적 및 출처 구분</td>
</tr>
<tr>
<td><strong>support_department</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>본사 과업 지원 주관 부서</td>
</tr>
<tr>
<td><strong>support_manager_nm</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>지원부서 담당 실무 책임자명</td>
</tr>
<tr>
<td><strong>representative_company</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>대표 공동수급 주간사명</td>
</tr>
<tr>
<td><strong>order_size_krw</strong></td>
<td>NUMERIC(20, 2)</td>
<td>-</td>
<td>원화 수주 규모 금액</td>
</tr>
<tr>
<td><strong>order_size_usd</strong></td>
<td>NUMERIC(20, 2)</td>
<td>-</td>
<td>달러(USD) 기준 수주 규모 금액</td>
</tr>
<tr>
<td><strong>scheuled_commencement_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>예정되어 있는 착수 일자</td>
</tr>
<tr>
<td><strong>contract_period</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>계약 이행 기간 범위 텍스트</td>
</tr>
<tr>
<td><strong>abbreviated_name</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>과업의 단축된 대외 명칭</td>
</tr>
<tr>
<td><strong>department</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>주관 실행 부서</td>
</tr>
<tr>
<td><strong>data_size</strong></td>
<td>TEXT</td>
<td>Default: '[0]'</td>
<td>JSON 배열 규격 폴더별 누적 용량 메타데이터</td>
</tr>
<tr>
<td><strong>issue</strong></td>
<td>TEXT</td>
<td>-</td>
<td>사업 추진 간 직면한 주요 공사 쟁점 및 민원 이슈</td>
</tr>
<tr>
<td><strong>currency_code</strong></td>
<td>VARCHAR(10)</td>
<td>-</td>
<td>적용 외화 통화 단위 기호 (예: USD)</td>
</tr>
<tr>
<td><strong>joint_contract</strong></td>
<td>TEXT</td>
<td>-</td>
<td>공동 도급 지분율 계약 세부 내용</td>
</tr>
<tr>
<td><strong>lead_company</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>컨소시엄 연대 대표 회사명</td>
</tr>
<tr>
<td><strong>nation_code</strong></td>
<td>VARCHAR(10)</td>
<td>-</td>
<td>국가 표준 식별 코드 (예: KR, US)</td>
</tr>
<tr>
<td><strong>nation_offset</strong></td>
<td>VARCHAR(10)</td>
<td>-</td>
<td>대시보드 헤더의 실시간 타이머 계산용 시차 정보 (예: +09:00)</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 6: tb_facility_size -->
<div class="table-card" id="tb_facility_size">
<div class="table-header">
<div class="table-name"><span>tb_facility_size</span> 시설 상세 규모</div>
<div class="table-role">현장 구조물 세부 스펙 보관</div>
</div>
<div class="table-description">건설 대상 교량, 터널, 도로 등 세부 공정물들의 상세 스펙 수치(연장, 두께, 면적 등)를 Key-Value 형태로 정규화하여
관리합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>facility_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>시설 항목 일련번호</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>프로젝트 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>title</strong></td>
<td>VARCHAR(100)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>스펙 분류 대제목 (예: 교량 스펙, 터널 스펙)</td>
</tr>
<tr>
<td><strong>key</strong></td>
<td>VARCHAR(100)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>스펙 명칭 키값 (예: 총 연장, 최대 폭, 차선 수)</td>
</tr>
<tr>
<td><strong>value</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>스펙의 실제 규격 수치값 (예: 1,200 m, 4차로)</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 7: tb_task_history -->
<div class="table-card" id="tb_task_history">
<div class="table-header">
<div class="table-name"><span>tb_task_history</span> 과업 변경 및 중단 이력</div>
<div class="table-role">용역 일정 변동 히스토리</div>
</div>
<div class="table-description">공사 지연, 민원 해결에 따른 일시 중단 일자, 준공계 제출 지연 등 계약 기간 및 과업 지시 상의 변경 조치 이력을 순차 기록합니다.
</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>task_history_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>이력 기록용 고유 식별 번호</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>프로젝트 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>task_order</strong></td>
<td>INTEGER</td>
<td>-</td>
<td>변경 차수 일련번호 (1, 2, 3...)</td>
</tr>
<tr>
<td><strong>suspension_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>과업/공사 일시 중단 일자 (예: 2026-03-01)</td>
</tr>
<tr>
<td><strong>suspension_reason</strong></td>
<td>TEXT</td>
<td>-</td>
<td>공사 일시 중단에 따른 행정적/물리적 상세 사유</td>
</tr>
<tr>
<td><strong>resumption_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>과업/공사 재개 처리 일자 (예: 2026-04-15)</td>
</tr>
<tr>
<td><strong>consultation_content</strong></td>
<td>TEXT</td>
<td>-</td>
<td>발주청 및 관계 기관과의 협의 사항 회의록</td>
</tr>
<tr>
<td><strong>change_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>최종 계약서 서류 상의 일자 변경일</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 8: tb_calendar_event -->
<div class="table-card" id="tb_calendar_event">
<div class="table-header">
<div class="table-name"><span>tb_calendar_event</span> 캘린더 일정 및 국가 공휴일</div>
<div class="table-role">공정 캘린더용 스케줄 보관</div>
</div>
<div class="table-description">개별 현장별 주요 주요 마일스톤 회의 일정(착수, 중간, 준공보고 등)과 함께, 해외 현장의 경우 시차 계산 및 공휴일 표시를 위한 기초
데이터 테이블입니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>calendar_event_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>일정 레코드 고유 번호</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>프로젝트 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>type</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>일정 속성 종류 구분 (예: schedule, holiday)</td>
</tr>
<tr>
<td><strong>title</strong></td>
<td>VARCHAR(255)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>일정/휴일 타이틀 제목 (예: 1차 중간보고회, 신정)</td>
</tr>
<tr>
<td><strong>content</strong></td>
<td>TEXT</td>
<td>-</td>
<td>일정에 관한 세부 수행 목적 및 장소 설명</td>
</tr>
<tr>
<td><strong>color</strong></td>
<td>VARCHAR(20)</td>
<td>-</td>
<td>캘린더 표출용 배경색 Hex 코드 (예: #ff0000)</td>
</tr>
<tr>
<td><strong>start_date</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>일정 시작일 YYYY-MM-DD</td>
</tr>
<tr>
<td><strong>end_date</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>일정 종료일 YYYY-MM-DD</td>
</tr>
<tr>
<td><strong>nation_nm</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>소속 공휴일 지정 대상 국가명 (예: 한국)</td>
</tr>
</tbody>
</table>
</div>
<!-- CATEGORY 3 -->
<h2>3. 파일 아카이브 및 백그라운드 압축 다운로드 영역</h2>
<!-- TABLE 9: tb_data -->
<div class="table-card" id="tb_data">
<div class="table-header">
<div class="table-name"><span>tb_data</span> 아카이브 산출물 마스터</div>
<div class="table-role">아카이브 폴더 트리 및 파일 구조 제어</div>
</div>
<div class="table-description">
가상 폴더 트리 구조와 파일 업로드/변환 관련 핵심 메타 정보를 저장합니다. 1행이 하나의 파일 또는 하나의 폴더를 의미합니다.<br>
<code>_test_tb_data</code> 테이블은 본 테이블의 스키마를 복사하여 구동합니다.
</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>data_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>산출물 고유 식별 번호</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>소속 프로젝트 ID (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_user)</span></td>
<td>최초 등록(업로드)한 사용자 ID</td>
</tr>
<tr>
<td><strong>create_date</strong></td>
<td>TIMESTAMP</td>
<td><span class="badge badge-nn">Not Null</span> Default: NOW()</td>
<td>최초 파일 업로드/폴더 생성 일시</td>
</tr>
<tr>
<td><strong>data_permission</strong></td>
<td>INTEGER</td>
<td>Default: 1</td>
<td>산출물 개별 조회 접근 제한 등급 레벨 상수값</td>
</tr>
<tr>
<td><strong>bucket</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>스토리지 저장 대상 버킷명 (예: pm-test-01)</td>
</tr>
<tr>
<td><strong>is_folder</strong></td>
<td>BOOLEAN</td>
<td>Default: FALSE</td>
<td>폴더 여부 (true=폴더, false=파일)</td>
</tr>
<tr>
<td><strong>is_removed</strong></td>
<td>BOOLEAN</td>
<td>Default: FALSE</td>
<td>가상 휴지통 보관 상태 유무 플래그 (true 시 화면에서 배제)</td>
</tr>
<tr>
<td><strong>data_depth</strong></td>
<td>INTEGER</td>
<td>Default: 1</td>
<td>계층 트리의 깊이 단계 범위 (1 ~ 8-depth)</td>
</tr>
<tr>
<td><strong>ext</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>파일 포맷 확장자명 (예: dwg, pdf, xlsx)</td>
</tr>
<tr>
<td><strong>path1 ~ path8</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>
가상 계층별 경로 및 파일명의 문자열 매핑.<br>
(예: path1='01_설계도서', path2='교량일반도.dwg' 등)
</td>
</tr>
<tr>
<td><strong>mod_date</strong></td>
<td>TIMESTAMP</td>
<td>-</td>
<td>최근 구조/명칭 수정 처리 완료 일시</td>
</tr>
<tr>
<td><strong>mod_user_id</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>최근 변경 조치를 수행한 사용자 ID</td>
</tr>
<tr>
<td><strong>mod_activity</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>최근에 발생한 수정 행동 성격 코드 (예: renameTarget)</td>
</tr>
<tr>
<td><strong>data_size</strong></td>
<td>BIGINT</td>
<td>Default: 0</td>
<td>파일 용량 크기 (Byte 단위)</td>
</tr>
<tr>
<td><strong>memo</strong></td>
<td>TEXT</td>
<td>-</td>
<td>해당 파일에 붙여진 텍스트 메모 기입란</td>
</tr>
<tr>
<td><strong>storage_type</strong></td>
<td>VARCHAR(20)</td>
<td>-</td>
<td>스토리지 물리 분류 (ONPREMISE / CLOUD)</td>
</tr>
<tr>
<td><strong>object_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>실제 MinIO/S3 내의 고유 보관 object key</td>
</tr>
<tr>
<td><strong>preview_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>변환된 미리보기 및 썸네일용 1Page PDF 보관 key</td>
</tr>
<tr>
<td><strong>popup_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>통합 문서 뷰어 팝업용 전체 페이지 PDF 보관 key</td>
</tr>
<tr>
<td><strong>ver</strong></td>
<td>INTEGER</td>
<td>Default: 1</td>
<td>개정 버전 차수 카운팅 (버전 업로드 지원용)</td>
</tr>
<tr>
<td><strong>folder_type</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>폴더 성격 종류 구분 (예: 보안폴더, 일반폴더)</td>
</tr>
<tr>
<td><strong>thumbnail_size</strong></td>
<td>BIGINT</td>
<td>Default: 0</td>
<td>미리보기 썸네일 이미지 크기 (Byte)</td>
</tr>
<tr>
<td><strong>thumbnail_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>썸네일 이미지 파일(png 등) 스토리지 보관 key</td>
</tr>
<tr>
<td><strong>lon</strong></td>
<td>DOUBLE PRECISION</td>
<td>-</td>
<td>지도 마커 연계 경도 (GSIM 모듈용)</td>
</tr>
<tr>
<td><strong>lat</strong></td>
<td>DOUBLE PRECISION</td>
<td>-</td>
<td>지도 마커 연계 위도 (GSIM 모듈용)</td>
</tr>
<tr>
<td><strong>height</strong></td>
<td>DOUBLE PRECISION</td>
<td>-</td>
<td>3D 지도 공간 정보 좌표 높이값 (GSIM 모듈용)</td>
</tr>
<tr>
<td><strong>author_id</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>원본 산출물 최초 제작자 계정 ID</td>
</tr>
<tr>
<td><strong>author_nm</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>원본 산출물 최초 제작자 성명</td>
</tr>
<tr>
<td><strong>last_folder_act_date</strong></td>
<td>TIMESTAMP</td>
<td>-</td>
<td>해당 폴더 내부의 최종 변경 활동 발생 시각</td>
</tr>
<tr>
<td><strong>popup_size</strong></td>
<td>BIGINT</td>
<td>Default: 0</td>
<td>뷰어용 전체 페이지 PDF 용량 (Byte)</td>
</tr>
<tr>
<td><strong>preview_size</strong></td>
<td>BIGINT</td>
<td>Default: 0</td>
<td>미리보기용 1페이지 PDF 용량 (Byte)</td>
</tr>
<tr>
<td><strong>ai_summary</strong></td>
<td>TEXT</td>
<td>-</td>
<td>Gemini API 기반 생성된 문서 개요 AI 자동 요약문</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 10: tb_download_folder -->
<div class="table-card" id="tb_download_folder">
<div class="table-header">
<div class="table-name"><span>tb_download_folder</span> 폴더 백그라운드 압축 이력</div>
<div class="table-role">비동기 BullMQ 압축 작업 상태 관리</div>
</div>
<div class="table-description">대량 폴더/파일을 일괄 ZIP 압축 다운로드할 때 생성되는 스토리지 임시 보관 정보 및 링크 만료 일자를 기록합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>download_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>압축 작업 일련번호</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>대상 프로젝트 식별 아이디</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_user)</span></td>
<td>압축 처리를 위임한 사용자 ID</td>
</tr>
<tr>
<td><strong>status</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>비동기 압축 큐 상태 단계 (예: processing, completed, failed)</td>
</tr>
<tr>
<td><strong>zip_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>생성 완료된 임시 압축파일의 스토리지 보관 key</td>
</tr>
<tr>
<td><strong>expire_date</strong></td>
<td>TIMESTAMP</td>
<td>-</td>
<td>임시 압축파일 보관 디스크 소거를 위한 만료시각 (24시간 등)</td>
</tr>
<tr>
<td><strong>made</strong></td>
<td>BOOLEAN</td>
<td>Default: FALSE</td>
<td>비동기 압축 파일 빌드 준비 완료 여부 플래그</td>
</tr>
<tr>
<td><strong>path</strong></td>
<td>TEXT</td>
<td>-</td>
<td>압축을 개시한 원본 대상 가상 폴더의 최상위 경로</td>
</tr>
<tr>
<td><strong>name</strong></td>
<td>TEXT</td>
<td>-</td>
<td>압축된 파일에 바인딩된 기본 표출 명칭 (폴더명.zip)</td>
</tr>
<tr>
<td><strong>create_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>다운로드 요청 등록 일시</td>
</tr>
</tbody>
</table>
</div>
<!-- CATEGORY 4 -->
<h2>4. 수신 및 발신 공식 공문서 관리 영역</h2>
<!-- TABLE 11: tb_official_doc_file -->
<div class="table-card" id="tb_official_doc_file">
<div class="table-header">
<div class="table-name"><span>tb_official_doc_file</span> 공문서 상세 및 AI 요약</div>
<div class="table-role">공문 수발신 대장 및 메타데이터 정보</div>
</div>
<div class="table-description">공문서의 제목, 날짜, 수발신처를 관리하며, OCR 파싱 및 Gemini AI가 수행한 주요 의사결정 요약 텍스트를 구조적으로 통합
보관합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>doc_id</strong></td>
<td>INTEGER</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>공문서 일련번호 (시퀀스 seq_tb_official_doc_file 연동)</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>소속 프로젝트 ID (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>uploader</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_user)</span></td>
<td>공문서 업로더 계정 ID</td>
</tr>
<tr>
<td><strong>create_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>공문서 파일 업로드 등록 일시</td>
</tr>
<tr>
<td><strong>permission</strong></td>
<td>INTEGER</td>
<td>Default: 1</td>
<td>공문서에 부여된 읽기/조회 보안 권한 등급</td>
</tr>
<tr>
<td><strong>bucket</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>스토리지 저장 버킷명</td>
</tr>
<tr>
<td><strong>file_path</strong></td>
<td>TEXT</td>
<td>-</td>
<td>공문 원본 파일이 업로드된 물리 스토리지 보관 경로</td>
</tr>
<tr>
<td><strong>ext</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>원본 공문 파일 확장자 (소문자 규격)</td>
</tr>
<tr>
<td><strong>doc_direction</strong></td>
<td>VARCHAR(20)</td>
<td>-</td>
<td>공문 교환 방향성 구분 (수신 / 발신)</td>
</tr>
<tr>
<td><strong>doc_number</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>공식 접수/발송용 공문 문서 번호 (예: 서울국토-2026-012)</td>
</tr>
<tr>
<td><strong>doc_date</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>공문서 상의 기안/체결 일자 (YYYY-MM-DD 형식)</td>
</tr>
<tr>
<td><strong>recipient_org</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>공문 수신 수석 기관 명칭 (예: 한맥기술)</td>
</tr>
<tr>
<td><strong>recipient_org_abbr</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>수신 기관 약어 (예: 한맥)</td>
</tr>
<tr>
<td><strong>sender_org</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>공문 발송 원천 기관 명칭 (예: 서울지방국토관리청)</td>
</tr>
<tr>
<td><strong>sender_org_abbr</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>발송 기관 약어 (예: 서울국토청)</td>
</tr>
<tr>
<td><strong>doc_title</strong></td>
<td>TEXT</td>
<td>-</td>
<td>공문서 상의 원본 기안문 제목</td>
</tr>
<tr>
<td><strong>doc_title_summary</strong></td>
<td>TEXT</td>
<td>-</td>
<td>Gemini AI가 함축 요약한 직관적 제목</td>
</tr>
<tr>
<td><strong>doc_content_summary</strong></td>
<td>TEXT</td>
<td>-</td>
<td>Gemini AI가 핵심 조작 및 지시 사항 중심으로 파싱한 본문 요약문</td>
</tr>
<tr>
<td><strong>doc_related_docs</strong></td>
<td>TEXT</td>
<td>-</td>
<td>공문 내부 연관/참조 처리된 다른 공문서 번호 내역</td>
</tr>
<tr>
<td><strong>doc_type</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>공문서 종류 구분 (예: 공문, 지시문, 보고서)</td>
</tr>
<tr>
<td><strong>doc_category</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>행정 업무별 세부 서류 분류 카테고리</td>
</tr>
<tr>
<td><strong>attachment_title</strong></td>
<td>TEXT</td>
<td>-</td>
<td>공문과 동봉 첨부된 첨부파일 제목 리스트</td>
</tr>
<tr>
<td><strong>attachment_count</strong></td>
<td>INTEGER</td>
<td>Default: 0</td>
<td>첨부된 보조 문서 파일 개수 카운트</td>
</tr>
<tr>
<td><strong>doc_memo</strong></td>
<td>TEXT</td>
<td>-</td>
<td>담당자 기입 관리용 요약 비고 메모</td>
</tr>
<tr>
<td><strong>doc_manager</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>해당 공문 책임 지정 처리 실무자 성명</td>
</tr>
<tr>
<td><strong>doc_label</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>공문 태그/분류 라벨</td>
</tr>
<tr>
<td><strong>mod_date</strong></td>
<td>TIMESTAMP</td>
<td>-</td>
<td>공문 메타 정보 최근 변경 완료 시각</td>
</tr>
<tr>
<td><strong>mod_user_id</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>공문 정보를 마지막으로 변경한 유저 ID</td>
</tr>
<tr>
<td><strong>mod_activity</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>마지막 변경 조치 내용 코드</td>
</tr>
<tr>
<td><strong>data_size</strong></td>
<td>BIGINT</td>
<td>Default: 0</td>
<td>원본 공문 PDF 파일 용량 (Byte)</td>
</tr>
<tr>
<td><strong>storage_type</strong></td>
<td>VARCHAR(20)</td>
<td>-</td>
<td>스토리지 타겟 (ONPREMISE / CLOUD)</td>
</tr>
<tr>
<td><strong>object_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>실제 스토리지 내 공문 원본 보관 key</td>
</tr>
<tr>
<td><strong>preview_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>1-Page 요약 썸네일 미리보기용 PDF key</td>
</tr>
<tr>
<td><strong>popup_key</strong></td>
<td>TEXT</td>
<td>-</td>
<td>전체 뷰어 확인용 PDF key</td>
</tr>
<tr>
<td><strong>ver</strong></td>
<td>INTEGER</td>
<td>Default: 1</td>
<td>문서 이력 버전</td>
</tr>
<tr>
<td><strong>group_id</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>동일 묶음 발송 공문서 그룹 번호 ID</td>
</tr>
<tr>
<td><strong>is_aiused</strong></td>
<td>BOOLEAN</td>
<td>Default: FALSE</td>
<td>Gemini AI 자동 분석/요약 수행 완료 여부 플래그</td>
</tr>
<tr>
<td><strong>popup_size</strong></td>
<td>BIGINT</td>
<td>Default: 0</td>
<td>뷰어용 전체 페이지 PDF 용량 (Byte)</td>
</tr>
<tr>
<td><strong>preview_size</strong></td>
<td>BIGINT</td>
<td>Default: 0</td>
<td>미리보기용 1페이지 PDF 용량 (Byte)</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 12: tb_official_doc_company -->
<div class="table-card" id="tb_official_doc_company">
<div class="table-header">
<div class="table-name"><span>tb_official_doc_company</span> 공문 교환 회사 기관 목록</div>
<div class="table-role">공문 수발신 참여 주체 목록</div>
</div>
<div class="table-description">개별 프로젝트에 공문서를 주고받는 정부 기관, 지자체, 감리단, 도급사 등의 업체 리스트와 성격을 지정 보관합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>company_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>업체 일련번호 (복합 PK 사용)</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-pk">PK</span> / <span class="badge badge-fk">FK (tb_project)</span>
</td>
<td>프로젝트 마스터 외래키 참조 (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>company_name</strong></td>
<td>VARCHAR(255)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>공식 업체 및 기관 명칭 (예: 서울지방국토관리청)</td>
</tr>
<tr>
<td><strong>company_type</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>기관 성격 구분 (예: 발주처, 도급사, 감리단)</td>
</tr>
<tr>
<td><strong>company_role</strong></td>
<td>VARCHAR(100)</td>
<td>-</td>
<td>공문 매핑상의 수발신 역할군 구분 (예: 기준, 상대기관)</td>
</tr>
</tbody>
</table>
</div>
<!-- CATEGORY 5 -->
<h2>5. 시스템 모니터링 및 활동 감사 로그 영역</h2>
<!-- TABLE 13: tb_log -->
<div class="table-card" id="tb_log">
<div class="table-header">
<div class="table-name"><span>tb_log</span> 파일 조작 감사 로그</div>
<div class="table-role">보안 감사 활동 추적</div>
</div>
<div class="table-description">
파일 업로드, 다운로드, 폴더 삭제 등 데이터 위/변조 가능 활동을 발생 IP, 일시와 함께 추적 기록하는 보안 로그 테이블입니다.<br>
<code>_test_tb_log</code> 테이블은 본 테이블의 스키마를 복사하여 구동합니다.
</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>log_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>로그 감사 고유 번호</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>이벤트가 발생한 소속 프로젝트 ID (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>activity</strong></td>
<td>VARCHAR(100)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>보안 감사 대상 활동 종류 식별자 (예: uploadData_file, createFolder, removeTarget)</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_user)</span></td>
<td>활동을 유발시킨 사용자 계정 ID</td>
</tr>
<tr>
<td><strong>user_ip</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>행위를 유발한 접속지 IP 주소 (IPv4/IPv6)</td>
</tr>
<tr>
<td><strong>log_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>활동 유발 저장 기록 시각</td>
</tr>
<tr>
<td><strong>path_arr</strong></td>
<td>TEXT[]</td>
<td>-</td>
<td>조작한 파일들의 가상 경로 리스트 배열 (예: <code>{"/01_설계도서/구조계산서.pdf"}</code>)</td>
</tr>
<tr>
<td><strong>data_id_arr</strong></td>
<td>INTEGER[]</td>
<td>-</td>
<td>조작한 대상 파일의 <code>data_id</code> 일련번호 배열 (예: <code>{15, 16}</code>)</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 14: tb_click_log -->
<div class="table-card" id="tb_click_log">
<div class="table-header">
<div class="table-name"><span>tb_click_log</span> 사용자 UI 요소 클릭 로그</div>
<div class="table-role">사용자 행동 흐름 통계 수집</div>
</div>
<div class="table-description">
통합 문서 뷰어 진입, 썸네일 노출 요청, 탭 전환 등의 사용자 비활동/활동 클릭 이벤트를 통계 목적으로 수집합니다.<br>
<code>_test_tb_click_log</code> 테이블은 본 테이블의 스키마를 복사하여 구동합니다.
</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>click_log_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>클릭 이력 고유 ID</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>클릭이 터진 프로젝트 식별 ID (종속 삭제 연동)</td>
</tr>
<tr>
<td><strong>activity</strong></td>
<td>VARCHAR(100)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>수집된 클릭 활동 액션 코드 (예: viewThumbnail, tabChange)</td>
</tr>
<tr>
<td><strong>user_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_user)</span></td>
<td>클릭을 행한 사용자 ID</td>
</tr>
<tr>
<td><strong>user_ip</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>사용자 접속 단말 IP 주소</td>
</tr>
<tr>
<td><strong>log_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>클릭 활동 기록 시각</td>
</tr>
<tr>
<td><strong>path_arr</strong></td>
<td>TEXT[]</td>
<td>-</td>
<td>클릭에 해당하는 산출물 파일 경로 배열</td>
</tr>
<tr>
<td><strong>data_id_arr</strong></td>
<td>INTEGER[]</td>
<td>-</td>
<td>클릭된 파일의 일련번호 (data_id) 배열</td>
</tr>
</tbody>
</table>
</div>
<!-- CATEGORY 6 -->
<h2>6. 통합 관리자 대시보드 추가 테이블</h2>
<!-- TABLE 15: code_master -->
<div class="table-card" id="code_master">
<div class="table-header">
<div class="table-name"><span>code_master</span> 공통 코드 대분류 마스터</div>
<div class="table-role">공통 코드 대분류 그룹 관리</div>
</div>
<div class="table-description">시스템 전반에서 활용되는 공통 코드의 대분류(분류 ID 및 명칭) 정보를 관리합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>main_code</strong></td>
<td>VARCHAR(30)</td>
<td><span class="badge badge-pk">Primary Key</span> / <span class="badge badge-nn">Not
Null</span></td>
<td>대분류 분류 코드 식별자 (예: PROJECT_CATEGORY, USER_GROUP)</td>
</tr>
<tr>
<td><strong>main_code_nm</strong></td>
<td>VARCHAR(100)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>대분류 분류 명칭 (예: 프로젝트 구분, 사용자 그룹)</td>
</tr>
<tr>
<td><strong>use_yn</strong></td>
<td>CHAR(1)</td>
<td>Default: 'Y'</td>
<td>사용 여부 ('Y' / 'N')</td>
</tr>
<tr>
<td><strong>rmk</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>비고 및 대분류에 대한 부가 설명</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 16: code_detail -->
<div class="table-card" id="code_detail">
<div class="table-header">
<div class="table-name"><span>code_detail</span> 공통 세부 코드</div>
<div class="table-role">공통 코드 소분류 세부 설정값 관리</div>
</div>
<div class="table-description">대분류에 종속되는 세부 소분류 코드값 및 한글 코드명, 정렬 순서를 관리합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>main_code</strong></td>
<td>VARCHAR(30)</td>
<td><span class="badge badge-pk">PK</span> / <span class="badge badge-fk">FK
(code_master)</span></td>
<td>대분류 분류 식별자 (종속 삭제 ON DELETE CASCADE 연동)</td>
</tr>
<tr>
<td><strong>sub_code</strong></td>
<td>VARCHAR(30)</td>
<td><span class="badge badge-pk">PK</span> / <span class="badge badge-nn">Not Null</span></td>
<td>소분류 상세 코드값 (예: tdc, gpd, super, worker)</td>
</tr>
<tr>
<td><strong>base_code</strong></td>
<td>VARCHAR(61)</td>
<td><span class="badge badge-nn">Not Null</span> / UNIQUE</td>
<td>대/소분류 접합 고유 코드 (main_code || '_' || sub_code 형태)</td>
</tr>
<tr>
<td><strong>code_nm</strong></td>
<td>VARCHAR(100)</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>상세 세부 코드 한글명 (예: 수퍼관리자, 일반작업자)</td>
</tr>
<tr>
<td><strong>sort_ord</strong></td>
<td>INTEGER</td>
<td>Default: 1</td>
<td>화면 및 그리드 노출 정렬 순서</td>
</tr>
<tr>
<td><strong>use_yn</strong></td>
<td>CHAR(1)</td>
<td>Default: 'Y'</td>
<td>사용 여부 ('Y' / 'N')</td>
</tr>
<tr>
<td><strong>rmk</strong></td>
<td>VARCHAR(255)</td>
<td>-</td>
<td>비고 및 코드 상세 부가 설명</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 17: tb_system_policy -->
<div class="table-card" id="tb_system_policy">
<div class="table-header">
<div class="table-name"><span>tb_system_policy</span> 시스템 공통 자동 보존/삭제 정책</div>
<div class="table-role">전체 현장 대상 글로벌 보존 임계치 통제</div>
</div>
<div class="table-description">개별 프로젝트 단위 제어가 아닌 시스템 전체 공통으로 일괄 적용될 파일 삭제 보존 기준 임계치를 단일 레코드로 저장 관리합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>policy_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>정책 설정 번호</td>
</tr>
<tr>
<td><strong>policy_key</strong></td>
<td>VARCHAR(50)</td>
<td>UNIQUE / <span class="badge badge-nn">Not Null</span></td>
<td>정책 설정 고유 식별 키 (예: GLOBAL_DELETE_POLICY)</td>
</tr>
<tr>
<td><strong>limit_file_count</strong></td>
<td>INTEGER</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>자동 보존할 최소 안전 유지 파일 개수 기준 (숫자)</td>
</tr>
<tr>
<td><strong>limit_days</strong></td>
<td>INTEGER</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>자동 보관/삭제 처리 기준 경과 보존 일수 (숫자)</td>
</tr>
<tr>
<td><strong>is_active</strong></td>
<td>BOOLEAN</td>
<td>Default: TRUE</td>
<td>글로벌 정책 작동 활성화 여부</td>
</tr>
<tr>
<td><strong>upd_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>최종 정책 기준 변경 및 저장 시각</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 18: tb_banner_notice -->
<div class="table-card" id="tb_banner_notice">
<div class="table-header">
<div class="table-name"><span>tb_banner_notice</span> 실시간 배너 공지 이력</div>
<div class="table-role">대시보드 배너 송출 및 공지이력 관리</div>
</div>
<div class="table-description">각 프로젝트 현장(또는 전체)에 전송할 배너 공지 내용, 시작/종료일 및 송출 상태 이력을 보관합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>banner_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>배너 공지 일련번호</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td><span class="badge badge-fk">FK (tb_project)</span></td>
<td>배너 송출 대상 프로젝트 식별자 (전체 프로젝트일 경우 'all' 기입)</td>
</tr>
<tr>
<td><strong>reg_date</strong></td>
<td>DATE</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>배너 공지 최초 등록/작성일 (임의 지정 가능)</td>
</tr>
<tr>
<td><strong>start_date</strong></td>
<td>DATE</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>공지 송출 시작 예정일</td>
</tr>
<tr>
<td><strong>end_date</strong></td>
<td>DATE</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>공지 송출 종료 예정일</td>
</tr>
<tr>
<td><strong>notice_text</strong></td>
<td>TEXT</td>
<td><span class="badge badge-nn">Not Null</span></td>
<td>흐르는 자막으로 출력될 배너 공지 내용 본문</td>
</tr>
<tr>
<td><strong>status_code</strong></td>
<td>VARCHAR(61)</td>
<td><span class="badge badge-fk">FK (code_detail)</span></td>
<td>송출 상태 구분 코드 (NOTICE_STATUS_active, scheduled, expired)</td>
</tr>
</tbody>
</table>
</div>
<!-- TABLE 19: tb_auto_clean_log -->
<div class="table-card" id="tb_auto_clean_log">
<div class="table-header">
<div class="table-name"><span>tb_auto_clean_log</span> 배치 스케줄러 자동 삭제 처리 로그</div>
<div class="table-role">정기 스케줄러 가동 감사 로그 보관</div>
</div>
<div class="table-description">정기 배치 스케줄러 작동으로 스토리지 자동 청소가 구동되었을 때의 상세 처리 일시 및 결과를 보관합니다.</div>
<table class="column-table">
<thead>
<tr>
<th style="width: 25%">컬럼명 (Column)</th>
<th style="width: 20%">타입 (Type)</th>
<th style="width: 15%">제약조건</th>
<th style="width: 40%">설명 및 바인딩 예시</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>clean_log_id</strong></td>
<td>SERIAL</td>
<td><span class="badge badge-pk">Primary Key</span></td>
<td>청소 처리 결과 고유 번호</td>
</tr>
<tr>
<td><strong>clean_date</strong></td>
<td>TIMESTAMP</td>
<td>Default: NOW()</td>
<td>배치 스케줄러 가동 성공 및 로그 저장 일시</td>
</tr>
<tr>
<td><strong>project_id</strong></td>
<td>VARCHAR(50)</td>
<td>-</td>
<td>청소 처리된 현장 ID (공통 정책 저장 이력일 시 'SYSTEM' 기입)</td>
</tr>
<tr>
<td><strong>path</strong></td>
<td>TEXT</td>
<td>-</td>
<td>청소/삭제 처리가 수행된 아카이브 폴더 경로</td>
</tr>
<tr>
<td><strong>rule</strong></td>
<td>TEXT</td>
<td>-</td>
<td>당시 실행된 정책 기준(임계치 수량, 경과 기한) 요약 내용</td>
</tr>
<tr>
<td><strong>result</strong></td>
<td>TEXT</td>
<td>-</td>
<td>삭제된 총 파일 건수 및 디스크 회수 용량 등 결과 리포트</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>