proto-socket/agent-ops/rules/project/domain/go/rules.md

2.1 KiB

domain last_rule_review_commit last_rule_updated_at
go 7ea0b484d2 2026-06-01

go

목적 / 책임

Proto Socket의 Go 구현체를 담당한다. TCP/WS/WSS 서버·클라이언트, TLS 지원, 공통 Communicator 로직, 타입 헬퍼 함수를 제공한다.

포함 경로

  • go/*.go — 핵심 구현 및 루트 패키지 테스트 (packets/ 제외)
  • go/test/ — 동일 언어 테스트
  • go/crosstest/ — 크로스 언어 테스트 (Dart.io, Dart.web, Kotlin, Python, TypeScript와 연동). 오케스트레이터 또는 클라이언트 헬퍼
  • go/go.mod, go/go.sum — 모듈 의존성
  • go/examples/ — 사용 예제

제외 경로

  • go/packets/ — protocol 도메인

주요 구성 요소

  • TcpServer / TcpClient — TCP 서버/클라이언트
  • WsServer / WsClient — WS/WSS 서버/클라이언트
  • WsServerOptions / NewWsServerWithOptions — browser client Origin 허용 등 WebSocket accept option 주입
  • Communicator — 메시지 라우팅 및 요청-응답 상관관계 공통 로직
  • Transport / ParserMap — 전송 추상화와 타입명 기반 파서 등록
  • AddListenerTyped, AddRequestListenerTyped, SendRequestTyped — 타입 헬퍼
  • HeartbeatTimer / baseClient — 하트비트 및 연결 종료 공통 처리

유지할 패턴

  • go test ./...로 테스트 실행
  • ParserMap으로 타입명 → 파서 함수 등록
  • TLS 변형은 기본 구현과 같은 인터페이스 유지
  • Dart.web 크로스 테스트 서버는 필요한 OriginPatterns를 WsServerOptions로 명시한다
  • PacketBase의 typeName, nonce, data, responseNonce 의미는 PROTOCOL.md와 맞춘다

다른 도메인과의 경계

  • protocol: packets/ 패키지를 import하지만, 패키지 내용은 protocol 도메인
  • dart/kotlin/python/typescript: crosstest에서 상호 연동. Dart.web은 browser client runtime으로만 연동

금지 사항

  • go/packets/ proto 파일을 메시지 스키마 변경 목적으로 편집하지 않는다
  • Communicator에 애플리케이션 도메인 로직(인증, 세션 등)을 추가하지 않는다