로컬 프로토콜 · 06

stdout의 두 KataGo 언어: GTP와 JSONL

표준 입출력을 함께 쓰지만 GTP v2와 Analysis Engine JSONL은 상태, 메시지 경계와 대상 클라이언트가 다릅니다.

  1. GTP는 상태를 가진 명령과 응답입니다

    GUI는 boardsize, komi, play, kata-analyze 같은 명령을 한 줄씩 보내고 엔진은 현재 바둑판을 유지합니다. 성공은 =, 실패는 ?로 시작하고 빈 줄이 응답을 끝냅니다. Sabaki, q5Go, Lizzie 같은 전통 바둑 GUI에 적합합니다.

    GTP 응답은 뒤의 빈 줄로 묶이며 앞서 실행한 명령이 바둑판 상태를 차례로 만듭니다.
  2. Analysis Engine은 한 줄에 JSON 하나입니다

    JSONL 모드는 각 질의를 한 줄 JSON으로 쓰고 결과도 줄마다 반환합니다. 질의가 국면과 id를 직접 담으므로 일괄 처리, 서비스 연결과 프로그램 파싱에 알맞습니다. 같은 id에 탐색 중 결과가 여러 번 올 수 있습니다.

    줄바꿈이 메시지 경계이므로 터미널 안내, 진행 문구와 색상 로그를 섞을 수 없습니다.
  3. stdout은 프로토콜, stderr는 진단 전용입니다

    두 모드 모두 기계가 읽는 프로토콜은 stdout만 사용합니다. 연결 상태, 재시도, 사용량과 오류 맥락은 stderr로 보냅니다. 섞이면 GUI는 로그를 GTP 응답으로 오해하고 스크립트는 잘못된 JSON을 받습니다.

    stdout은 기계, stderr는 사람, 종료 코드는 프로세스 결과를 위한 분리입니다.

사양

  1. Go Text Protocol v2
  2. KataGo GTP 확장
  3. KataGo Analysis Engine

연결 전 점검

  • GUI는 GTP, 스크립트는 JSONL
  • 줄과 빈 줄 경계 지키기
  • 진단은 stderr에만 출력
  • 필요한 명령 먼저 탐색
CLI 실전 읽기