# 데이터소스 다운 또는 장애

> OPC-UA / MQTT / CSV 데이터소스가 스트리밍을 멈추거나, 행에 장애 표시가 나타납니다.

## 증상

다음 둘 중 하나입니다:

- **활성화 실패.** 입력 데이터소스 행에서 **Enable**을 토글하면 **Disabled**로 다시
  되돌아가고 `model_not_paired` 또는 `adapter_connect_failed` 같은 오류 코드가
  표시됩니다.
- **실행 중인 소스가 스트림 도중 장애를 일으킴.** 이전에 스트리밍하던 데이터소스가
  예측값 생성을 멈추고, 행에 장애 표시와 빨간 배너가 나타납니다. 내부적으로 런타임이
  장애 상태로 떨어진 뒤 유휴 상태가 됩니다.

데이터소스를 활성화해도 스트리밍이 시작되지 **않습니다**. 활성화는 런타임을 준비합니다
(모델 로드, 어댑터 연결). 추론을 시작하려면 **Start**를 누르세요. Enabled이지만 예측하지
않는 행은 대개 Start를 기다리는 것일 뿐이며 — 이는 설계상 그렇습니다.

## 확인

어느 단계에서 실패했는지 식별하세요.

- **행의 오류 코드를 읽으세요.** 코드는 실패한 단계를 직접 가리킵니다:
  - `model_not_paired` → 데이터소스에 할당된 모델이 없음.
  - `adapter_connect_failed` → 프로토콜 연결(OPC-UA 핸드셰이크 / MQTT 브로커 연결 /
    Modbus 프로브)이 실패함 — 거의 항상 네트워크나 엔드포인트 문제.
- 연결 시도와 장애 원인을 보려면 **백엔드 로그를 확인하세요**:

  ```bash
  docker compose -f docker-compose.release.yml logs backend | grep -iE "datasource|adapter|fault|enable"
  ```

- **스트림 도중 장애**는 실시간 소스의 읽기 오류(태그 응답 중단)에서 비롯됩니다. 그런
  일이 생기면 런타임은 깨끗한 유휴 상태로 분해됩니다: 모델이 언로드되고 어댑터 바인딩이
  해제됩니다. **복구는 자동이 아닙니다** — 소스를 처음부터 다시 활성화해야 합니다.

## 해결

1. **`model_not_paired`** — 먼저 데이터소스에 모델을 할당한 뒤 다시 Enable하세요.
   데이터소스는 실행 전에 모델과 페어링되어 있어야 합니다.

2. **`adapter_connect_failed`** — 런타임이 소스에 도달하지 못했습니다. Enable이 이미 행을
   Disabled로 깔끔하게 되돌렸으므로, 연결을 수정한 뒤 재시도하세요:
   - 데이터소스 구성의 엔드포인트 주소, 포트, 자격 증명을 확인하세요.
   - 박스가 OPC-UA 서버 / MQTT 브로커 / 장치에 네트워크로 도달할 수 있는지 확인하세요.
   - CSV 소스의 경우 파일 경로와 파일이 존재하고 읽을 수 있는지 확인하세요.
   - 폼의 **Test Connection**을 *현재* 값으로 실행한 뒤 다시 Enable하세요.

3. **스트림 도중 장애가 난 소스**는 유휴 상태로 분해되었습니다 — 모델이 언로드되고
   어댑터 바인딩이 해제되었습니다. 완전히 다시 설정하세요:
   - 근본적인 소스 문제를 해결하세요(센서 재연결 / 태그 복구 / 네트워크 수정).
   - 데이터소스를 다시 **Enable**합니다(모델을 다시 로드하고 어댑터를 재연결).
   - **Start**를 눌러 스트리밍을 재개합니다.

한 번에 하나의 입력 데이터소스만 Enabled될 수 있습니다. 소스 B를 활성화하면 소스 A가
자동으로 비활성화됩니다. 실행 중일 것으로 예상한 소스가 Disabled로 표시되면, 다른 소스를
활성화하면서 꺼진 것은 아닌지 확인하세요.

## 예방

- **운영에 들어가기 전에 모델을 페어링하고 모든 채널을 매핑하세요.** 대부분의 활성화
  실패는 사전 점검 검증입니다: 모델 페어링 누락 또는 불완전한 태그-채널 매핑(빈 곳 또는
  과도 채움). 이를 한 번 완료하면 Enable이 첫 시도에 성공합니다.
- **Start 전에 소스를 안정화하세요.** 불안정한 OPC-UA 엔드포인트나 간헐적인 브로커는
  스트림에 장애를 일으켜 전체 재활성화를 강제합니다. Start를 누르기 전에 Test
  Connection으로 안정적인 연결을 확인하세요.
- **두 단계 흐름을 예상하세요.** Enable은 준비하고, Start는 스트리밍합니다. 이를 운영
  절차에 반영하면 "활성화되었는데 아무 일도 일어나지 않는다"는 티켓을 피할 수 있습니다.

## 관련 항목

- [데이터소스 연결](/ko/configure/input-datasources/) — 어댑터 유형, 연결 구성, 태그 매핑.
- [첫 추론](/ko/install-deploy/first-inference/) — 모델 로드 및 실행 흐름.
