# 구성

> 내장 OPC UA 서버의 애플리케이션 이름과 수신 포트와 네트워크 이름과 클라이언트 인증, 그리고 그것을 저장하고 효력을 주는 적용입니다.

구성은 Connector에 있는 OPC UA 서버 패널의 두 번째 카드입니다. 그 입력란은 초안입니다. 서버가 수신 대기하지 않는 동안(꺼져 있거나, 켜져 있어도 마지막 시작이 거부되었을 때) 고칠 수 있고, **적용**이 초안을 저장하기 전까지는 아무것도 바뀌지 않습니다. 서버가 꺼져 있으면 초안은 다음에 켤 때를 위해 간직됩니다("OPC UA 서버 구성을 저장했습니다. 다음에 사용으로 바꾸면 이 구성으로 시작합니다."). 서버가 켜져 있는 동안 단추는 **적용하고 다시 시작**이 되어 그 구성으로 서버를 다시 올립니다. 카드가 단추 아래에서 그렇게 말합니다. "endpoint를 편집하려면 서버를 사용 안 함으로 바꾸십시오. 변경 내용은 다음에 시작할 때 적용됩니다." Connector 보기는 이 카드를 읽고, Connector 구성은 그것을 편집합니다. 서버를 끄는 일은 [명령 막대](connector-opcua-server#the-commands)의 사용 안 함입니다.

## 입력란 {#the-fields}

| 항목 | 무엇인지 | 값과 기본값 | 효과 |
| --- | --- | --- | --- |
| 애플리케이션 이름 | 서버가 클라이언트에게 알리는 이름이자, 서버 자신의 애플리케이션 인증서의 주체입니다. | 아무 글이며 기본값은 **GanterLab OPC UA Server**입니다. 빈 이름은 기본값으로 저장되고 앞뒤 공백은 다듬어집니다. | 클라이언트는 이것을 서버의 애플리케이션 이름으로 봅니다. endpoint 주소의 일부가 아닙니다. 네트워크 이름을 바꿀 때처럼 이름을 바꾸면 서버 자신의 인증서가 교체되므로 클라이언트는 새 인증서를 신뢰한 뒤에 다시 연결합니다. 이 서버를 장비로 읽는 스테이션은 읽기를 멈추고 자신의 [현장 장비 접근](driver-opc-ua#equipment-access)에 "인증서가 바뀜: `<name>`"을 띄우며, 거기에서 새 인증서가 승인될 때까지 기다립니다. |
| 수신 포트 | 서버가 수신하는 TCP 포트입니다. | 1에서 65535이며 기본값은 **4840**입니다. 숫자가 아닌 글은 적는 동안 무시되고, 범위 밖의 숫자는 자릿수와 상관없이 입력란 아래에서 "수신 포트는 1에서 65535 사이여야 합니다."로 물리치며 입력란은 지금 포트로 돌아갑니다. 이 스테이션의 다른 서비스가 쓰는 포트와 다른 프로그램이 쥐고 있는 포트는 적용을 누를 때 물리칩니다(아래 참고). | 클라이언트 접근의 연결 주소 아래 두 주소를 모두 바꾸고, Windows 규칙이 포트에 묶여 있으므로 거기에서 새 방화벽 허용을 요청합니다. |
| 네트워크 이름 | endpoint 주소가 담는 이름입니다. 클라이언트가 스테이션에 실제로 닿는 이름으로 접속하게 해 줍니다. 클라이언트가 접속에 쓰는 DNS 이름이거나, 이름을 네트워크가 풀지 못하는 컴퓨터의 주소입니다. | 기본값은 비어 있고, 비어 있으면 이 컴퓨터 자신의 이름을 뜻합니다. 그 밖에는 호스트 이름입니다. 영문자, 숫자, 붙임표, 밑줄, 마침표이거나 주소이며, 앞에 opc.tcp://를 붙이지 않고 포트와 경로도 적지 않습니다. 입력란은 초점을 잃을 때나 Enter로 확정됩니다. 다른 것은 입력란 아래에서 호스트 이름이 아니라는 말과 함께 물리치고, 입력란은 지금 이름으로 돌아갑니다. | 다음 시작부터 클라이언트 접근의 연결 주소 아래 네트워크 주소가 이 이름을 담고, 서버 자신의 인증서도 `localhost`와 나란히 이 이름을 보증합니다. 이름을 바꾸면 그 인증서가 교체되므로 클라이언트는 새 인증서를 신뢰한 뒤에 다시 연결합니다. |
| 클라이언트 인증 | 인증서가 신뢰된 다음 서버가 어떤 세션을 받아들이는지입니다. | **익명**(기본값): 자격 증명 없는 세션을 받아들이고 사용자 이름 세션은 물리칩니다. **사용자 이름과 비밀번호**: 설정한 짝만 받아들이고 익명 세션은 물리칩니다. | 다음 시작에 적용됩니다. 서버는 언제나 두 토큰 정책을 함께 알리고, 세션이 활성화될 때 이 선택을 강제합니다. 모든 세션을 물리치려면 서버를 끄십시오. |
| 사용자 이름 | 받아들이는 하나뿐인 사용자 이름입니다. | 1에서 64자이며 앞뒤가 다듬어집니다. 사용자 이름과 비밀번호에서만 고칠 수 있습니다. | 비밀번호와 함께, 로그인하는 유일한 자격 증명입니다. |
| 비밀번호 | 받아들일 비밀번호입니다. 이 입력란은 쓰기 전용이라 무엇이 저장되어 있든 비어서 열리고, 어느 상태인지는 라벨이 말합니다. **비밀번호(저장됨)** 또는 **비밀번호(저장된 것 없음)**입니다. **비밀번호 표시** 토글은 여기에 입력한 것만 보여 줍니다. | 8에서 128자이고 비워 둘 수 없습니다. 비워 두면 저장된 비밀번호가 그대로 남고, 저장된 것이 있을 때는 입력란 아래 줄이 그렇게 말합니다. "비워 두면 저장된 비밀번호를 그대로 사용합니다." 사용자 이름과 비밀번호에서만 고칠 수 있고, 길이 규칙도 입력란 아래에 적혀 있습니다. "사용자 이름: 1~64자. 비밀번호: 8~128자." | Windows 사용자와 컴퓨터에 묶인 암호문으로 저장됩니다(아래 참조). |

라디오 단추와 세 글 입력란은 서버가 수신 대기하는 동안("endpoint를 바꾸려면 OPC UA 서버를 사용 안 함으로 바꾸십시오."), 서버의 다른 명령이 도는 동안, 그리고 유닛이 실행 중인 동안 흐려집니다. 초안은 패널이 열릴 때 저장된 구성에서 씨앗을 받고, 구성이 다른 데에서 바뀌거나 유닛이 스테이션을 붙잡거나 런타임이 정지할 때 저장하지 않은 편집을 버리고 다시 씨앗을 받습니다. 비밀번호만 예외로 매번 비어서 씨앗을 받습니다. 저장된 것은 브라우저로 절대 건너가지 않기 때문입니다.

## 적용 {#apply}

| 명령 | 하는 일 | 흐려지는 때(상황) | 그려지지 않는 때(역할) |
| --- | --- | --- | --- |
| 적용 / 적용하고 다시 시작 | 초안을 확인하고 저장합니다. 이것은 하나의 엔지니어링 조작입니다. 서버가 꺼져 있으면 단추는 **적용**이며, "OPC UA 서버 구성을 저장하는 중…" 다음에 "OPC UA 서버 구성을 저장했습니다. 다음에 사용으로 바꾸면 이 구성으로 시작합니다."입니다. 서버가 켜져 있으면 **적용하고 다시 시작**이며, 새 값으로 서버를 다시 시작합니다. "새 구성으로 OPC UA 서버를 다시 시작하는 중…" 다음에 "OPC UA 서버 구성을 적용했습니다. `<endpoint>`에서 수신합니다."입니다. 애플리케이션 이름이나 네트워크 이름을 새로 바꾸면 스테이션 자신의 인증서가 바뀝니다. [OPC UA 드라이버](driver-opc-ua)도 이 인증서로 장비를 읽으므로, 서버가 켜져 있든 꺼져 있든 Connector 전체를 다시 시작하고 장치는 잠시 뒤에 다시 읽습니다. 그 밖의 변경은 서버에만 관계하며, 그동안 Connector는 계속 읽습니다. | 서버가 수신 대기하는 동안, 서버의 다른 명령이 도는 동안, 유닛이 실행 중인 동안, 그리고 저장된 구성을 읽지 못한 동안. | **Connector 구성**이 없는 역할일 때. |

확인은 무엇을 저장하기 전에 이 순서로 일어납니다. 포트("수신 포트는 1에서 65535 사이여야 합니다."), 지금 포트와 다른 포트라면 이어서 [원격 접근](remote-access)에서 정하는 웹 서버의 포트("포트 N은(는) 이미 웹 서버가 쓰고 있습니다. 다른 포트를 고르거나, 웹 서버를 먼저 옮기십시오."), [에이전트](agent) 페이지에서 에이전트 접근에 정한 포트, 에이전트 접근이 켜져 있든 꺼져 있든("포트 N은(는) 이미 에이전트 접근이 쓰고 있습니다. 다른 포트를 고르거나, 에이전트 접근을 먼저 옮기십시오."), Connector 페이지의 [Modbus 서버](connector-modbus-server) 포트, 서버가 켜져 있든 꺼져 있든("포트 N은(는) 이미 Modbus 서버가 쓰고 있습니다. 다른 포트를 고르거나, Modbus 서버를 먼저 옮기십시오."), Connector 페이지의 [MQTT 브로커](connector-mqtt-broker) 포트, 브로커가 켜져 있든 꺼져 있든("포트 N은(는) 이미 MQTT 브로커가 쓰고 있습니다. 다른 포트를 고르거나, MQTT 브로커를 먼저 옮기십시오."), 이 컴퓨터에서 다른 무언가가 이미 쥐고 있는 포트("포트 N은(는) 이 컴퓨터에서 이미 사용 중입니다. 그 포트를 쓰고 있는 것을 닫거나, 다른 포트를 고르십시오.")이며, 모두 범위 밖의 숫자처럼 수신 포트 입력란 아래에 나오고 입력란은 지금 포트로 돌아갑니다. 그다음 네트워크 이름이며, 이것도 네트워크 이름 입력란 아래에 나오고 입력란은 지금 이름으로 돌아갑니다. 그다음 사용자 이름과 비밀번호에서는 사용자 이름("사용자 이름은 1~64자여야 합니다."), 입력란이 비어 있는데 지킬 저장된 비밀번호도 없는 경우("아직 저장된 비밀번호가 없으니 적용하기 전에 하나를 입력하십시오."), 비밀번호 길이("비밀번호는 8~128자여야 합니다."), 그리고 빈 비밀번호("비밀번호는 비워 둘 수 없습니다.")입니다. 물리친 초안은 아무것도 남기지 않습니다. 다시 시작했는데 서버가 정지한 채로 남는 경우는 보통 적용하고 다시 시작이 다시 확인하지 않는 지금 포트를 다른 프로그램이 쥐고 있는 경우이며 "OPC UA 서버를 시작하지 못했습니다. 포트 N을(를) 열지 못했을 수 있습니다. 로그를 확인하십시오."로 알려집니다. 구성은 저장되었으므로 원인을 고친 다음 명령 막대에서 다시 시작을 누르십시오. 정지한 채로 돌아오지 않고 오류로 실패한 시작은 "OPC UA 서버 오류: …"로 알려집니다. 어느 쪽이든 입력란은 그 뒤에 저장된 값을 다시 읽습니다.

## 저장된 구성을 읽지 못했을 때 {#when-the-stored-configuration-could-not-be-read}

시작할 때 구성 데이터베이스가 서버의 줄을 건네주지 못했으면 카드가 이런 안내로 시작합니다. "저장된 서버 구성을 읽지 못했습니다. 아래 값은 이번 부팅의 기본값이며, 저장된 구성을 덮어쓰지 않도록 저장이 꺼져 있습니다. 진단 로그를 확인한 다음 애플리케이션을 다시 시작하십시오." 서버는 그 부팅 동안 기본값으로 돌고, 적용은 흐려지며, 눌러도 상태 표시줄에서 같은 문장으로 답합니다.

## 시작할 때 서버가 포트를 열지 못하면 {#when-the-server-cannot-open-its-port-at-start}

스테이션이 시작할 때 다른 프로그램이 이미 쓰고 있거나(산업용 컴퓨터에서는 4840이 이미 쓰이는 일이 흔합니다) Windows가 거부해서(Hyper-V, WSL, Docker가 예약한 범위 안의 포트) 서버가 수신 포트를 열지 못하면, 정지된 채로 남는 것은 서버뿐입니다. Connector는 장치를 읽고, Logic과 기록도 계속됩니다. 카드가 그 까닭을 말합니다. "서버를 시작하지 못했습니다", 이어서 "포트 4840은(는) 이 컴퓨터의 다른 앱이 이미 사용하고 있어서 OPC UA 서버는 중지된 상태로 남았습니다. 다른 수신 포트를 고른 뒤 서버를 다시 시작하십시오."입니다. 카드에는 단추가 두 개 있습니다.

| 명령 | 하는 일 | 흐려지는 때(상황) | 그려지지 않는 때(역할) |
| --- | --- | --- | --- |
| 포트 N 사용 | N을 수신 포트로 남기고 그 포트에서 서버를 시작합니다. 이것은 하나의 엔지니어링 조작입니다. N은 거부된 포트보다 위에서 수신 포트 입력란이 받아들일 첫 포트입니다. 지금 이 컴퓨터에서 비어 있고, 웹 서버의 포트도, 에이전트 접근의 포트도, Modbus 서버의 포트도 아닌 포트입니다. 그다음 카드는 서버가 어디에서 수신하는지 말합니다. 이제부터 OPC UA 클라이언트가 그 포트로 연결하기 때문입니다. "OPC UA 서버가 이제 포트 4841에서 수신합니다. OPC UA 클라이언트는 `<endpoint>`에 연결합니다." 서버가 시작할 때 N도 이미 쓰이고 있었다면, 같은 카드가 다음 포트를 제안하며 돌아옵니다. | 유닛이 실행 중인 동안, 런타임이 정지된 동안, 그리고 저장된 구성을 읽지 못한 동안. | **Connector 구성**이 없는 역할일 때. |
| Connector 열기 | Connector를 OPC UA 서버의 행에서 엽니다. 그 구성 카드에서 수신 포트를 정합니다. | 결코 없습니다. | **Connector 보기**가 없는 역할일 때. |

포트는 누군가 "포트 4841 사용" 같은 단추를 누를 때만 바뀝니다. 서버가 스스로 다른 포트로 옮겨 가는 일은 없습니다. 포트와 관계없는 실패에서는 시작이 알려 준 까닭 아래에 Connector 열기만 남습니다. 스테이션이 트레이에 숨은 채 시작하면 Windows 알림이 카드의 제목과 까닭을 되풀이합니다. 알림에는 단추가 없고, 카드는 창 안에서 기다립니다.

## 비밀번호와 그것이 있는 곳 {#the-password-and-where-it-lives}

비밀번호는 모든 장치 비밀과 마찬가지로 사용자마다의 DPAPI 암호문으로 저장됩니다. 다른 컴퓨터나 다른 Windows 계정에서 연 구성 [백업](settings-backups)에는 그것이 없습니다. 그러면 서버가 사용자 이름과 비밀번호를 켠 채 확인할 비밀번호 없이 시작해 모든 로그인을 물리치고 그 이유를 진단 로그에 남깁니다("사용자 이름과 비밀번호 인증이 켜져 있지만 이 Windows 계정에서는 OPC UA 서버 비밀번호를 읽을 수 없습니다 … Connector에 있는 OPC UA 서버의 구성에서 다시 입력하십시오."). 여기에서 다시 입력하십시오. 저장된 비밀번호가 거꾸로 나가는 일은 없습니다. 입력란은 비어서 열리고 있는지 없는지만 라벨이 말하므로, 원격 브라우저가 받는 페이지에는 자격 증명이 실리지 않습니다. 일반 HTTP 원격 연결에서는 이 페이지에 적은 사용자 이름과 비밀번호가 평문으로 네트워크를 건너갑니다. [원격 접근](remote-access)을 보십시오.

## 이 구역이 하지 않는 일 {#what-this-section-does-not-do}

인증서 신뢰는 따로 있는 확인이며 [클라이언트 접근](connector-opcua-client-access)에서 결정합니다. 신뢰하는 애플리케이션도 여기에서 고른 방식으로 로그인해야 하고, 인증서가 신뢰되지 않은 상대는 사용자 이름으로도 아무도 로그인시키지 못합니다. 사용자 이름과 비밀번호는 명부가 아니라 하나뿐이고, 클라이언트마다의 권한은 없습니다. 주소 경로 `/UA/GanterLab`과 보안 정책은 설정할 수 없고, 네트워크 이름은 목록이 아니라 이름 하나를 담으므로 endpoint는 그 이름과 그 옆의 `localhost`만 알립니다. Logic 주소 공간은 서버의 포인트를 읽기 전용으로 보여 주고, 그 "Connector 열기" 단추가 서버의 행에 내려앉습니다.
