개요 · 프로토콜 정의
Aurora Protocol의 목적, 연결 구성, 메시지 형식과 통신 규칙을 설명합니다.
개요
이 문서는 Aurora Professional(Aurora Protocol Player)과 연동하여 EUT(Equipment Under Test, 시험 대상 장비) 를 제어하기 위한 Aurora Protocol을 정의합니다.
통신은 TCP/IP 또는 UDP를 이용하여 문자열로 주고받으며, 같은 네트워크의 기기에서 접속하여 EUT의 WLAN 모드 변경 또는 제어를 수행할 수 있습니다.
이 가이드는 Aurora Professional 2.x / 문서 버전 2.1 기준입니다. 명령은 필요에 따라 계속 추가될 수 있으며, 현재는 시험 자동화에 반드시 필요한 항목만 정리되어 있습니다.
Aurora Protocol Player는 Professional(기업·조직) 플랜에서만 사용할 수 있습니다. 개인 사용자 플랜(Starter·Standard)에는 포함되지 않으므로 이 프로토콜로 연동할 수 없습니다. 플랜별 차이는 요금제에서 확인하세요.
구성
Aurora Protocol Player를 실행하면 TCP/IP 서버 또는 UDP 수신 엔드포인트로 동작합니다. 어느 쪽으로 동작할지는 Player의 설정(Settings)에서 고릅니다.
- TCP/IP에서 클라이언트는 하나의 연결만 유지됩니다. 다른 연결이 시도되면 기존 연결을 종료하고 새 연결을 유지합니다.
- UDP에서는 연결 개념이 없습니다. 응답은 마지막으로 데이터를 보낸 클라이언트의 IP와 설정의 원격 포트(Remote Port)로 전송합니다. 받아들일 발신지는 허용 IP(Allowed IP)로 지정할 수 있고, 비워 두면 시작·재시작 후 처음 데이터를 보낸 발신지가 그 실행 동안 고정됩니다.
- 연결이 성공한 후에는 User Application이 주도적으로 Command를 보내고 응답을 받아 처리합니다.
- User Application이 Command를 보내지 않으면 서버는 아무 처리도, 데이터 송신도 하지 않습니다.

연결 정보
| 항목 | 값 |
|---|---|
| 통신 방식 | TCP/IP(기본값) 또는 UDP — Player의 설정에서 선택 |
| IP | TCP/IP는 127.0.0.1(같은 PC), UDP는 0.0.0.0(모든 어댑터)이 기본값. Player가 동작하는 PC의 주소 중에서 고릅니다 |
| Port | 7010 (기본값 — 설정에서 변경 가능) |
| Remote Port | 7011 (UDP 전용 기본값 — 클라이언트가 응답을 받을 포트) |
| 전송 | 문자열, NULL(\0) 종료 |
| 문자 인코딩 | CP949 또는 UTF-8 — Player가 메시지마다 자동으로 판별 (한글 등 ASCII 밖의 문자 참고) |
| 타임아웃 | Command 전송 후 최대 30초 |
프로토콜 정의
프로토콜은 Command와 Data로 구성되며, 문자열은 반드시 NULL로 끝나야 합니다.
명령 전송 (클라이언트 → 서버)
!CC:DATA\0| 구분 | Command | Delimiter | Data |
|---|---|---|---|
| 크기 | 3 Byte | 1 Byte | 128 Byte 이내 |
| 설명 | ! + 2문자 (예: !00) | : (Colon) | 소문자 문자열, 항목 구분자는 , (Comma). 값 안의 쉼표는 \, (쉼표 이스케이프) |
응답 (서버 → 클라이언트)
!99:N\0| 구분 | Command | Delimiter | Data |
|---|---|---|---|
| 크기 | 3 Byte | 1 Byte | 64 Byte 이내 |
| 설명 | !99 | : (Colon) | 숫자 (0 실패 · 1 성공 · <0 에러) |
쉼표 이스케이프
클라이언트가 보내는 Data에서 ,는 항목 구분자입니다. 값 안에 쉼표가 필요하면 \, 로 씁니다. 이스케이프는 이것 하나뿐이며, 쉼표 앞이 아닌 역슬래시는 그대로 전달됩니다. 그래서 c:\image\a.png 같은 경로는 이스케이프할 필요가 없고, 값 끝의 역슬래시도 그대로 남습니다.
| 명령 | \,가 쓰이는 곳 | 예 |
|---|---|---|
!01 | 그룹 값 안의 쉼표. 그 그룹이 실행될 때 인수 구분(mArg1, mArg2, …)이 됩니다. 인수 하나 안에 쉼표 문자를 넣으려면 \\, | !01:0,2.4G\,5G,11b |
!30 | 이미지 경로와 비교 문자열 안의 쉼표 | !30:c:\img\a.png,0,10,10,100,23,Hello\, world |
!32 | 제목과 본문 안의 쉼표 | !32:0,장비 점검\, 완료,보고서 확인 요망 |
서버가 보내는 응답은 이스케이프하지 않습니다. !31의 인식 문자열에는 쉼표가 들어 있을 수 있으므로, 첫 쉼표 앞을 결과 값, 마지막 쉼표 뒤를 비교 결과로 읽고 그 사이 전체를 인식 문자열로 읽으세요.
한글 등 ASCII 밖의 문자
제목·본문(!32), 스크립트 그룹 값(!01), 비교 문자열(!30)처럼 한글이 들어가는 Data는 CP949 또는 UTF-8로 보냅니다. Player는 메시지를 받을 때마다 인코딩을 자동으로 판별합니다.
| 받은 메시지 | Player의 해석 |
|---|---|
| 올바른 UTF-8이고 한글처럼 3바이트 이상인 문자가 들어 있음 | UTF-8 |
| UTF-8로 읽을 수 없는 바이트가 있음 | CP949 |
ASCII만 있음 (예: !00:) | 판별하지 않고 직전 메시지의 인코딩을 이어 씀 (처음에는 CP949) |
- Player가 보내는 응답의 문자열(예:
!31의 인식 결과)은 클라이언트가 마지막으로 쓴 인코딩으로 보냅니다. 클라이언트는 보낸 인코딩 그대로 응답을 읽으면 됩니다. - 크기 제한은 글자 수가 아니라 바이트 수입니다. 한글 한 글자는 CP949에서 2바이트, UTF-8에서 3바이트입니다.
- 전송 길이는 인코딩한 바이트 배열의 길이로 정해야 합니다. 문자열 길이(글자 수)를 쓰면 메시지 뒷부분이 잘립니다.
- 한 세션 안에서는 한 가지 인코딩만 쓰세요. 한글 없이
°처럼 2바이트 문자만 담긴 메시지는 두 인코딩 어느 쪽으로도 읽히므로 직전 인코딩을 따릅니다.
C# byte[] data = Encoding.UTF8.GetBytes(msg + "\0"); // UTF-8
byte[] data = Encoding.GetEncoding(949).GetBytes(msg + "\0"); // CP949
socket.Send(data, data.Length, SocketFlags.None); // 바이트 배열 길이
C++ CStringA a(CW2A(msg, CP_UTF8)); // 또는 CP_ACP (한국어 Windows = CP949)
send(s, a, a.GetLength() + 1, 0); // NULL까지 포함한 바이트 수
글자를 하나씩 char로 바꿔 보내면(예: C++ (char)str[i]) 각 글자의 아래 1바이트만 전송되어 한글을 되살릴 수 없게 됩니다. 문자열 전체를 위 방법처럼 인코딩해서 보내세요. Aurora Professional 2.1.0.2부터는 해석할 수 없는 바이트가 와도 Player가 종료되지 않고, 처리하지 못한 메시지를 통신 로그에 [Error]로 기록합니다.
명령 분류
| 범위 | 방향 | 용도 |
|---|---|---|
!00 ~ !10 | 클라이언트 → 서버 | 시험 제어 (시작·스크립트·리부팅·재시도·정지·종료) |
!30 ~ !39 | 클라이언트 → 서버 | EUT와 무관한 부가 기능 (이미지 문자 인식 !30, 알림 전송 !32) |
!90 ~ !99 | 서버 → 클라이언트 | 서버가 클라이언트로 보내는 알림·응답 |
@Exit | 세션 제어 | 시험 대기 종료 |
전체 명령 목록과 시험 시작 → 종료 시퀀스는 시험 제어 명령에서 시작해 순서대로 따라가면 됩니다. Player 자체의 실행·화면·문서 작성 방법은 Protocol Player 사용법을, AI로 곧바로 앱을 만들고 싶다면 AI로 앱 만들기를 참고하세요.