본문으로 바로가기
본문으로 바로가기

기본 사항

참고

클라이언트 프로토콜 참조 문서는 준비 중입니다.

예제는 대부분 Go로만 제공됩니다.

이 문서는 ClickHouse TCP 클라이언트에서 사용하는 이진 프로토콜을 설명합니다.

Varint

길이, 패킷 코드 등에는 unsigned varint 인코딩을 사용합니다. binary.PutUvarintbinary.ReadUvarint를 사용합니다.

참고

Signed varint는 사용하지 않습니다.

String

가변 길이 문자열은 (length, value) 형태로 인코딩되며, 여기서 lengthvarint이고 value는 UTF-8 문자열입니다.

참조

OOM(Out Of Memory)을 방지하기 위해 length를 검증해야 합니다:

0 ≤ len < MAX

s := "Hello, world!"

// 문자열 길이를 uvarint로 기록합니다.
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

// 문자열 값을 기록합니다.
buf = append(buf, s...)
00000000  0d 48 65 6c 6c 6f 2c 20  77 6f 72 6c 64 21        |.Hello, world!|

정수

ClickHouse는 고정 크기 정수 타입에 **리틀 엔디언(Little Endian)**을 사용합니다.

Int32

v := int32(1000)

// Encode.
buf := make([]byte, 8)
binary.LittleEndian.PutUint32(buf, uint32(v))

// Decode.
d := int32(binary.LittleEndian.Uint32(buf))
fmt.Println(d) // 1000
00000000  e8 03 00 00 00 00 00 00                           |........|

Boolean

Boolean 값은 1바이트로 표현되며, 1true, 0false를 나타냅니다.