🎯 v0.2 멀티테넌트 SaaS 업데이트 (2026-05-20) — 회사·부서·사용자 트리 · 호선 권한 매트릭스 · 회사 단위 요금제 (trial/basic/standard/professional/enterprise) · 토스페이먼츠 · Phase 1 안정성 (5,000명까지 검증) · 상세 매뉴얼 →
SEcMS
사용 매뉴얼 — v3.6
User Manual — v3.6

선박 케이블 관리 시스템
완전 가이드

Ship Cable Management System
Complete Guide

대규모 케이블 자동 경로계산 · IEC 61537 자동 검증
브라우저에서 즉시 — 설치 없음

Large-scale cable auto-routing · IEC 61537 auto-verification
Browser-instant — zero installation

자동 라우팅 IEC 61537 DNV · LR · ABS · BV 35,000 Cables Cloudflare D1 3D Viewer

목차

Table of Contents

01 — 개요
01 — Overview

SEcMS란 무엇인가?

What is SEcMS?

SEcMS(Shipboard Electrical Cable Management System)는 선박 전기 엔지니어를 위한 클라우드 SaaS입니다. CADMATIC·AVEVA 없이도 선급 검증을 통과하는 케이블 설계 작업 전체를 브라우저에서 처리합니다.

SEcMS (Shipboard Electrical Cable Management System) is a cloud SaaS for marine electrical engineers. Handle the entire cable design workflow — pass class society verification without CADMATIC or AVEVA — directly in the browser.

빠른 경로계산

Fast Routing

자동 라우팅 엔진. 대규모 호선도 빠르게 처리.

Auto-routing engine. Large-scale vessels processed quickly.

8선급 자동 검증

8-Class Auto Validation

DNV·LR·BV·ABS·NK·KR·RINA·CCS 규정 동시 적용. 클릭 한 번으로 선급 보고서.

DNV·LR·BV·ABS·NK·KR·RINA·CCS rules applied simultaneously. One-click class society report.

BOM 완전 자동화

Full BOM Automation

경로 완료 후 자재발주서 5초 생성. Excel 다운로드.

Generate material orders in 5 seconds post-routing. Excel export.

트레이 물리 시뮬레이션

Tray Physics Simulation

IEC 기준 충전율 계산 + 드래그 배치 시각화.

IEC fill-rate calculation + drag-and-drop layout visualization.

멀티사용자 동시작업

Multi-user Collaboration

낙관적 잠금 + 충돌 감지. 팀 전원 동시 편집 가능.

Optimistic locking + conflict detection. Full team simultaneous editing.

설치 불필요

Zero Installation

Chrome·Edge·Safari. 서버·라이선스·설치 없음.

Chrome·Edge·Safari. No server, license, or installation.

지원 브라우저Browser SupportChrome 100+, Edge 100+, Safari 16+, Firefox 110+
최대 케이블 수Max Cables10,000개 (Standard) · 50,000개+ (Enterprise)10,000 (Standard) · 50,000+ (Enterprise)
Excel 파싱 속도Excel Parse Speed23,000 rows/sec · 1.5 sec for 35K rows
데이터 저장Data StorageCloudflare D1 (SQLite) · 자동 백업 · 암호화Cloudflare D1 (SQLite) · Auto-backup · Encrypted
SEcMS screenshot
SEcMS 랜딩 페이지 — 주요 기능 한눈에SEcMS Landing Page — key features at a glance
02 — 접근 & 로그인
02 — Access & Login

시스템 접근 방법

How to Access the System

SEcMS는 초대 코드 기반 접근 제어를 사용합니다. 초대 코드는 관리자로부터 발급받거나 [email protected]에 문의하세요. SEcMS uses invite-code access control. Obtain an invite code from your admin or contact [email protected].
SEcMS screenshot
대시보드 — 빈 프로젝트 초기 화면 (Demo Vessel · S-2001)Dashboard — empty project (Demo Vessel · S-2001)

secms.pages.dev 접속

Go to secms.pages.dev

Chrome 또는 Edge 브라우저 권장. 설치 불필요.

Chrome or Edge recommended. No installation needed.

Google 계정으로 로그인

Sign in with Google

기존 Google 계정을 사용합니다. 별도 가입 불필요.

Use your existing Google account. No separate sign-up needed.

초대 코드 입력 (신규 사용자)

Enter Invite Code (new users)

관리자로부터 받은 초대 코드를 입력합니다. 코드 없으면 승인 신청 후 24시간 내 이메일 발송.

Enter the invite code from your admin. No code? Request access — email sent within 24h.

프로젝트 화면 진입

Enter Project Screen

승인 완료 후 프로젝트 목록 화면으로 자동 이동합니다.

After approval, you'll be taken to the project list automatically.

03 — 프로젝트 관리
03 — Project Management

호선 단위 프로젝트

Vessel-Based Projects

각 프로젝트는 하나의 호선을 의미합니다. 프로젝트별로 케이블·노드·BOM·히스토리가 독립 저장됩니다.

Each project represents one vessel. Cables, nodes, BOM, and history are stored independently per project.

secms.pages.dev / projects
내 프로젝트 My Projects
+ 새 프로젝트
+ New Project
Hull-1001 케이블 3,241 경로 98%
Hull-1002 케이블 8,560 경로 72%
LNG-Carrier-A 케이블 12,100 완료

새 프로젝트 만들기

Create New Project

"+ 새 프로젝트" 클릭 → 호선명 입력 (호선번호 선택) → Excel 파일 드래그 또는 나중에 업로드 가능.

Click "+ New Project" → enter vessel name (vessel number optional) → drag Excel files or upload later.

프로젝트 열기

Open a Project

프로젝트 카드 클릭 → 메인 작업 화면으로 이동.

Click the project card → navigate to the main work screen.

동시 편집 & 충돌 처리

Simultaneous Editing & Conflict Handling

다른 팀원이 같은 프로젝트를 저장하면 충돌 배너가 표시됩니다. "강제 저장" (내 변경 우선) 또는 "서버 데이터로 새로고침" 선택.

If a teammate saves the same project, a conflict banner appears. Choose "Force Save" (keep your changes) or "Reload from Server".

SEcMS screenshot
프로젝트 선택 화면 — 호선별 현황 카드Project Selection — vessel status cards
SEcMS screenshot
프로젝트 상세 화면Project Detail Screen
04 — Excel 업로드
04 — Excel Upload

케이블·노드 데이터 불러오기

Import Cable & Node Data

SEcMS는 어떤 형식의 엑셀 파일도 받아들입니다. 내부 표준 포맷으로 자동 변환되며, 알 수 없는 컬럼은 컬럼 매퍼가 처리합니다.

SEcMS accepts Excel files in any format. They are auto-converted to the internal standard, and unknown columns are handled by the Column Mapper.

새 프로젝트 생성

케이블 리스트 (xlsx)Cable List (xlsx)
드래그 또는 클릭 Drag or click

노드 정보 (xlsx)Node Info (xlsx)
드래그 또는 클릭 Drag or click

케이블 Excel 표준 컬럼

Cable Excel Standard Columns

SEcMS 필드SEcMS Field인식하는 헤더 이름 (예시)Recognized Header Names (examples)필수Required
nameCABLE_NAME · NAME · Cable Name
typeCABLE_TYPE · TYPE · Type
fromNodeFROM_NODE · FROM · From Node
toNodeTO_NODE · TO · To Node
outDia (OD)CABLE_OUTDIA · OD · DIA · DIA_MM권장Recommended
lengthPOR_LENGTH · LENGTH · Length권장Recommended
systemCABLE_SYSTEM · SYSTEM--
pathCABLE_PATH · PATH--
SEcMS screenshot
Excel 업로드 — 데이터 불러오기 시작Excel Upload — initiating data import
05 — 컬럼 매퍼
05 — Column Mapper

사내 엑셀 포맷 그대로 사용하기

Use Your Own Excel Format

표준 헤더와 다른 사내 고유 열 이름을 사용하는 경우, 컬럼 매퍼가 자동으로 열립니다. 한 번 설정하면 저장되어 다음 업로드 시 자동 적용됩니다.

If your company uses non-standard column headers, the Column Mapper opens automatically. Configure it once — the profile is saved and auto-applied on future uploads.

케이블 컬럼 매핑
Cable Column Mapping
필수 필드 미매핑: Cable Name, From Node, To NodeRequired fields not mapped: Cable Name, From Node, To Node
파일에서 감지된 헤더:
Detected headers from file:
CBL_ID CBL_TYPE FROM_PT TO_PT LENGTH_M
Cable Name *
From Node *
매핑 적용
Apply Mapping
매핑 프로필 저장 효과: 다음 번에 같은 회사의 엑셀 파일을 올리면 자동으로 적용됩니다. "저장된 프로필 초기화" 버튼으로 언제든 리셋 가능합니다.Saving a mapping profile means next time you upload from the same company, it auto-applies. Reset anytime with "Clear Saved Profile".
SEcMS screenshot
케이블 타입 DB — 사내 표준 타입 관리Cable Type DB — manage company-standard cable types
06 — 케이블 목록
06 — Cable List

수만 가닥을 손쉽게 관리

Manage Tens of Thousands of Cables

SEcMS screenshot
케이블 목록 탭 — 데이터 업로드 전 초기 화면Cable List tab — before data upload

실시간 검색·필터

Real-time Search & Filter

이름·타입·노드·시스템별 즉시 필터링. 대용량에서도 지연 없음.

Instant filter by name, type, node, system. No lag on large datasets.

인라인 편집

Inline Editing

셀 클릭 → 직접 수정. 저장은 자동 (프로젝트 자동 저장).

Click cell → edit directly. Auto-saved with project auto-save.

다중 선택 라우팅

Multi-select Routing

체크박스로 원하는 케이블만 선택 후 "선택 경로계산" 실행.

Check specific cables then run "Route Selected".

07 — 노드 정보
07 — Node Info

선박 구조를 그래프로 모델링

Model Ship Structure as a Graph

노드(Node)는 케이블 트레이 구간, 관통부, 기기 위치 등 선박의 물리적 위치를 나타냅니다. 노드 간 연결(RELATION)이 경로탐색의 기반이 됩니다.

Nodes represent physical locations: cable tray segments, penetrations, equipment positions. Node connections (RELATION) form the basis for path-finding.

NODE_RNAME노드 고유 이름 (필수). 케이블의 FROM_NODE/TO_NODE에서 참조.Unique node name (required). Referenced by FROM_NODE/TO_NODE in cables.
LINK_LENGTH인접 노드까지의 거리(m). 경로계산 가중치에 사용.Distance to adjacent node (m). Used as routing weight.
RELATION연결된 노드 이름 (쉼표 구분). 예: ER-02,DECK3-PORTConnected node names (comma-separated). e.g. ER-02,DECK3-PORT
DECK / X,Y,Z덱 번호 및 3D 좌표 (선택). 3D 뷰어에 사용.Deck number and 3D coordinates (optional). Used by 3D viewer.
SEcMS screenshot
노드 정보 탭 — 노드/링크 목록 및 편집Node Info tab — node/link list and editing
SEcMS screenshot
공간 편집기 — 노드 배치 시각화Space Editor — visual node placement
08 — 경로 자동계산
08 — Auto Routing

자동 라우팅 엔진이 최적 경로를 찾습니다

Auto-Routing Engine Finds the Optimal Path

SEcMS screenshot
경로 자동계산 탭Auto Routing tab

케이블 리스트의 FROM_NODE → TO_NODE를 최단경로 알고리즘으로 자동 탐색합니다. 대규모 호선도 빠르게 처리.

Automatically finds FROM_NODE → TO_NODE using shortest-path algorithm. Large-scale vessels handled quickly.

케이블 목록 탭에서 "전체 경로계산" 클릭

Click "Route All" in Cable List tab

또는 개별 케이블 행의 ▶ 버튼으로 단일 경로 계산.

Or click the ▶ button on a single cable row for individual routing.

경로 표시 확인

Verify Displayed Path

PATH 컬럼에 "ER-01 → DECK3 → PANEL-B" 형식으로 노드 경로가 표시됩니다. 계산된 길이(m)도 함께 표시.

The PATH column shows the node path: "ER-01 → DECK3 → PANEL-B". Calculated length (m) is also shown.

경로 없음 케이블 처리

Handle Cables with No Path

FROM/TO 노드가 연결되지 않으면 "경로 없음"으로 표시됩니다. 노드 RELATION 확인 후 재실행.

If FROM/TO nodes are disconnected, "No path" is shown. Check node RELATION and re-run.

CHECK_NODE 필드: 케이블이 반드시 통과해야 하는 중간 노드를 지정합니다. 지정된 노드를 경유하지 않는 경로는 선택되지 않습니다. CHECK_NODE field: specifies intermediate nodes the cable must pass through. Paths that skip the specified node are not selected.
09 — 트레이 충전율
09 — Tray Fill Calculator

IEC 기준 충전율, 드래그로 배치 확인

IEC Fill-Rate with Drag-and-Drop Layout

SEcMS screenshot
트레이 충전율 탭 — TRAY / COAMING / PIPE 서브탭Tray Fill tab — TRAY / COAMING / PIPE subtabs

각 노드(트레이 구간)의 케이블 충전율을 IEC 60092 기준으로 자동 계산합니다. 드래그 배치 시뮬레이터로 물리적 공간도 확인 가능합니다.

Automatically calculates the cable fill rate for each node (tray segment) per IEC 60092. The drag simulator lets you verify physical space.

자동 충전율 계산

Auto Fill-Rate Calculation

트레이 폭·높이 입력 시 OD 기반 채움률 즉시 계산. 경고: 40% 초과 시 표시.

Enter tray width/height → instant OD-based fill calculation. Warning shown above 40%.

드래그 배치 시뮬레이터

Drag-and-Drop Simulator

케이블을 트레이 단면에 드래그하여 실제 배치를 시뮬레이션합니다.

Drag cables onto the tray cross-section to simulate actual layout.

BOM 연계

BOM Integration

트레이 계획 결과가 BOM 자재 산출에 자동 반영됩니다.

Tray planning results automatically feed into BOM material calculation.

10 — BOM 자동 생성
10 — BOM Auto-Generation

발주서를 5초 만에

Material Orders in 5 Seconds

SEcMS screenshot
BOM 탭 — 케이블 업로드 후 자동 생성BOM tab — auto-generated from cable data

경로 계산 완료 후, BOM 탭에서 "BOM 생성" 클릭 한 번으로 케이블 자재발주서가 완성됩니다. Excel 또는 CSV로 다운로드 가능합니다.

After routing completes, click "Generate BOM" in the BOM tab — your material order is done. Download as Excel or CSV.

BOM 항목BOM Items케이블 타입 · 총 필요 길이 · 수량 · 롤 단위 분할 · 단가(선택)Cable type · total required length · quantity · roll-size split · unit price (optional)
출력 형식Export Format.xlsx · .csv · PDF (Pro)
마진 설정Margin Settings타입별 여유 마진(%) 개별 설정 가능. 기본값 10%.Per-type margin (%) can be individually configured. Default 10%.
SEcMS screenshot
고급 BOM — 드럼 발주 / 글랜드 BOMAdvanced BOM — drum procurement & gland BOM
SEcMS screenshot
드럼 매니저 — 드럼 잔량 추적Drum Manager — track remaining cable on drums
11 — 선급 규정 검사
11 — Class Rule Check

IEC 60092 자동 검증

IEC 60092 Auto Verification

SEcMS screenshot
선급 규정 검사 탭Class Rule Check tab

DNV·ABS·BV·LR·KR 규정이 내장되어 있습니다. "검사 실행" 클릭 시 전 케이블을 자동 점검하고 위반 항목 리포트를 생성합니다.

DNV·ABS·BV·LR·KR rules are built-in. Click "Run Check" and every cable is automatically inspected — violations are listed in a report.

전압강하 검사

Voltage Drop Check

케이블 단면적·길이 기반 전압강하 계산. IEC 허용 범위 초과 시 경고.

Voltage drop calculation based on cable cross-section and length. Warning if IEC limit exceeded.

간섭 검사

Interference Check

전력·신호 케이블 동일 트레이 경유 여부 확인. 분리 요구 규정 적용.

Checks if power and signal cables share the same tray. Applies separation requirements.

보고서 출력

Report Export

위반 항목, 규정 근거, 권장 조치를 포함한 Excel 보고서 자동 생성.

Auto-generates Excel report with violations, rule references, and recommended actions.

SEcMS screenshot
간섭 검사 결과 — 전력·신호 분리 위반 항목Interference Check — power/signal separation violations
SEcMS screenshot
전압강하 검사 결과 — IEC 허용 범위 초과 케이블Voltage Drop Check — cables exceeding IEC limits
SEcMS screenshot
검사 분석 요약 — 통계 및 규정 준수율Analysis Summary — statistics and compliance rate
12 — 3D 뷰
12 — 3D View

케이블 트레이 3D 시각화

Cable Tray 3D Visualization

V2.0 NodeStandard3DMap은 Navisworks 스타일 Canvas 2D 렌더러로 35,000 노드까지 60fps 처리합니다. 헥사곤(Tray) · 다이아몬드(Hole) 아이콘, Fill 히트맵, 경로 파이어 이펙트, 4개국어(KO/EN/JA/ZH) UI 제공. V2.0 노드맵 iframe(legacy) 뷰어를 토글 전환할 수 있습니다.

The V2.0 NodeStandard3DMap is a Navisworks-style Canvas 2D renderer handling up to 35,000 nodes at 60fps. Hexagon (Tray) + Diamond (Hole) icons, fill heatmap, fire-effect path, 4-language UI (KO/EN/JA/ZH). Toggle between V2.0 NodeMap and iframe (legacy).

V2.0 신기능 — 샘플 데이터 1-클릭 로드V2.0 New — One-Click Sample Load
3D → PLANT ROUTER 탭 → 좌측 사이드바 샘플 데이터 불러오기 (35k) 클릭 → Cloudflare R2에서 77KB 즉시 다운로드 → 1,057 노드 (908 Tray + 149 Hole) 렌더 완료. 실제 선박 스케일 258m × 61m × 30m. 3D → PLANT ROUTER tab → sidebar Load Sample Data (35k) → instant 77KB download from R2 → 1,057 nodes (908 Tray + 149 Hole) rendered. Real ship scale 258m × 61m × 30m.
뷰어 · 에디터 토글 (V2.0)Viewer / Editor Toggle (V2.0)
뷰어 모드 — NavisworksViewer. 헥사곤 노드 + 경로 시각화 + Fill 히트맵.
에디터 모드 — NodeEditorPanel. 그리드 스냅 · 노드 생성 · 연결 · 삭제 · Excel/DXF 내보내기.
Viewer mode — NavisworksViewer. Hexagon nodes + path viz + fill heatmap.
Editor mode — NodeEditorPanel. Grid snap · create · connect · delete · Excel/DXF export.

샘플 데이터 1클릭

1-Click Sample Data

R2 저장 35k 노드 파일 즉시 로드. 신규 사용자 평가·데모에 최적.

Instant R2-hosted 35k node file load. Perfect for new-user eval and demos.

헥사곤 노드

Hexagon Nodes

Tray=육각형, Hole=다이아몬드. DECK 코드 + 번호 자동 분할 표시.

Tray=hexagon, Hole=diamond. Auto split DECK code + number display.

파이어 이펙트 경로

Fire-Effect Path

최단경로를 초록색 글로우·파이어 이펙트로 시각화.

Shortest-path with green glow · fire effect visualization.

Fill 히트맵

Fill Heatmap

트레이 충전율을 색상으로 3D 오버레이. >80% 빨강 · >60% 주황 · >30% 초록.

Tray fill ratio color overlay. >80% red · >60% orange · >30% green.

뷰 프리셋 4종

4 View Presets

ISO · PLAN · FRONT · SIDE 원클릭 전환. 드래그 회전, Shift+드래그 이동, 휠 줌.

ISO · PLAN · FRONT · SIDE one-click switch. Drag rotate, Shift+drag pan, wheel zoom.

DWG/PDF/DXF 오버레이

DWG/PDF/DXF Overlay

도면을 Z-레벨 지정 후 3D 오버레이. 투명도 · 레이어 개별 제어.

Overlay drawings at Z-level. Individual opacity · layer control.

4개국어 UI

4-Language UI

한국어 · English · 日本語 · 中文. 우측 상단 토글로 즉시 전환.

Korean · English · Japanese · Chinese. Top-right toggle, instant switch.

노드 에디터

Node Editor

DECK 코드 자동 번호, Tray/Hole 토글, 그리드 500mm 스냅, 근접 자동 연결.

Auto DECK numbering, Tray/Hole toggle, 500mm grid snap, proximity auto-link.

Excel/DXF 내보내기

Excel/DXF Export

편집한 노드를 XLSX + AutoCAD R12 호환 DXF로 즉시 내보내기.

Export edited nodes to XLSX + AutoCAD R12-compatible DXF instantly.

SEcMS screenshot
3D 뷰어 — 케이블 트레이 경로 시각화 (노드표준 iframe)3D Viewer — cable tray routing (NodeStandard iframe)
13 — 관리자 패널
13 — Admin Panel

사용자·프로젝트·이메일 관리

User, Project & Email Management

관리자 권한이 있는 계정만 접근 가능합니다. 설정 탭 진입 시 Google 재인증이 필요합니다.Admin panel is accessible only to accounts with admin privileges. Google re-authentication required for Settings tab.

사용자 관리

User Management

사용자 검색·권한 수정·계정 정지·삭제. 탭별 권한 개별 설정.

Search users, edit permissions, suspend/delete accounts. Per-tab permission control.

초대코드 발급

Invite Code Generation

티어별(Basic/Standard/Pro) 초대코드 생성. 코드 만료일·사용 횟수 설정.

Generate invite codes by tier (Basic/Standard/Pro). Set expiry and usage limits.

승인 관리

Approval Queue

신규 가입 신청 승인/거부. 미처리 건은 알림 배너로 표시.

Approve/reject new registration requests. Pending items shown in alert banner.

받은편지함

Email Inbox

[email protected]로 수신된 모든 메일을 패널 내에서 확인. Postmark Inbound 연동.

View all emails received at [email protected] directly in the panel. Powered by Postmark Inbound.

SEcMS screenshot
관리자 패널 — 고급 메뉴 (사용자·초대코드·승인)Admin Panel — advanced menu (users, invite codes, approvals)
SEcMS screenshot
관리자 패널 — 메뉴 호버 상태Admin Panel — menu hover state
SEcMS screenshot
히스토리 탭 — 작업 이력 전체 기록History tab — full audit trail of all actions
이메일 연동 설정: Postmark 계정에서 [email protected] 수신 서버를 생성하고, Inbound Webhook URL을 https://secms.pages.dev/api/admin/inbound-email으로 설정하세요. POSTMARK_WEBHOOK_TOKEN 환경변수 설정 필요.Email integration setup: Create an inbound server at [email protected] in Postmark, and set the Inbound Webhook URL to https://secms.pages.dev/api/admin/inbound-email. Set the POSTMARK_WEBHOOK_TOKEN environment variable.
14 — FAQ

FAQ

Q. 초대 코드 없이 사용 신청하려면? Q. How do I request access without an invite code?

로그인 화면에서 Google로 로그인 → 승인 신청 완료. 관리자가 24시간 내 코드를 이메일로 발송합니다.

Sign in with Google on the login screen → complete the access request. Admin sends a code by email within 24 hours.

Q. 우리 회사 엑셀 포맷을 그대로 써도 되나요? Q. Can I use our company's existing Excel format?

네. 업로드 시 표준 헤더가 감지되지 않으면 컬럼 매퍼가 자동으로 열립니다. 한 번 매핑하면 프로필이 저장되어 다음 업로드에 자동 적용됩니다.

Yes. If standard headers aren't detected on upload, the Column Mapper opens automatically. Map once, save the profile, and it auto-applies on future uploads.

Q. 경로계산 결과에 "경로 없음"이 표시되는 케이블이 있어요. Q. Some cables show "No path found" after routing.

FROM_NODE 또는 TO_NODE가 노드 목록에 없거나, 두 노드 사이에 RELATION 연결이 끊어진 경우입니다. 노드 탭에서 해당 노드의 RELATION 컬럼을 확인하세요.

The FROM_NODE or TO_NODE is missing from the node list, or there's a broken RELATION connection between them. Check the RELATION column for those nodes in the Node tab.

Q. 동시에 여러 명이 같은 프로젝트를 편집하면 어떻게 되나요? Q. What happens when multiple people edit the same project simultaneously?

낙관적 잠금이 적용됩니다. 동시 저장 충돌 시 화면 상단에 배너가 표시되며, "강제 저장(내 변경 우선)" 또는 "서버 데이터로 새로고침" 중 선택할 수 있습니다. 이력은 자동 기록됩니다.

Optimistic locking is applied. On concurrent save conflict, a banner appears at the top. Choose "Force Save (keep my changes)" or "Reload from Server". History is automatically recorded.

Q. 폐쇄망(에어갭) 환경에서 사용 가능한가요? Q. Can SEcMS be used in air-gapped (closed-network) environments?

별도의 On-Premise(VPC 구축형) 버전을 제공합니다. 군함, 대형 조선소의 보안 요구사항에 맞게 구성됩니다. [email protected]로 문의하세요.

A separate On-Premise (VPC-deployed) version is available. Configured for naval and Tier-1 shipyard security requirements. Contact [email protected].

16 — 케이블 타입 글로벌 잠금
16 — Cable Type Global Lock

글로벌 표준 349종 보호 + 프로젝트 커스텀

349 Global Standards Protected + Per-Project Custom

v3.6부터 케이블 타입이 글로벌(읽기전용)프로젝트 커스텀(편집 가능)으로 완전 분리됩니다. 서버 기준 데이터를 절대 훼손하지 않으면서 현장 특수 타입을 자유롭게 추가할 수 있습니다.

From v3.6, cable types are fully separated into Global (read-only) and Per-project Custom (editable). Server baseline data is never compromised while field-specific types can be freely added.

글로벌 타입 (349종)

Global Types (349)

DEFAULT_CABLE_TYPE_DB 기준. 수정·삭제·Excel 덮어쓰기 모두 차단. 행 앞에 아이콘 표시.

Based on DEFAULT_CABLE_TYPE_DB. All modification, deletion, and Excel overwrite blocked. Rows show icon.

️ 커스텀 타입 (프로젝트별)

️ Custom Types (per project)

Add Custom 버튼으로 현장 특수 타입 추가. 행 앞 버튼으로 개별 삭제. localStorage 저장.

Add custom types for field-specific cables via Add Custom button. Delete via button per row. Saved in localStorage.

Excel Import 정책

Excel Import Policy

Excel 가져오기는 커스텀 풀만 교체합니다. 글로벌 타입명과 충돌하는 항목은 자동 제외됩니다.

Excel import only replaces the custom pool. Items conflicting with global type names are automatically excluded.

글로벌 저장소Global Storage코드 번들 내장 (DEFAULT_CABLE_TYPE_DB) — 서버 단일 소스Built into code bundle (DEFAULT_CABLE_TYPE_DB) — single source of truth
커스텀 저장소Custom StoragelocalStorage: scms_custom_cable_types
마이그레이션Migration구버전 scms_cable_type_data → 자동 분리·전환Old scms_cable_type_data → auto-separated and migrated
통계 표시Stats Display N global · M custom · N+M filtered (항상 헤더에 표시) N global · M custom · N+M filtered (always shown in header)
커스텀 타입 이름은 글로벌 타입명과 동일하게 설정할 수 없습니다. 글로벌 타입과 같은 이름을 입력하면 자동으로 거부됩니다. 커스텀 타입은 프로젝트별 localStorage에만 저장되므로 다른 기기/브라우저에서는 공유되지 않습니다. Custom type names cannot duplicate global type names — auto-rejected if they match. Custom types are saved per-device in localStorage and are not shared across devices/browsers.
17 — 소싱 관리 (발주 · 포설 · 종단)
17 — Sourcing (Procurement · Installation · Termination)

공급망 전 단계를 한 화면에서

Full Supply Chain in One View

SOURCING 그룹은 케이블 공급망의 전 단계(발주 → 포설 작업지시 → 실제 포설 → 종단 처리 → 재고)를 커버합니다. Termination 탭은 v3.6에서 고아 상태(접근 불가)에서 SOURCING 그룹으로 복귀되었습니다.

The SOURCING group covers the full cable supply chain (procurement → work order → installation → termination → inventory). The Termination tab was orphaned (inaccessible) and restored to the SOURCING group in v3.6.

Procurement — 발주/입고

Procurement — Orders & Receipt

공급업체별 발주 관리, 납기 추적, 입고 확인. BOM+와 연동하여 자동 발주서 생성.

Manage orders by supplier, track lead times, confirm receipts. Auto-generate orders linked to BOM+.

POS — 포설 작업 지시서

POS — Installation Work Order

작업자별 포설 지시서 발행. 케이블별 포설 순서, 경로, 담당자 배정.

Issue per-worker installation orders. Assign cable installation sequence, route, and worker.

Installation — 포설 현황

Installation — Status Tracking

케이블 포설 진행 상태 실시간 추적. 미포설/진행중/완료 필터. 작업자 배정.

Real-time cable installation progress tracking. Filter by pending/in-progress/complete. Worker assignment.

Termination — 종단 처리 v3.6 복구

Termination — Cable Termination Restored v3.6

케이블 양단 종단 처리 현황 관리. 글랜드 타입, 터미널 블록 배정, 완료 확인. v3.6에서 SOURCING 그룹 접근 경로 복구.

Manage cable-end termination status. Gland type, terminal block assignment, completion check. Access path restored to SOURCING group in v3.6.

Inventory — 재고 관리

Inventory — Stock Management

자재 재고 현황 대시보드. 부족 알림, 최소 재고 기준 설정, 사용 이력 추적.

Material stock dashboard. Shortage alerts, min stock level settings, usage history tracking.

v3.6 Termination 고아 해결 내역v3.6 Termination Orphan Fix
Termination 탭은 AppTabBar.AdvancedMenuDropdown 에만 정의되어 있었으나 AppTabBar가 렌더링되지 않아 접근 불가(고아) 상태였습니다. v3.6에서 TopNavBar SOURCING 그룹에 직접 추가되어 모든 사용자가 접근 가능합니다. The Termination tab was defined only in AppTabBar.AdvancedMenuDropdown but became inaccessible (orphaned) because AppTabBar was not rendered. In v3.6 it was added directly to the TopNavBar SOURCING group, accessible to all users.
18 — 자동화 테스트
18 — Automated Tests

Vitest 단위 테스트 가이드

Vitest Unit Test Guide

SEcMS는 Vitest 기반 8개 테스트 파일 · 120+ 케이스를 갖추고 있습니다. 핵심 알고리즘(Dijkstra, 트레이 물리, BOM 집계, 전압강하, 결제 보안)이 모두 검증됩니다.

SEcMS ships with 8 Vitest test files covering 120+ cases across core algorithms: Dijkstra routing, tray physics, BOM aggregation, voltage drop, and payment security.

테스트 실행 명령

Run Commands

# 프로젝트 루트에서 실행 / Run from project root # 전체 테스트 한 번 실행 (CI/CD 용) npx vitest run # Watch 모드 (개발 중 실시간 재실행) npx vitest # 커버리지 리포트 (services/**/*.ts 대상) npx vitest run --coverage # 특정 파일만 실행 npx vitest run tests/routing.test.ts npx vitest run tests/security/
환경 요건: Node.js 18+, npm install 완료 후 실행. 테스트는 외부 API 호출 없이 순수 함수만 검증합니다 — D1/Firebase 연결 불필요.
Requirements: Node.js 18+, run npm install first. Tests validate pure functions only — no D1/Firebase connection needed.

테스트 파일 상세 (8개)

Test Files in Detail (8 files)

tests/routing.test.ts
Dijkstra 최단경로 · 경유지 · facade 함수
Dijkstra shortest path · checkpoints · facade
16 cases
같은 출발/도착 → path=[node], length=0
Same start/end → path=[node], length=0
2홉 A→C: 가중치 합산 정확성 검증
2-hop A→C: weighted sum accuracy
연결 안 된 서브그래프 → null 반환
Isolated subgraph → returns null
경유지(checkNode) 포함 경로: A→(경유:D)→C
Checkpoint path: A→(via:D)→C
linkLength=0 노드 → 음수 방지(0.001 처리)
linkLength=0 node → prevents negative weight
self-reference relation 무한루프 방지
Self-reference relation infinite loop prevention
단방향 relation → 역방향 null
One-way relation → reverse returns null
tests/smartRouter.test.ts
가중치 Dijkstra + 부하 분산 + 병목 분석
Weighted Dijkstra + load balancing + bottleneck analysis
12 cases
다이아몬드 그래프 20케이블 → B/C 경로 분산 확인
Diamond graph 20 cables → B/C path distribution verified
checkNode 경유 강제: 반드시 B를 통과
Forced checkNode: path must include B
maxDetourRatio 초과 방지 (메쉬 그래프 50케이블)
maxDetourRatio enforcement (mesh graph, 50 cables)
POWER/SIGNAL 시스템 분리 패널티 적용
POWER/SIGNAL system separation penalty
도달 불가 checkNode → 실패 처리
Unreachable checkNode → fail handling
고립 서브그래프 케이블 → null path, 길이 0
Isolated subgraph cable → null path, length 0
analyzeBottlenecks: 노드별 케이블 수 집계 / maxCapacity 초과 감지
analyzeBottlenecks: per-node cable count / overload detection
tests/trayFill.test.ts
트레이 물리 시뮬레이션 · 다단 시스템 · 최적화 매트릭스
Tray physics simulation · multi-tier · optimization matrix
14 cases
빈 케이블 → fillRatio=0, MIN_WIDTH=200mm
Empty cables → fillRatio=0, MIN_WIDTH=200mm
좁은 트레이(200mm)에 80mm 케이블 20개 → 실패
200mm tray + 20×OD80 cables → fails
fixedWidth 지정 시 해당 폭으로 시뮬레이션
fixedWidth specified → simulation uses exact width
3단 시스템: 9케이블 → 각 단 3개 균등 분배
3-tier: 9 cables → 3 per tier (round-robin)
매트릭스 9×8 (단수 1~9, 폭 200~900)
Matrix 9×8 (tiers 1–9, widths 200–900)
단조성: 넓은 폭에서 반드시 성공 (fillRatio 감소)
Monotonicity: wider = always success, lower fillRatio
recommendWidth: 단일 OD10mm → 100mm 추천
recommendWidth: single OD10mm → recommends 100mm
tests/bomCalculation.test.ts
BOM 집계 · 글랜드 매핑 · 발주 수량 · 데크별 분류
BOM aggregation · gland mapping · procurement qty · deck grouping
13 cases
같은 타입 2케이블 → 1개 BOMEntry, 평균/최소/최대 길이 검증
Same type 2 cables → 1 BOMEntry, avg/min/max length verified
CableTypeDB에서 crossSection, weight 자동 참조
Reads crossSection and weight from CableTypeDB
OD 기반 글랜드 자동 매핑 (M12/M25/M40, 양 끝 ×2)
OD-based gland auto-mapping (M12/M25/M40, ×2 per cable)
발주 수량: 150m × 1.1마진 → 드럼 200m 올림
Procurement: 150m × 1.1 margin → rounded up to 200m drum
경로 없는 케이블 → Unknown 데크 분류
Cable without path → classified as Unknown deck
tests/voltageDropCalc.test.ts
IEC 60092 기반 전압강하 계산 · 케이블 사이즈 추천
IEC 60092 voltage drop calculation · cable size recommendation
15 cases
CV 2.5SQ 3C 파싱 → crossSection=2.5, cores=3, 3phase
CV 2.5SQ 3C parse → crossSection=2.5, cores=3, 3phase
도체 저항 테이블: 단면적 ↑ → 저항 ↓, 허용전류 ↑
Conductor table: larger cross-section → lower resistance, higher current
10m/2.5SQ/10A → pass (전압강하 <2%)
10m/2.5SQ/10A → pass (drop <2%)
200m/2.5SQ/25A → fail (전압강하 >6%)
200m/2.5SQ/25A → fail (drop >6%)
1phase(factor=2) vs 3phase(factor=√3) 계수 차이 검증
1phase(factor=2) vs 3phase(factor=√3) coefficient difference
1000m/500A/1% 허용 → 추천 불가(null)
1000m/500A/1% limit → no recommendation (null)
tests/superAdmin.test.ts
슈퍼어드민 화이트리스트 · prefix 스푸핑 방어
Super-admin allowlist · prefix spoofing defense
9 cases
null / undefined / 빈 문자열 → false
null / undefined / empty string → false
화이트리스트 이메일 대소문자 무관 허용
Whitelist emails: case-insensitive match
앞뒤 공백(탭/개행 포함) trim 처리
Leading/trailing whitespace trimmed
prefix 스푸핑 방지: [email protected] → false
Prefix spoofing: [email protected] → false
도메인 조작 방지: [email protected] → false
Domain manipulation: [email protected] → false
tests/security/auth.test.ts
이메일 정규화 · JWT 구조 · featureGate fail-closed · IDOR 방어
Email normalization · JWT structure · featureGate fail-closed · IDOR defense
22 cases
쌍따옴표/"[email protected]" → [email protected] 정규화
JWT 3-part 검증: 2-part / 4-part / 빈 부분 → invalid
JWT 3-part: 2-part / 4-part / empty segment → invalid
Tier 순서: free < basic < team < pro (전이성 포함)
Tier order: free < basic < team < pro (transitivity)
featureGate fail-closed: DB 오류 시 allowed:false, reason 포함
featureGate fail-closed: DB error → allowed:false with reason
free 플랜: procurement/installation/inventory 차단
Free plan: procurement/installation/inventory blocked
hacked_tier → free 폴백 (procurement 차단, routing 허용)
hacked_tier → falls back to free (procurement blocked)
IDOR: uid 대소문자/공백/빈값 구분 엄격 검증
IDOR: uid case/whitespace/empty checked strictly
tests/security/stripe.test.ts
결제 보안 · Webhook 멱등성 · 금액 검증
Payment security · webhook idempotency · amount verification
19 cases
free tier 결제 요청 → throw (결제 불가 tier)
Free tier payment request → throws (non-billable tier)
SQL injection 패턴 tier → throw
SQL injection pattern as tier → throws
실제 금액 < 기대 금액 1cent → 거부 (under-payment 방지)
Actual amount 1 cent below expected → rejected
Webhook 중복 이벤트: 동일 event_id 재수신 → 멱등 거부
Duplicate webhook event: same event_id → idempotent reject
서로 다른 event_id 독립 추적
Different event IDs tracked independently
전체 통과 기준: npx vitest run 실행 후 모든 테스트가 GREEN이어야 PR 병합 가능합니다. CI에서 자동 실행됩니다.
Pass criterion: All tests GREEN after npx vitest run before merging PRs. Runs automatically in CI.
16 — 35K 성능 테스트
16 — 35K Performance Test

35,000 케이블 대용량 처리 검증

35,000-Cable Large-Scale Processing Verification

SEcMS의 Dijkstra 라우팅, 트레이 물리 계산, BOM 집계는 모두 클라이언트 브라우저에서 실행됩니다. 서버 부하 없이 35,000케이블을 30초 이내에 처리하는 것이 공식 성능 목표입니다.

SEcMS runs Dijkstra routing, tray physics, and BOM aggregation entirely in the browser. The official performance target is processing 35,000 cables in under 30 seconds — with zero server load.

공식 성능 수치

Official Performance Targets

35K
케이블
cables
처리 가능 최대 규모
Maximum scale
<30
sec
전체 라우팅 목표 시간
Full routing target
0
서버 CPU
server CPU
클라이언트 완전 오프로딩
Full client offload
6
선급
class societies
동시 검증 (DNV/KR/BV/LR/ABS/NK)
Simultaneous check

️ 처리 단계별 시간 분포 (35K 기준)

️ Phase Timing Breakdown (35K cables)

Excel
Upload
Dijkstra ×35K
Tray
BOM
Excel 파싱 ~2sExcel parse ~2s 업로드 ~3sUpload ~3s Dijkstra ~15-20sDijkstra ~15–20s 트레이 계산 ~4sTray calc ~4s BOM 생성 ~4sBOM generate ~4s

35K 테스트 데이터 준비 방법

Preparing 35K Test Data

케이블 Excel 컬럼
Cable Excel Columns
CABLE_NO, CABLE_TYPE, FROM_PANEL, TO_PANEL, CABLE_OD, SYSTEM
노드 Excel 컬럼
Node Excel Columns
NODE_NAME, RELATION (쉼표 구분), LINK_LENGTH(m), DECK, STRUCTURE
권장 노드 수
Recommended node count
500~2,000개 (35K 케이블 기준)
500–2,000 nodes (for 35K cables)
파일 크기 상한
File size limit
~50MB (xlsx), ~20MB (csv)
권장 브라우저
Recommended browser
Chrome 120+ / Edge 120+ (V8 JIT 최적화)
권장 RAM
Recommended RAM
16GB 이상 (브라우저 탭 ~1.5GB 사용)
16GB+ (browser tab uses ~1.5GB)

브라우저 콘솔에서 성능 직접 측정

Measure Performance via Browser Console

// 경로 계산 후 브라우저 개발자도구(F12) → Console에서 실행 // 1. 라우팅 시간 측정 const t0 = performance.now(); // → 앱에서 "경로 계산 시작" 버튼 클릭 // → 계산 완료 후: const elapsed = ((performance.now() - t0) / 1000).toFixed(2); console.log(`라우팅 완료: ${elapsed}s`); // 2. 메모리 사용량 확인 (Chrome 전용) const mem = performance.memory; console.log(`힙 사용: ${(mem.usedJSHeapSize/1024/1024).toFixed(1)}MB`); // 3. 라우팅된 케이블 수 / 실패 수 확인 // 앱 내부 state에서 확인 가능: // window.__secms_debug?.routingReport 또는 콘솔 로그 확인

35K 테스트 통과 체크리스트

35K Test Pass Checklist

케이블 35,000행 + 노드 1,000행 Excel 업로드

Upload Excel: 35,000 cable rows + 1,000 node rows

CABLE_NO 중복 없음, FROM_PANEL/TO_PANEL이 모두 NODE 목록에 존재하는지 확인

Ensure no duplicate CABLE_NO and all FROM/TO panels exist in node list

경로 계산 실행 → 30초 이내 완료 확인

Run routing → verify completes within 30 seconds

실패 케이블이 5% 미만이어야 정상 (RELATION 끊김 없는 데이터 기준)

Failed cables should be <5% (assuming no broken RELATION chains)

트레이 충전율 계산 → 표준 트레이 폭별 결과 확인

Run tray fill → verify results per standard tray width

IEC 기준 40% 충전율 이하 트레이 폭 자동 추천 확인

Verify IEC 40% fill-rate tray width recommendation

BOM 내보내기 → 케이블 타입별 총 수량/길이/중량 검증

Export BOM → verify total qty/length/weight per cable type

발주 수량 = 총 길이 × (1 + 마진%) → 드럼 단위 올림

Order qty = total length × (1 + margin%) → rounded up to drum unit

선급 규정 검사 → DNV/KR/BV/LR/ABS/NK 전체 통과 확인

Class rule check → verify pass across DNV/KR/BV/LR/ABS/NK

IEC 60092 전압강하 3% 이하, 트레이 충전율 40% 이하 기준

IEC 60092: voltage drop ≤3%, tray fill ≤40%

성능 저하 원인: 노드 RELATION이 너무 조밀한 경우(한 노드에 50+ 연결) Dijkstra 탐색 시간이 급증합니다. 실제 조선 배관 구조는 노드당 2~8개 RELATION이 일반적이며, 이 범위에서 30초 목표가 달성됩니다.
Performance warning: Dense RELATION graphs (50+ links per node) significantly increase Dijkstra traversal time. Typical shipboard topology has 2–8 relations per node — the 30-second target assumes this range.
케이블 수Cable count 노드 수Nodes 예상 라우팅 시간Expected routing time 권장 RAMRecommended RAM
1,0001,0001,000~1s~1s8GB8GB
5,0005,0005,000~3s~3s8GB8GB
15,00015,00015,000~10s~10s16GB16GB
35,00035,00035,000<30s<30s16GB+16GB+
50,000+50,000+50,000+~60s+~60s+32GB32GB

17. 신규 메뉴 · V2 (2026-04)

17. New Menus · V2 (2026-04)

V6 → V2 업데이트로 추가된 메뉴, 기능, 자동화 항목을 정리합니다.

New menus, features, and automation added in the V6 → V2 upgrade.

핵심 업그레이드 — 3-Tier 자동 복구 파이프라인

Core — 3-Tier Auto-Rescue Pipeline

Tier 1 — Alias 정규화 매칭

Tier 1 — Alias Normalized Match

Excel 헤더의 공백·언더스코어·점·하이픈을 자동 제거하여 표준 alias와 비교. FR NODE, FROM_NODE, Fr.Node 모두 동일하게 인식.

Strips space / underscore / dot / hyphen and matches against standard aliases. FR NODE, FROM_NODE, Fr.Node all recognized.

Tier 2 — 토큰 스코어링 자체 필터

Tier 2 — Token Scoring Self-Filter

Tier 1 실패 시 키워드 토큰(FROM/FR/SRC × NODE/CODE/DK) 기반 점수로 가장 유사한 컬럼 자동 선택. Anti-keyword(TO, REST 등)는 감점.

On Tier 1 miss, picks the best column via keyword scores (FROM/FR/SRC × NODE/CODE/DK) with anti-keyword penalty.

Tier 3 — AI 5모델 병렬 복구

Tier 3 — AI 5-Model Parallel Rescue

매칭률 50% 미만 시 OpenRouter 무료 5모델(Qwen3-Coder · Nemotron-120B · GPT-OSS-120B · Llama-3.3-70B · Gemma-4-31B)이 각자 다른 페르소나로 헤더를 분석 → 다수결로 자동 복구.

Below 50% match, 5 OpenRouter free models analyze the header with distinct personas → majority vote auto-rescue.

신규 고급 메뉴

New Advanced Menus

노드 관계 빌더 (Advanced → 고급)

Node Relation Builder (Advanced → Advanced group)

케이블 스케줄 XLSX를 한 번 드롭하면 파싱·그래프 구축·AI 5모델 병렬 검증(dead-end, suspicious node, OCR 모호성)까지 자동 실행. 단일/다중 ROUTE 컬럼 포맷 자동 감지.

Drop an XLSX once — parsing, graph build, and 5-model AI validation (dead-end, suspicious nodes, OCR ambiguity) run automatically. Single vs multi-column ROUTE layouts auto-detected.

노드 유효성 검사 (Advanced → 검증)

Node Validation (Advanced → Validation)

FROM/TO 누락, 경로 단절, 분리된 컴포넌트, 고립 노드(degree=1)를 자동 탐지 → CSV 내보내기.

Auto-detects missing FROM/TO, broken paths, disconnected components, isolated nodes (degree=1) → CSV export.

성능 개선

Performance

BOM 35k 케이블 성능 100배 향상 BOM 35k cable performance 100× faster

cableTypeDB 선형 탐색 O(N×M) ≈ 12M iter → Map 캐싱 O(N) = 35k iter. 화면/Excel 무게 합계 불일치(BUG-S) 동시 해소.

cableTypeDB linear lookup (O(N×M) ≈ 12M iter) → Map cache (O(N) = 35k iter). Resolved screen/Excel weight mismatch (BUG-S).

AI 자동 개입 지점

AI Auto-Intervention Points

메뉴Menu AI 역할AI Role Models
파일 업로드File Upload스키마 자동 감지Schema auto-detectOpenRouter 5 parallel
노드 관계 빌더Node Relation BuilderOCR 모호성 + 그래프 진단OCR ambiguity + graph diagnosis5 + 3 parallel
Analysis TabAnalysis Tab통계 요약/이상치Stats summary/anomaly내장 AI 엔진
Admin → 베타 활동Admin → Beta Activity사용 로그 보고서Usage log reportAI

정리된 항목

Cleanup

20 — 감사 로그 & 변경 추적
20 — Audit Log & Change Tracking

모든 변경사항의 완전한 기록

Complete Record of Every Change

SEcMS는 케이블 편집·라우팅·BOM·드럼 할당·호선 등록·사용자 권한·그룹 변경 등 모든 주요 작업을 자동으로 기록합니다. 누가, 언제, 무엇을 변경했는지 언제든지 조회할 수 있습니다.

SEcMS automatically logs every significant action: cable edits, routing, BOM, drum assignment, vessel registration, user permissions, group changes, and more. Always know who changed what and when.

History 탭 — 스냅샷 복원

History Tab — Snapshot Restore

파일 업로드·경로 계산·케이블 편집·수동 저장·데이터 초기화 이벤트마다 스냅샷 자동 저장. [복원] 버튼으로 특정 시점으로 즉시 되돌리고, Ctrl+Z로 복원 취소 가능.

Auto-saves snapshots on file upload, routing, cable edit, manual save, data clear. [Restore] button reverts to any point instantly; Ctrl+Z undoes the restore.

서버 Audit Log — D1 영속 기록

Server Audit Log — D1 Persistent

모든 변경사항이 Cloudflare D1에 영속 기록됩니다. 90일 이후 R2로 자동 아카이브. Admin Panel → Audit History 탭에서 조회.

All changes recorded persistently in Cloudflare D1. Auto-archived to R2 after 90 days. View in Admin Panel → Audit History tab.

변경된 셀 컬러링

Changed Cell Highlighting

Cable List에서 변경된 셀은 노란색 배경으로 강조 표시됩니다. "변경된 것만 보기" 필터 토글로 변경 항목만 즉시 필터링.

Changed cells in Cable List are highlighted with yellow background. "Show changes only" filter toggle instantly filters changed rows.

기록 대상Logged Action 기록 내용Record Content 저장소Storage
케이블 편집Cable edit변경된 필드명, 이전/이후 값, 케이블 IDField name, before/after value, cable IDHistory Tab + D1
파일 업로드File upload파일명, 케이블 수, 노드 수Filename, cable count, node countHistory Tab + D1
경로 계산Routing처리 케이블 수, 실패 수, 계산 시간Processed, failed, elapsed timeHistory Tab + D1
재라우팅Re-routing대상 케이블 ID, 실행 사용자, 타임스탬프Cable ID, user, timestampD1
BOM 생성BOM generation타입별 집계 결과, 내보내기 형식Type aggregation, export formatD1
드럼 할당Drum assignment드럼 번호, 케이블 수, 알고리즘Drum number, cable count, algorithmD1
Fill 계산Fill calculation노드명, 충전율, 추천 트레이Node name, fill rate, recommended trayD1
권한 변경Permission change대상 사용자, 변경된 권한 목록Target user, changed permissionsD1
그룹 변경Group change그룹명, 대상 사용자 수Group name, user countD1
호선 등록/삭제Vessel create/delete호선명, 선종, 실행 사용자Vessel name, type, userD1
90일 자동 아카이브90-Day Auto Archive
audit_logs 테이블의 90일 이전 레코드는 Cron Job이 자동으로 Cloudflare R2에 JSON으로 보관합니다. D1 용량 절감 + 영구 보관 동시 달성. Records older than 90 days in audit_logs are automatically archived to Cloudflare R2 as JSON by a Cron Job. Saves D1 capacity while retaining records permanently.
21 — AI 접근 제어
21 — AI Access Control

3단 게이트로 외부 AI 전송 차단

3-Gate System for External AI Transmission Control

SEcMS는 케이블 데이터가 외부 AI 서비스(Groq, OpenRouter 등)로 전송되기 전에 시스템 → 조직 → 개인 3단 게이트를 통과합니다. 조선소 기밀 데이터 보호를 위한 엔터프라이즈 필수 기능입니다.

Before cable data is sent to external AI services (Groq, OpenRouter, etc.), it passes through a System → Organization → User 3-gate check. An enterprise-grade safeguard for protecting classified shipyard data.

시스템 레벨 게이트

System-Level Gate

Admin → System Flags → AI_ENABLED 토글. OFF 시 모든 테넌트의 AI 기능 일괄 차단. 차단 배너: 🛡 빨간색.

Admin → System Flags → AI_ENABLED toggle. When OFF, all tenants' AI features are blocked. Banner: 🛡 red.

조직 레벨 게이트

Organization-Level Gate

Admin → 요금제 관리 → 회사별 AI 허용/차단. 민감 데이터를 취급하는 조선소 단위로 AI 전송 금지 가능. 배너: 🏢 주황색.

Admin → Pricing Plans → per-company AI allow/block. Block AI transmission for specific shipyards handling classified data. Banner: 🏢 orange.

개인 레벨 게이트

User-Level Gate

Admin → 사용자 권한 → 🤖 AI 외부 송신 체크박스. 특정 사용자만 AI 기능 허용/차단. 배너: 👤 파란색.

Admin → User Permissions → 🤖 AI External Send checkbox. Allow/block AI per individual user. Banner: 👤 blue.

차단 시 화면 표시

What Users See When Blocked

secms.tech/app
🛡 시스템 관리자가 AI 외부 전송을 비활성화했습니다. (System Disabled)
🏢 조직 요금제에 AI 기능이 포함되어 있지 않습니다. (Organization Disabled)
👤 계정에 AI 기능 권한이 없습니다. 관리자에게 문의하세요. (User Disabled)

자동 데이터 마스킹

Auto Data Masking

AI 전송 허용 시에도 AI_MASKING_ENABLED 플래그가 ON이면 호선명([VESSEL]), 조선소명([SHIPYARD]), 도면번호([DRAWING]), 이메일([EMAIL]), 전화번호([PHONE])를 자동 치환. 한국 주요 7개 조선소 패턴 내장.

Even when AI is enabled, if AI_MASKING_ENABLED is ON, vessel names ([VESSEL]), shipyard names ([SHIPYARD]), drawing numbers ([DRAWING]), emails ([EMAIL]), and phone numbers ([PHONE]) are auto-replaced. 7 major Korean shipyard patterns built-in.

AI 사용 감사 로그

AI Usage Audit Log

AI_AUDIT_ENABLED ON 시 모든 AI 호출(성공/차단)이 D1에 기록됩니다. 프롬프트 해시(SHA-256), 모델명, 응답 시간, 사용자 ID 포함.

With AI_AUDIT_ENABLED ON, every AI call (success/blocked) is logged in D1 with prompt hash (SHA-256), model name, response time, and user ID.

5분 캐시로 성능 보호

5-Min Cache for Performance

AI 게이트 체크 결과는 Worker 메모리에 5분간 캐시됩니다. D1 읽기 과부하 없이 고빈도 AI 호출에서도 빠른 응답 유지.

AI gate check results are cached in Worker memory for 5 minutes. Fast responses even under high-frequency AI calls without overloading D1.

AI 관련 엔드포인트 10개(groq, openrouter, parallel, web-search, video-summary, pdf-vision, assist, schema-detect, node-consensus, graph-diagnose) 모두 게이트 적용. 게이트 차단 시 HTTP 403 + code: 'AI_DISABLED' + level: 'system'|'org'|'user' 반환. All 10 AI endpoints (groq, openrouter, parallel, web-search, video-summary, pdf-vision, assist, schema-detect, node-consensus, graph-diagnose) have the gate applied. On block: HTTP 403 + code: 'AI_DISABLED' + level: 'system'|'org'|'user'.
22 — 드럼 관리 고급
22 — Drum Manager Advanced

S1001 표준 기반 드럼 할당 + 락 시스템

S1001-Standard Drum Assignment + Lock System

QUANTITY → Drum 탭은 S1001 표준 포맷으로 케이블 타입별 드럼을 자동 배정합니다. 확정(Lock) 후 수정 방지 시스템과 드럼 생성 옵션 모달로 조달팀 실무에 즉시 활용 가능합니다.

The QUANTITY → Drum tab auto-assigns drums per cable type in S1001 standard format. A Lock-after-confirm system and Drum Options Modal make it immediately usable for procurement teams.

설정 패널 (기본 펼침)

Settings Panel (Default Open)

마진율(%), 타입별 드럼 길이(m) 설정. 설정값은 localStorage에 자동 저장. 드럼 길이는 OD 기반 자동 계산 또는 사용자 직접 입력 우선.

Set margin rate (%) and drum length per type (m). Auto-saved to localStorage. Drum length: auto from OD or user input takes priority.

드럼 락 시스템

Drum Lock System

확정 버튼 클릭 → 모든 드럼 잠금(D1 영속). 잠긴 드럼은 수정 불가. 잠금 해제 요청 → 관리자 승인 필요. 재설정(Reset) 버튼으로 잠금 해제.

Clicking Confirm locks all drums (persisted in D1). Locked drums cannot be modified. Unlock request → requires admin approval. Reset button releases lock.

드럼 생성 옵션 모달

Drum Generation Options Modal

알고리즘(FFD/BFD/가중치 기반), 최대 드럼 길이, 마진율, 타입별 처리를 세밀하게 조정. "드럼 생성" 버튼 클릭 시 모달 팝업.

Fine-tune algorithm (FFD/BFD/weight-based), max drum length, margin rate, per-type handling. Opens via the "Generate Drums" button.

S1001 Excel 내보내기

S1001 Excel Export

조선소 표준 S1001 드럼 목록 포맷으로 Excel 다운로드. 드럼 요약(타입별 드럼 수, 총 길이)과 드럼별 케이블 상세가 분리된 시트로 제공.

Download as Excel in shipyard-standard S1001 drum list format. Drum summary (count/total length per type) and per-drum cable detail in separate sheets.

드럼 설정 파일 업로드

Drum Settings File Upload

이전 프로젝트의 드럼 설정(JSON)을 불러와 동일한 설정을 재사용. 같은 선종의 프로젝트에서 설정 복사 시 활용.

Import drum settings (JSON) from a previous project for reuse. Useful when copying settings across same vessel-type projects.

타입별 + 드럼별 뷰

Per-Type + Per-Drum View

좌측: 케이블 타입별 드럼 그룹(펼침/접기). 우측: 선택 드럼의 케이블 상세 목록. "타입 요약 보기" 버튼으로 타입별 OD·중량·개수 한눈에.

Left: cable type grouped drums (expand/collapse). Right: selected drum's cable detail list. "Type Summary" button shows OD/weight/count per type at a glance.

드럼 생성 알고리즘 비교

Drum Generation Algorithm Comparison

알고리즘Algorithm 특징Characteristic 적합 상황Best For
FFD (First Fit Decreasing)긴 케이블부터 배치. 드럼 수 최소화.Longest cables first. Minimizes drum count.드럼 수 최적화 우선Minimize drum count
BFD (Best Fit Decreasing)잔여 공간이 가장 적은 드럼에 우선 배치. 잔량 낭비 최소.Pack into drum with least remaining space. Minimize waste.잔량 최소화 우선Minimize leftover
가중치 기반Weight-based중량 균형 우선. 포설 작업자 이동 하중 균등화.Prioritizes weight balance. Evens worker load.포설 현장 작업 효율Field installation efficiency
3중 안전망 드럼 표시3-Layer Drum Display Safety Net
드럼 번호는 (1) Zustand 스토어 → (2) D1 API → (3) localStorage 순으로 폴백하여 네트워크 불안정 환경에서도 항상 표시됩니다. Drum numbers fall back through (1) Zustand store → (2) D1 API → (3) localStorage, ensuring they always display even in unstable network environments.