> For the complete documentation index, see [llms.txt](https://kopens.gitbook.io/plantpulse-platform/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kopens.gitbook.io/plantpulse-platform/user/connection.md).

# 연결 관리

## 목차

* [개요](#overview)
* [화면 구성 — 3개 하위 메뉴](#layout)
* [프로토콜 화면 (`/connect/index`)](#protocol)
  * [데이터소스 카테고리](#protocol-categories)
* [상태 화면 (`/connect/status`)](#status-screen)
  * [상단 도구](#status-top)
  * [좌측 — 통계 차트와 이력](#status-left)
  * [우측 — 데이터소스 카드 그리드](#status-right)
* [데이터소스 상세 화면 (`/connect/view`)](#datasource-view)
  * [좌측 ① 연결 기본 정보 + 펼치기](#dsv-info)
  * [좌측 ② 연결 통계 (지연·상태 5종)](#dsv-stats)
  * [우측 ① 연결 상태 타임라인 + LIVE 도트](#dsv-timeline)
  * [우측 ② 포인트 수신 24시간 차트](#dsv-points)
  * [우측 ③ 연결된 태그 목록](#dsv-tags)
* [엣지 게이트웨이 화면 (`/edge/index`)](#edge)
  * [목록 테이블 (16컬럼)](#edge-table)
  * [엣지 도움말 박스](#edge-help)
* [엣지 상세 화면 (`/edge/view`)](#edge-view)
  * [상단 페이지 헤더와 새로고침](#edge-view-header)
  * [좌측 — 기본 정보·호스트·네트워크·보안 4 패널](#edge-view-left)
  * [우측 ① 시스템 자원 게이지 + 앱 재시작](#edge-view-sys)
  * [우측 ② PLC / 수집 통계 (8칸 stat-box)](#edge-view-plc)
  * [우측 ③ OPC 상태 + 5종 요약 칩 + 수집 시작/중지](#edge-view-opc)
  * [우측 ④ 도커 컨테이너 (원격 배포·시작·중지·로그·삭제)](#edge-view-docker)
  * [시스템 리부트·앱 재시작 안전 절차](#edge-view-system)
* [활용 시나리오](#use-cases)
* [자주 묻는 질문](#faq)
* [관련 화면](#related)

***

## 개요 <a href="#overview" id="overview"></a>

Connectivity 그룹은 외부 시스템(현장 PLC·OPC 서버·파일·외부 DB·MQTT/Kafka 토픽 등)으로부터 데이터를 수집하기 위한 연결을 등록·점검합니다. 메뉴는 다음 3개 하위 화면으로 구성됩니다.

| 하위 메뉴    | 내부 URL            | 용도                                  |
| -------- | ----------------- | ----------------------------------- |
| **프로토콜** | `/connect/index`  | 새 연결 등록 — 데이터소스 종류별 추가 진입점          |
| **상태**   | `/connect/status` | 운영 중 연결의 통신 상태·지연·검증 실패 모니터링        |
| **엣지**   | `/edge/index`     | 현장 엣지 게이트웨이 디바이스의 시스템 상태와 PLC 수집 통계 |

***

## 화면 구성 — 3개 하위 메뉴 <a href="#layout" id="layout"></a>

| 화면       | 주된 사용자  | 한줄 요약                                         |
| -------- | ------- | --------------------------------------------- |
| **프로토콜** | 시스템 관리자 | 새 데이터소스(엣지/OPC/PLC/Modbus/외부 DB/파일·API) 추가    |
| **상태**   | 운영자     | 연결 정상/지연/이상 트렌드와 24시간 단절·지연·검증 실패 이력          |
| **엣지**   | 운영자     | 엣지 게이트웨이의 OS 상태(CPU/메모리/디스크/네트워크) + PLC 수집 통계 |

***

## 프로토콜 화면 (`/connect/index`) <a href="#protocol" id="protocol"></a>

상단에 안내 박스가 표시됩니다.

> 🌐 **산업용 프로토콜 및 기타 데이터소스에 대한 연결** \[추천] 플랜트펄스 엣지 게이트웨이와는 설정 없이 완벽하게 통합됩니다. 산업에서 많이 사용하는 OPC 와 PLC, Modbus 프로토콜 및 데이터베이스에 연결하여 데이터를 수집할 수 있습니다. 또한 추가적으로 제공되는 클라이언트 API 를 통해 MQTT, STOMP, KAFKA, HTTP 에서도 수집할 수 있습니다. (OPC는 자동으로 연결, 그 외는 프로토콜에 해당하는 엣지 게이트웨이 또는 콜렉터를 사용)

### 데이터소스 카테고리 <a href="#protocol-categories" id="protocol-categories"></a>

페이지는 카테고리별로 큰 섹션을 나누고, 각 섹션에 데이터소스 종류의 아이콘 카드(연결하기 링크 포함)가 격자로 표시됩니다.

| 섹션                            | 표시 카드                                 | 추가 링크                        |
| ----------------------------- | ------------------------------------- | ---------------------------- |
| **엣지 게이트웨이 / 파일 / API** `[N]` | 엣지 게이트웨이·MQTT·REST API·Excel·CSV (5종) | `/connect/file/add`          |
| **OPC** `[N]`                 | OPC 표준 데이터소스 (자동 연결)                  | `/connect/opc/index` 목록      |
| **PLC** `[N]`                 | PLC 통신 (제조사별 프로토콜)                    | `/connect/plc/index` 목록      |
| **Modbus** `[N]`              | Modbus TCP/RTU                        | `/connect/modbus/index` 목록   |
| **데이터베이스** `[N]`              | 외부 DB 폴링                              | `/connect/database/index` 목록 |

각 섹션의 라벨 옆 `[N]` 는 현재 등록된 연결 수입니다. 우측 "목록보기" 링크로 카테고리별 목록 화면으로 이동합니다.

### OPC 목록 화면 (`/connect/opc/index`)

데이터소스 카테고리의 **OPC** 행에서 "목록보기" 또는 사이드 메뉴를 통해 진입합니다. 등록된 모든 OPC 서버 연결의 운영 상태를 12 컬럼 표로 한눈에 봅니다.

| 컬럼                | 폭     | 표시                                                                                                      |
| ----------------- | ----- | ------------------------------------------------------------------------------------------------------- |
| **No.**           | 60px  | 행 번호                                                                                                    |
| **연결 ID**         | 100px | OPC 도메인 뱃지                                                                                              |
| **OPC 명**         | 250px | 표시명                                                                                                     |
| **상태**            | 70px  | 풀컬러 그라디언트 상태 도트 (정상/지연/이상/끊김/미상)                                                                        |
| **프로토콜 타입**       | 60px  | **다크 뱃지** — `protocol-badge-opc-ua` (네이비) / `protocol-badge-opc-da` (보라). 검은 배경 + 흰 글자로 다른 컬럼 뱃지와 즉시 구분 |
| **프로그램 ID \| IP** | 자동    | OPC 서버의 ProgID 또는 IP 주소                                                                                 |
| **시작**            | 60px  | ▶ 수집 시작 / ◼ 중지 (현재 상태에 따라 표시)                                                                           |
| **수집 시작시간**       | 120px | 수집을 시작한 시각 (`scan_start_time`)                                                                          |
| **연결된 태그수**       | 70px  | 그 OPC 에 매핑된 태그 수                                                                                        |
| **전체 / 수신 포인트**   | 80px  | 누적 / 오늘 수신 포인트 건수                                                                                       |
| **에러**            | 60px  | 누적 에러 건수 (빨강 강조)                                                                                        |
| **액션**            | 80px  | 🔧 편집 / 🗑 삭제 (ADMIN/MANAGER)                                                                           |

> 표 헤더 우측의 ↻ 아이콘 버튼으로 새로고침. 도움말 박스가 화면 하단에 표시되어 OPC 연결 권장 사항(연결당 1,000 태그 이하 등)을 안내합니다.

### 새 연결 추가

각 카드의 **연결하기** 링크를 클릭하면 해당 데이터소스 종류의 등록 폼이 열립니다. 폼은 데이터소스에 따라 입력 항목이 다르며 공통적으로 다음을 입력합니다.

| 공통 입력            | 설명                                  |
| ---------------- | ----------------------------------- |
| **사이트**          | 연결을 등록할 사이트 선택                      |
| **OPC ID 또는 이름** | 도메인 식별자 (영문/숫자/`_` 만 허용 권장)         |
| **연결 정보**        | 호스트/포트, 인증, 토픽, 파일 경로 등 (데이터소스별 상이) |
| **수집 주기·옵션**     | 폴링 주기, 시작/종료 시간 등                   |
| **설명**           | 메모                                  |

> 등록 후 [상태](#status-screen) 화면에서 실제 데이터 인입을 확인하시기 전까지는 단순히 메타만 등록된 상태입니다. 수집이 시작되면 [상태](#status-screen) 의 카드에 "정상연결" 뱃지가 나타납니다.

***

## 상태 화면 (`/connect/status`) <a href="#status-screen" id="status-screen"></a>

운영 중 모든 데이터소스 연결의 상태를 한 화면에서 모니터링합니다.

### 상단 도구 <a href="#status-top" id="status-top"></a>

```
📡 연결 상태  [총 N 개의 데이터소스 연결]                  [사이트 ▼] [검색] [↻]
```

| 컨트롤                     | 폭       | 설명                                |
| ----------------------- | ------- | --------------------------------- |
| **사이트 셀렉터** (`site_id`) | 200px   | 전체 사이트 + 등록된 사이트 목록 (`사이트명 [설명]`) |
| **검색**                  | 빨강 + 🔍 | 사이트 필터 적용 후 카드 갱신                 |
| **새로고침**                | 빨강 + ↻  | 화면 새로고침                           |

### 좌측 — 통계 차트와 이력 <a href="#status-left" id="status-left"></a>

좌측 col-lg-2 영역에 5개 차트와 3개 이력 패널이 세로로 배치됩니다.

#### 1) 통신 연결 분포 차트 (`connection_stat_chart`, 200px)

현재 등록된 모든 연결의 5단계 상태(정상연결·연결지연·연결이상·연결끊김·연결안됨) 분포를 도넛으로 표시.

#### 2) 통신 연결 상태 트렌드 \[오늘] (`connection_trend_chart`, 150px)

오늘 0시부터 시간대별 정상/이상 연결 수의 추이.

| 색상     | 의미   | 임계값           |
| ------ | ---- | ------------- |
| 🟢 녹색  | 정상연결 | 10분 이내 데이터 수신 |
| 🟠 주황  | 연결지연 | 10분 이상 미수신    |
| 🔴 빨강  | 연결이상 | 1시간 이상 미수신    |
| 🟥 진빨강 | 연결끊김 | 24시간 이상 미수신   |
| ⬜ 회색   | 연결안됨 | 데이터 수신 이력 없음  |

> ℹ️ 헤더의 정보 아이콘에 마우스를 올리면 위 5단계 기준이 툴팁으로 표시됩니다.

#### 3) 통신 지연 상태 트렌드 \[오늘] (`latency_trend_chart`, 150px)

| 색상    | 의미   | 임계값           |
| ----- | ---- | ------------- |
| 🟢 녹색 | 정상   | 평균 레이턴시 1초 미만 |
| 🟠 주황 | 지연   | 1초 \~ 10초     |
| 🔴 빨강 | 심각지연 | 10초 이상        |

#### 4) 포인트 검증 실패 트렌드 \[오늘] (`point_fail_trend_chart`, 150px)

수신된 데이터 포인트의 타입·범위·유효성 검증에 실패한 건수를 시간 단위로 집계.

#### 5) 최근 연결 끊김 \[최근 24시간] (`connection_status_history`, 200px 스크롤)

24시간 동안 연결이 끊긴 데이터소스 이력. 시간 역순 목록 — 데이터소스 ID, 끊긴 시각, 마지막 정상 시각.

#### 6) 최근 수신 지연 \[최근 24시간] (`connection_latency_history`, 200px 스크롤)

24시간 동안 응답 지연이 발생한 데이터소스 이력.

#### 7) 최근 포인트 검증 실패 \[최근 24시간] (`point_validation_status_history`, 400px 스크롤)

24시간 동안 검증 실패가 발생한 포인트 이력.

### 우측 — 데이터소스 카드 그리드 <a href="#status-right" id="status-right"></a>

우측 col-lg-10 영역에 카테고리별로 데이터소스 카드가 격자로 표시됩니다.

#### 카드 카테고리 (위부터)

| 섹션 헤더                         | 표시                             |
| ----------------------------- | ------------------------------ |
| **엣지 게이트웨이 / 파일 / API** `[N]` | FILE 타입 데이터소스 (엣지 GW·파일·API 등) |
| **PLC** `[N]`                 | PLC 데이터소스                      |
| (이하 OPC·Modbus·외부 DB 등)       | 등록된 데이터소스 종류별                  |

#### 카드 구성 (`opc_obj`)

```
┌─────────────────────┐
│ [SUB_TYPE]           │ ← 작은 글씨
│  OPC_ID              │ ← ID
│  ────────────────    │
│  현재 상태값(_mm)     │ ← 매분 갱신 상태 표시
└─────────────────────┘
```

| 영역     | 표시                                         |
| ------ | ------------------------------------------ |
| **상단** | 데이터소스 서브타입 (예: FILE, MQTT, REST\_API)      |
| **중간** | 데이터소스 ID — 잘림 시 ellipsis(`...`)            |
| **하단** | 매분 상태 표시 (`${opc_id}_mm`) — 색상이 5단계 상태에 매핑 |

> 카드 클릭 시 그 데이터소스의 상세 화면(`/connect/view?opc_id=...`)으로 이동해 수집 이력·태그 목록·로그를 확인할 수 있습니다. hover 시 카드의 설명이 툴팁으로 표시됩니다.

#### 빈 상태 안내

해당 카테고리에 데이터소스가 등록되지 않은 경우:

> 연결된 에이전트 없음

***

## 데이터소스 상세 화면 (`/connect/view`) <a href="#datasource-view" id="datasource-view"></a>

[상태 화면](#status-screen) 의 데이터소스 카드를 클릭하면 진입합니다. 한 OPC/PLC/DB 연결의 모든 운영 정보를 한 화면에 모은 뷰입니다.

### 페이지 헤더

```
📶 프로토콜 연결 보기                  [📅 날짜 선택 ▼] [날짜 이동 →] [← 목록] [↻]
   {site_name} / {opc_name}
```

| 컨트롤         | 동작                    |
| ----------- | --------------------- |
| **날짜 선택**   | 캘린더 — 다른 날짜의 연결 상태 조회 |
| **날짜 이동 →** | 선택한 날짜로 다시 로드         |
| **← 목록**    | 상태 화면으로 복귀            |
| **↻**       | 화면 새로고침               |

### 좌측 ① 연결 기본 정보 + 펼치기 <a href="#dsv-info" id="dsv-info"></a>

패널 헤더 우측에 두 버튼:

| 버튼                            | 동작                  |
| ----------------------------- | ------------------- |
| **⌄ 펼치기** (`viewOPCDetail()`) | 사이트 정보 섹션 토글 표시     |
| **⚙ 연결 설정** (ADMIN/MANAGER)   | 그 데이터소스의 편집 양식으로 이동 |

#### 기본 정보 (ds-dl)

| 항목        | 표시             |
| --------- | -------------- |
| **연결 ID** | OPC 도메인 뱃지     |
| **연결 명**  | 데이터소스 표시명      |
| **설명**    | 메모             |
| **등록일**   | 등록 시각 (모노스페이스) |

#### 프로토콜 연결 정보 (ds-dl)

| 항목               | 표시                                             |
| ---------------- | ---------------------------------------------- |
| **연결 타입**        | OPC\_UA / OPC\_DA / PLC / MODBUS / DB / FILE 등 |
| **하위 타입**        | 제조사·세부 프로토콜 (예: SIEMENS\_S7, MITSUBISHI\_MC)   |
| **에이전트 IP / 포트** | 에이전트(엣지)의 IP·포트 (모노스페이스)                       |

#### 사이트 정보 (펼치기 시만)

| 항목         | 표시         |
| ---------- | ---------- |
| **사이트 ID** | 사이트 도메인 뱃지 |
| **사이트 명**  | 사이트 표시명    |

### 좌측 ② 연결 통계 (지연·상태 5종) <a href="#dsv-stats" id="dsv-stats"></a>

#### 오늘 최고 지연 트렌드 (3 칸)

| 칸      | 표시                      |
| ------ | ----------------------- |
| **최저** | 가장 빠른 응답 지연 (ms, 콤마 구분) |
| **평균** | 평균 응답 지연                |
| **최고** | 가장 느린 응답 지연             |

아래에 24시간 지연 추이 라인 차트 (`latency_24hh`) — 평소와 다른 스파이크가 있으면 그 시각을 [상태](#status-screen) 화면에서 추가 확인.

#### 연결이상 건수

읽기 전용 입력란에 오늘 누적 "연결이상" 카운트 표시.

#### 상태 통계 5-셀 그리드

```
┌─🟢 정상─┐ ┌─🟠 경고─┐ ┌─🔴 이상─┐ ┌─⬛ 끊김─┐ ┌─⚪ 미상─┐
│  12,453│ │    23  │ │    5   │ │    1   │ │    0   │
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘
```

다섯 색상의 셀에 각각 누적 카운트가 큰 숫자로 표시되며, 아래에 작은 도넛 차트 (`connection_priority_count_chart`) 가 함께 표시됩니다.

### 우측 ① 연결 상태 타임라인 + LIVE 도트 <a href="#dsv-timeline" id="dsv-timeline"></a>

패널 헤더 보조 텍스트: "오늘 연결/끊김 타임라인 \[{status\_txt}]". 헤더 우측에 ⓘ 정보 아이콘 — 호버 시 안내 툴팁.

#### 좌측 — 현재 상태 카드 (live)

큰 아이콘 + 라벨 형태의 상태 카드 (`last_connection_status`).

| 아이콘 + 라벨                | 의미            | 도트 토글           |
| ----------------------- | ------------- | --------------- |
| ❓ **연결안됨** (`is-mute`)  | 데이터 수신 이력 없음  | ⚪ 회색            |
| 🟢 **정상연결** (`is-ok`)   | 10분 이내 데이터 수신 | 🟢 LIVE 도트 (펄스) |
| 🟠 **연결지연** (`is-warn`) | 10분\~1시간 미수신  | 🟠              |
| 🔴 **연결이상** (`is-err`)  | 1\~24시간 미수신   | 🔴              |
| ⬛ **연결끊김** (`is-disc`)  | 24시간 이상 미수신   | ⬛               |

> 🟢 LIVE 도트가 펄스로 깜빡이면 데이터가 실시간으로 들어오고 있는 상태입니다. 호버 시 마지막 수신 시각이 툴팁으로 표시됩니다.

#### 우측 — 24시간 타임라인 막대 (`opc_connection_timeline`)

24시간을 가로 막대로 표시하며 각 시간대의 연결 상태가 5가지 색으로 칠해집니다. 막대에 마우스를 올리면 그 시각의 상태가 툴팁으로 표시됩니다.

### 우측 ② 포인트 수신 24시간 차트 <a href="#dsv-points" id="dsv-points"></a>

패널 헤더 보조: "오늘 24시간 분당 수신 건수".

분당 포인트 수신 건수 라인 차트 (`opc_point_trend_24h`). 평소 영업시간대 대비 급락이 보이면 해당 시각의 데이터 인입이 끊긴 상태입니다. 로딩 중에는 "로딩중..." 안내가 중앙에 표시됩니다.

### 우측 ③ 연결된 태그 목록 <a href="#dsv-tags" id="dsv-tags"></a>

이 데이터소스에 매핑된 태그들의 실시간 값 목록 (7 컬럼).

| 컬럼              | 폭     | 표시                                                                 |
| --------------- | ----- | ------------------------------------------------------------------ |
| **태그 ID**       | 80px  | 도메인 뱃지                                                             |
| **태그 명**        | 350px | 태그 표시명                                                             |
| **데이터 타입**      | 100px | INT/FLOAT/STRING/BOOL 등                                            |
| **현재 값**        | 자동    | 마지막 수신 값 (품질 색상 뱃지)                                                |
| **마지막 업데이트 시간** | 자동    | 수신 시각                                                              |
| **지연 \[MS]**    | 자동    | 평균 응답 지연                                                           |
| **액션**          | 50px  | 🔍 → 그 [태그 상세](/plantpulse-platform/user/factory.md#tag-view) 로 이동 |

> 표는 WebSocket 으로 실시간 갱신됩니다. 값이 깜빡이지 않으면 그 태그의 수신이 끊긴 것입니다.

***

## 엣지 게이트웨이 화면 (`/edge/index`) <a href="#edge" id="edge"></a>

현장에 설치된 엣지 게이트웨이 디바이스의 시스템 상태와 PLC 수집 통계를 한 화면에서 모니터링합니다.

### 상단 도구

```
📡 엣지 게이트웨이                              [사이트 ▼] [검색] [↻]
```

| 컨트롤                     | 폭       | 설명                           |
| ----------------------- | ------- | ---------------------------- |
| **사이트 셀렉터** (`site_id`) | 200px   | 전체 사이트 + 등록된 사이트             |
| **검색**                  | 빨강 + 🔍 | 사이트 필터 적용                    |
| **새로고침**                | 빨강 + ↻  | 화면 새로고침 (10초마다 자동 갱신도 함께 동작) |

### 목록 테이블 (16컬럼) <a href="#edge-table" id="edge-table"></a>

```
┌──────────────────────────────── 목록 ────────────────────────────────────┐
│상태│EDGE_ID│O/S 호스트명│버전│CPU│메모리│디스크│NET_1│NET_2│WIFI│VPN│PLC 연결정상│PLC 연결끊김│최고지연[MS]│수신 포인트 건수│액션│
└─────────────────────────────────────────────────────────────────────────┘
```

| 컬럼              | 폭     | 표시                                 |
| --------------- | ----- | ---------------------------------- |
| **상태**          | 60px  | 정상/경고/연결끊김 아이콘 뱃지 (🔌 연결끊김 / ⚠ 경고) |
| **EDGE\_ID**    | 150px | 엣지 디바이스 식별자                        |
| **O/S 호스트명**    | 자동    | 운영체제·호스트명                          |
| **버전**          | 80px  | 엣지 소프트웨어 버전                        |
| **CPU**         | 50px  | CPU 사용률 (%)                        |
| **메모리**         | 50px  | 메모리 사용률 (%)                        |
| **디스크**         | 50px  | 디스크 사용률 (%)                        |
| **NET\_1**      | 110px | 1차 네트워크 인터페이스 상태                   |
| **NET\_2**      | 110px | 2차 네트워크 인터페이스 상태                   |
| **WIFI**        | 110px | 무선 네트워크 상태                         |
| **VPN**         | 110px | VPN 연결 상태                          |
| **PLC 연결정상**    | 60px  | 정상 PLC 연결 수                        |
| **PLC 연결끊김**    | 60px  | 끊긴 PLC 연결 수                        |
| **최고 지연 \[MS]** | 60px  | 최근 윈도우 내 최대 응답 지연 (밀리초)            |
| **수신된 포인트 건수**  | 100px | 누적 수신 데이터 포인트 수                    |
| **액션**          | 60px  | 상세 보기 버튼                           |

### 엣지 도움말 박스 <a href="#edge-help" id="edge-help"></a>

페이지 하단에 다음 운영 가이드가 표시됩니다.

> ❓ **엣지 게이트웨이 도움말** 엣지 게이트웨이 메뉴에서는 엣지 게이트웨이의 연결 및 PLC 데이터 수집 상태를 확인하실 수 있습니다.
>
> * 상태가 **연결끊김** \[🔌] 으로 표시되는 엣지 게이트웨이는 반드시 물리적 환경, 네트워크 및 엣지 O/S 를 체크하십시오.
> * 상태가 **경고** \[⚠] 로 표시되는 엣지 게이트웨이는 수집 시 S/W 오류 건수가 존재하는 상황으로, 엣지에 접속해서 문제를 해결하십시오.
> * **네트워크 최고 지연이 10초 이상**인 엣지는 네트워크나 엣지 S/W에 이상이 있을 수 있습니다.
> * **CPU/메모리/디스크가 80% 이상** 사용될 때는 엣지 게이트웨이를 확인 후 자원을 정리하십시오.
> * 엣지 게이트웨이의 **상태는 매 10초마다 업데이트**됩니다.

### 운영 절차 (이상 발견 시)

1. 상태가 🔌(연결끊김) 인 엣지 → 현장 점검 (전원·네트워크·하드웨어)
2. CPU/메모리/디스크 80% 이상 → 엣지에 접속해 불필요 프로세스/로그 정리
3. 최고 지연이 10초 이상 → 네트워크 경로 확인 (라우터·VPN)
4. PLC 연결끊김 컬럼이 0이 아님 → 그 엣지의 PLC 케이블·설정 점검

***

## 엣지 상세 화면 (`/edge/view`) <a href="#edge-view" id="edge-view"></a>

엣지 목록의 EDGE\_ID 또는 "액션" 컬럼을 클릭하면 진입하는 단일 엣지의 상세 화면입니다. 한 화면에서 다음을 처리할 수 있습니다.

* 등록 메타데이터 / 호스트 / 네트워크 / 보안 키 확인
* CPU·메모리·디스크 실시간 게이지
* PLC 수집 통계 8개 지표
* 엣지에 연결된 OPC 서버 목록과 수집 시작/중지
* 엣지 위에 떠있는 도커 컨테이너 목록과 시작·중지·재시작·로그·삭제
* 신규 컨테이너 원격 배포
* 엣지 애플리케이션 재시작 및 엣지 호스트 OS 리부트

> ⚠️ 이 화면의 모든 제어 명령은 **현장 엣지 디바이스**에 직접 실행됩니다. 실서비스 중인 엣지는 OPC 수집 중지·컨테이너 삭제·시스템 리부트 시 수집 데이터가 끊깁니다. 반드시 정비 시간대에 수행하세요.

### 상단 페이지 헤더와 새로고침 <a href="#edge-view-header" id="edge-view-header"></a>

```
🛜 ${엣지명}                            [← 목록] [↻ 새로고침]
   사이트: ${site_id} · 엣지 ID: ${edge_id} · ${설명}
```

| 컨트롤        | 동작                             |
| ---------- | ------------------------------ |
| **← 목록**   | `/edge/index` 로 복귀             |
| **↻ 새로고침** | 페이지 전체 새로고침 (게이지·통계·OPC·도커 동시) |

화면이 열린 후에는 패널별로 자동 갱신됩니다.

| 패널                | 자동 갱신 주기 |
| ----------------- | -------- |
| 시스템 자원 게이지·PLC 통계 | **10초**  |
| OPC 상태 목록·요약 칩    | **8초**   |
| 도커 컨테이너 목록        | **5초**   |

### 좌측 — 기본 정보·호스트·네트워크·보안 4 패널 <a href="#edge-view-left" id="edge-view-left"></a>

좌측 col-lg-3 영역에 4개 패널이 세로로 쌓입니다. 모두 정의 리스트(label / value) 형식입니다.

#### ① 기본 정보 — 시스템 리부트 버튼 포함

| 항목        | 의미                       |
| --------- | ------------------------ |
| **엣지 ID** | 도메인 ID 뱃지 (EDGE 도메인 색상)  |
| **이름**    | `edge_name`              |
| **사이트**   | 사이트 ID (도메인 뱃지)          |
| **역할**    | `role` (없으면 `-`)         |
| **상태**    | 마스터 테이블의 status 값        |
| **설명**    | 메모                       |
| **등록일**   | 엣지가 처음 등록된 일시            |
| **최근 상태** | 마지막으로 heartbeat 가 수신된 일시 |

패널 헤더 우측에 **🔴 빨간색 ⏻ 전원 아이콘 버튼** — 클릭하면 엣지 호스트 OS 리부트 (아래 [안전 절차](#edge-view-system) 참고).

#### ② 호스트

| 항목     | 의미                             |
| ------ | ------------------------------ |
| 호스트명   | 운영체제의 hostname                 |
| 버전     | 엣지 소프트웨어 빌드 버전                 |
| 빌드일    | 빌드된 날짜                         |
| CPU 코어 | 코어 수                           |
| 스레드    | 스레드 수                          |
| 온도     | CPU 온도 (°C) — 보드에 온도 센서가 없으면 0 |

#### ③ 네트워크

VPN / NET 1 / NET 2 / WiFi / 관리망 / GSM 6개 인터페이스의 IP. 미설정 시 `-`.

| 항목         | 용도                     |
| ---------- | ---------------------- |
| **VPN IP** | 본사 ↔ 현장 VPN 터널의 엣지측 주소 |
| **NET 1**  | 1차 LAN                 |
| **NET 2**  | 2차 LAN                 |
| **WiFi**   | 무선                     |
| **관리망**    | OOB 관리망                |
| **GSM**    | LTE/3G 백업 회선           |

#### ④ 보안

| 항목          | 표시                                                  |
| ----------- | --------------------------------------------------- |
| **API Key** | 엣지가 서버에 인증할 때 사용하는 키 — **앞 4자 + `****` + 뒷 4자** 마스킹 |

> Flow [REST 노드의 X-API-Key](/plantpulse-platform/user/flow.md) 와 동일한 키 — 이 화면에서 마스킹 형태만 확인할 수 있고, 실제 키 값은 표시되지 않습니다.

### 우측 ① 시스템 자원 게이지 + 앱 재시작 <a href="#edge-view-sys" id="edge-view-sys"></a>

패널 헤더에 ⓘ "CPU · 메모리 · 디스크 사용률 (실시간)" 라벨, 우측에 **앱 재시작** 버튼.

#### 상태 라인 (state-row)

게이지 위에 한줄 상태 메시지가 표시됩니다.

| 표시                     | 의미                                       |
| ---------------------- | ---------------------------------------- |
| `🟢 엣지 LIVE — 정상 응답 중` | 엣지가 ping 에 응답                            |
| `🔴 엣지 OFFLINE`        | edge 의 `/api/v1/monitoring` 이 ping=false |
| `🔴 엣지 UNREACHABLE`    | HTTP 요청 자체가 실패 (네트워크 단절)                 |

#### 게이지 3개 (각 140px 도넛)

| 게이지         | 단위 | 색상 임계                         |
| ----------- | -- | ----------------------------- |
| **CPU 사용률** | %  | < 80 녹색 · 80\~89 주황 · ≥ 90 빨강 |
| **메모리 사용률** | %  | 동일                            |
| **디스크 사용률** | %  | 동일                            |

값은 소수 1자리까지 표시됩니다 (예: `73.4%`).

#### 앱 재시작 버튼

엣지 애플리케이션(데몬)만 재시작합니다. 호스트 OS 는 영향 없음.

> 🔄 누르면 확인 다이얼로그 → "재시작" → 약 3초 뒤 엣지 프로세스가 자체 재시작되며 약 10초 후 복귀합니다. 그 동안 게이지·통계는 임시로 `-` 표시.

### 우측 ② PLC / 수집 통계 (8칸 stat-box) <a href="#edge-view-plc" id="edge-view-plc"></a>

8개 통계 박스가 격자로 배치됩니다.

| 박스         | 단위  | 의미                 | 강조     |
| ---------- | --- | ------------------ | ------ |
| **연결 정상**  | 건   | PLC 연결이 살아있는 수     | 🟢 ok  |
| **연결 끊김**  | 건   | PLC 연결이 끊긴 수       | 🔴 err |
| **읽기 성공**  | 건   | PLC 폴링 성공 누적 카운터   | -      |
| **읽기 실패**  | 건   | PLC 폴링 실패 누적 카운터   | 🔴 err |
| **전송 포인트** | 건   | 서버로 전송된 누적 포인트 수   | -      |
| **MPS**    | 건/초 | 메시지 처리 속도 (초당 포인트) | -      |
| **평균 지연**  | MS  | 최근 윈도우의 평균 응답 지연   | -      |
| **최고 지연**  | MS  | 최근 윈도우의 최대 응답 지연   | -      |

> 카운터(읽기 성공·실패·전송 포인트)는 엣지 프로세스가 재시작되면 0부터 다시 시작됩니다. 절대값이 아닌 **추세**로 해석하세요.

### 우측 ③ OPC 상태 + 5종 요약 칩 + 수집 시작/중지 <a href="#edge-view-opc" id="edge-view-opc"></a>

패널 헤더에 "엣지에 연결된 OPC 서버 목록과 수집 상태".

#### 5종 요약 칩 (opc-chip-v2)

칩 한 개는 아이콘 + 큰 숫자 + 라벨로 구성됩니다.

| 칩       | 아이콘 | 의미                                 | 색상    |
| ------- | --- | ---------------------------------- | ----- |
| **등록**  | ☰   | 이 엣지에 매핑된 OPC 서버 총 개수              | 회색    |
| **연결**  | ✓   | `connection_status = CONNECTED` 개수 | 🟢 녹색 |
| **수집중** | ≋   | 연결 정상 + `scan_status = START`      | 🟢 녹색 |
| **중지**  | ⏸   | `scan_status = STOP` 개수            | 회색    |
| **끊김**  | 🔗∕ | `connection_status ≠ CONNECTED` 개수 | 🔴 빨강 |

#### 목록 테이블 (7컬럼)

| 컬럼          | 폭     | 표시                                            |
| ----------- | ----- | --------------------------------------------- |
| **OPC ID**  | 160px | 🔌 + ID (클릭 시 `/connect/opc/edit/{id}` 편집 화면) |
| **이름**      | 자동    | `opc_name`                                    |
| **타입**      | 80px  | OPC UA / OPC DA 뱃지                            |
| **에이전트 IP** | 140px | OPC 에이전트 IP (모노스페이스)                          |
| **연결**      | 90px  | 🟢 CONNECTED / 🔴 그 외 — 도트로 표시                |
| **수집**      | 90px  | 🟢 START / 🟡 그 외 / ⚫ STOP — 도트               |
| **제어**      | 160px | 액션 버튼들 (아래)                                   |

#### 제어 버튼

| 상태 조건                 | 표시 버튼          | 동작                                                           |
| --------------------- | -------------- | ------------------------------------------------------------ |
| `scan_status ≠ START` | 🟢 ▶ **수집 시작** | 확인 → `POST /edge/{edge_id}/opc/{opc_id}/start` → 2초 뒤 화면 재로드 |
| `scan_status = START` | 🔴 ◼ **수집 중지** | 확인 → `POST /edge/{edge_id}/opc/{opc_id}/stop` → 2초 뒤 화면 재로드  |
| 항상 표시                 | ⚙ **OPC 편집**   | `/connect/opc/edit/{opc_id}` 편집 화면 이동                        |

> 수집 중지 다이얼로그는 ⚠️ 경고색 (주황) 으로 표시됩니다 — 실제로 데이터가 끊깁니다.

### 우측 ④ 도커 컨테이너 (원격 배포·시작·중지·로그·삭제) <a href="#edge-view-docker" id="edge-view-docker"></a>

엣지 호스트의 도커에 떠있는 컨테이너 목록을 5초마다 갱신.

#### 패널 헤더

| 버튼          | 동작                                |
| ----------- | --------------------------------- |
| **↻**       | 즉시 새로고침                           |
| **➕ 신규 배포** | 컨테이너 배포 다이얼로그 (이름·이미지·포트·환경변수 입력) |

#### 목록 테이블 (6컬럼)

| 컬럼        | 폭     | 표시                                           |
| --------- | ----- | -------------------------------------------- |
| **이름**    | 160px | ▢ 큐브 아이콘 + 컨테이너명 (굵게)                        |
| **이미지**   | 자동    | 이미지 태그 (모노스페이스, 예: `grafana/grafana:latest`) |
| **상태**    | 80px  | 🟢 **UP** / 🔴 **DOWN** 칩                    |
| **최근 상태** | 200px | docker `status` 텍스트 (예: `Up 3 hours`)        |
| **포트**    | 200px | `호스트:컨테이너/프로토콜` 콤마 구분                        |
| **제어**    | 240px | 액션 버튼 5종 (아래)                                |

#### 제어 버튼 (모든 행 공통)

| 버튼         | 색상     | 동작                                                 |
| ---------- | ------ | -------------------------------------------------- |
| ▶ **시작**   | 🟢 녹색  | `POST /app/{name}/start`                           |
| 🔄 **재시작** | 🟡 주황  | `POST /app/{name}/restart`                         |
| ◼ **중지**   | 🔴 빨강  | `POST /app/{name}/stop` (경고 다이얼로그)                 |
| 📄 **로그**  | 회색     | `GET /app/{name}/logs` → 와이드 다이얼로그에 컨테이너 표준 출력 표시  |
| 🗑 **삭제**  | 빨강 텍스트 | `DELETE /app/{name}` (위험 다이얼로그) — 실행 중이어도 강제 종료됩니다 |

#### 신규 배포 다이얼로그

| 입력                             | 예시                                 |
| ------------------------------ | ---------------------------------- |
| **컨테이너 이름**                    | `grafana`                          |
| **이미지**                        | `grafana/grafana:latest`           |
| **포트** (host:container, 콤마 구분) | `3000:3000`                        |
| **환경변수** (KEY=VAL, 콤마 구분)      | `GF_SECURITY_ADMIN_PASSWORD=admin` |

배포는 엣지 호스트의 도커 데몬이 받아 이미지 pull + run 을 수행합니다. 이미지가 크면 시간이 걸리므로 목록 새로고침으로 진행 상황을 확인하세요.

### 시스템 리부트·앱 재시작 안전 절차 <a href="#edge-view-system" id="edge-view-system"></a>

#### 🔄 앱 재시작 (Edge 애플리케이션만)

1. 시스템 자원 패널 우상단 **앱 재시작** 클릭
2. 확인 다이얼로그 → "재시작"
3. 약 3초 뒤 프로세스 자체 재시작
4. 약 10초 후 복귀 — 게이지·통계 자동 채워짐

> 영향: PLC/OPC 수집이 약 10\~15초 끊깁니다. CEP 알람 평가는 서버측에서 계속됩니다. 누적 카운터는 0부터 다시 시작.

#### ⏻ 시스템 리부트 (Edge 호스트 OS)

좌측 ① 기본 정보 패널 헤더의 🔴 ⏻ 버튼.

1. 확인 다이얼로그가 **위험 (빨강)** 으로 표시됨
2. 약 1분 동안 응답이 없으며 OS 가 완전히 부팅된 후에야 복귀
3. 부팅 중 PLC/OPC 모두 끊김 — 컨테이너도 함께 정지/재시작

> 다음 경우에만 사용하세요. ① 메모리/디스크가 100% 까지 차서 앱 재시작으로 회복이 안 되는 경우. ② 보드 자체가 응답이 느려진 경우. 일반적으로는 **앱 재시작** 으로 먼저 시도하세요.

***

## 활용 시나리오 <a href="#use-cases" id="use-cases"></a>

| 시나리오                      | 화면                   | 절차                                                       |
| ------------------------- | -------------------- | -------------------------------------------------------- |
| **신규 라인 OPC 등록**          | 프로토콜 → OPC 카드 → 연결하기 | 사이트·OPC ID·서버 주소 입력 → 저장                                 |
| **운영 중 연결 끊김 일괄 점검**      | 상태                   | 좌측 "최근 연결 끊김" 24시간 이력 → 우측 카드의 빨강·진빨강 카드 식별              |
| **포인트 검증 실패 원인 분석**       | 상태                   | 좌측 "포인트 검증 실패 트렌드" + "최근 검증 실패" → 자산 ID + 시각 → 트렌드 화면 비교 |
| **엣지 디바이스 자원 점검**         | 엣지                   | CPU/메모리/디스크 80% 이상 디바이스 식별 → 현장 정리                       |
| **PLC 단절 사이트 식별**         | 엣지                   | "PLC 연결끊김" 컬럼 정렬 → 0 아닌 사이트의 엣지 점검                       |
| **네트워크 지연 분석**            | 엣지                   | "최고 지연 \[MS]" 정렬 → 10초 이상 디바이스의 네트워크 점검                  |
| **엣지 위 그라파나·통합 컨테이너 재시작** | 엣지 상세 → 도커           | 컨테이너 행의 🔄 재시작 (전체 화면 새로고침 불필요)                          |
| **현장 OPC 일시 정지 후 점검**     | 엣지 상세 → OPC          | 해당 OPC 행의 ◼ 수집 중지 → 점검 후 ▶ 수집 시작                         |
| **엣지 응답 느려짐 회복**          | 엣지 상세 → 시스템 자원       | **앱 재시작** (영향 10초). 회복 안 되면 ⏻ **시스템 리부트** (영향 1분)        |
| **신규 모니터링 도구 원격 배포**      | 엣지 상세 → 도커 → ➕ 신규 배포 | 이미지·포트·환경변수 입력 후 배포 — 이미지 pull 자동                        |

***

## 자주 묻는 질문 <a href="#faq" id="faq"></a>

**Q. OPC 데이터소스를 등록했는데 \[상태] 화면에 카드가 안 보입니다.** A. 등록 직후에는 "연결안됨"(회색) 상태로 카드가 표시되어야 합니다. 보이지 않으면 사이트 셀렉터에서 그 OPC가 등록된 사이트를 선택했는지 확인하세요.

**Q. \[상태] 의 트렌드 차트가 비어 있습니다.** A. 그 사이트에 데이터소스 자체가 없거나 오늘 인입 이력이 전혀 없는 경우입니다. 데이터소스를 등록한 직후라면 첫 인입까지 잠시 기다리세요.

**Q. 차트 위 정보 아이콘 ℹ 의 툴팁이 잘려 보입니다.** A. 정보 아이콘에 마우스를 올리면 5단계 상태 기준 표가 툴팁으로 표시됩니다. 화면 폭이 좁으면 잘릴 수 있으므로 화면을 더 넓게 하시거나 [상태 코드 정의](/plantpulse-platform/user/status.md) 화면을 참고하세요.

**Q. 엣지 게이트웨이 상태가 갱신되지 않습니다.** A. 엣지 게이트웨이의 상태는 **매 10초마다** 갱신됩니다. 그 이상 갱신이 멈췄다면 엣지가 응답을 보내지 못하는 상태입니다(연결끊김). 현장 점검 또는 [진단](/plantpulse-platform/user/diagnostic.md) 의 EDGE 애플리케이션 로그 확인.

**Q. PLC 연결끊김 컬럼이 1로 늘었는데 어떻게 확인하나요?** A. 그 엣지의 액션 버튼으로 상세 화면에 가시면 PLC 단위 상태를 보실 수 있습니다. 또는 [상태](#status-screen) 화면의 PLC 카드 그리드에서 빨강 카드를 식별합니다.

**Q. CPU/메모리 100% 인 엣지가 있어요.** A. 즉시 현장에 접속해 불필요한 프로세스를 정리하시고, 반복된다면 디바이스 사양 업그레이드 또는 수집 주기 조정을 검토하세요.

**Q. 카드를 클릭했더니 빈 화면이 나옵니다.** A. 데이터소스 상세 화면(`/connect/view`) 으로 이동하지만 인입 데이터가 없으면 빈 화면처럼 보일 수 있습니다. 데이터 인입 이력이 있는 데이터소스만 풍부한 정보가 표시됩니다.

**Q. 실시간으로 자동 갱신되나요?** A. \[상태] 화면의 카드 매분 표시(`_mm`)는 자동 갱신됩니다. 좌측 통계 차트는 일정 주기로 갱신되며, 즉시 반영하려면 우상단 ↻ 새로고침 버튼을 누르세요.

**Q. "수신된 포인트 건수" 가 갑자기 0이 됩니다.** A. 엣지의 카운터가 재시작되면 0부터 다시 시작됩니다. 진짜 0인지 카운터 리셋인지 [일일 통계](/plantpulse-platform/user/statistics.md) 화면의 사이트별 데이터 건수를 같이 확인하세요.

**Q. 엣지 상세 화면(`/edge/view`)에서 OPC 수집을 중지했는데 시간이 지나면 다시 START 로 돌아옵니다.** A. OPC 자체에 자동 재시작 옵션이 켜져 있거나, 워크플로로부터 자동 시작 명령이 들어왔을 가능성이 있습니다. [OPC 편집](/plantpulse-platform/user/connection.md) 화면에서 자동 재시작 설정을 확인하세요. 영구 중지가 필요한 경우 OPC 자체를 비활성화하세요.

**Q. 도커 컨테이너 패널이 비어 있습니다.** A. ① 엣지가 도커 사용 모드가 아닐 수 있습니다 — 일부 엣지는 systemd 직접 기동 방식입니다. ② 엣지 OS 의 도커 데몬이 응답하지 않을 수 있습니다 (이 경우 ↻ 새로고침해도 비어 있음). 현장 점검 또는 ⏻ 시스템 리부트 검토.

**Q. 컨테이너 ▶ 시작·🔄 재시작·◼ 중지 버튼이 모두 보입니다. 어떤 게 활성인가요?** A. 모든 버튼은 항상 클릭 가능합니다 — 도커 상태와 무관하게 명령이 전송됩니다. 이미 실행 중인데 ▶ 시작을 누르면 오류 없이 무시되거나 재시작될 수 있으니, **상태 칩(🟢 UP / 🔴 DOWN)** 을 보고 의도한 명령을 선택하세요.

**Q. ⏻ 시스템 리부트와 🔄 앱 재시작의 차이는?** A. ① 앱 재시작 (영향 10초) — 엣지 데몬 프로세스만 재기동, OPC/PLC 수집은 10초 끊김. ② 시스템 리부트 (영향 1분) — 엣지 호스트 OS 전체를 부팅, 도커 컨테이너까지 재시작. 일반적으로는 항상 앱 재시작을 먼저 시도하세요.

**Q. API Key 가 마스킹되어 보이는데 실제 값을 확인하려면?** A. 마스킹은 일부러 적용된 것입니다 — 화면 어느 곳에서도 평문 키는 보이지 않습니다. Flow [REST 노드](/plantpulse-platform/user/flow.md) 의 X-API-Key 와 동일한 키이므로 처음 발급받았을 때 안전한 곳에 보관하세요. 분실 시에는 운영자에게 재발급을 요청하세요.

***

## 관련 화면 <a href="#related" id="related"></a>

* [대시보드](/plantpulse-platform/user/summary.md) — 사이트 지도와 KPI 카드의 연결률
* [일일 통계](/plantpulse-platform/user/statistics.md) — 사이트·OPC·태그별 비교 분석
* [데이터 포인트](/plantpulse-platform/user/data-point.md) — 인입된 데이터를 차트로 확인
* [팩토리 관리](/plantpulse-platform/user/factory.md) — 사이트·자산 트리 등록
* [진단](/plantpulse-platform/user/diagnostic.md) — 엣지·서버 모듈의 진단 로그
* [상태 코드 정의](/plantpulse-platform/user/status.md) — 5단계 연결 상태와 색상 매핑
