프로토콜 및 바이너리 직렬화

Redis RESP 파서원본 바이트와 타입을 함께 확인

이스케이프된 RESP 텍스트 또는 Hex 바이트를 붙여 넣고 서버 연결 없이 프레임을 살펴보세요.

Redis RESP 파서

RESP 입력

분석 결과

RESP 데이터를 입력하거나 예제를 고르세요.

브라우저에서만 분석하며 Redis에 연결하거나 업로드하지 않습니다.

옵션

RESP 데이터를 입력하거나 예제를 고르세요.

Redis 로그에 $5나 *3이 보일 때 클라이언트가 출력한 값만으로는 길이 오류를 찾기 어렵습니다. Redis RESP 파서는 각 접두어와 바이트 범위를 트리로 보여 주어 실제 통신 데이터의 경계를 확인하게 합니다.

Redis RESP 파서를 쓰는 이유

정적인 RESP 데이터를 읽으면서 원래의 타입과 바이트 경계를 남깁니다.

스트리밍 청크를 하나씩 검증

Redis RESP 파서는 RESP3 청크마다 선언된 바이트 길이와 종료 표시를 확인한 뒤 값을 합칩니다. 트리에는 청크 수가 남고, 끝나지 않은 데이터는 완성된 값으로 표시하지 않습니다.

여러 바이트 청크가 하나의 타입 값으로 합쳐지고 경계가 보이는 그림

JSON에서도 원래 타입 유지

바이너리 bulk는 Hex로, map은 순서 있는 키와 값 쌍으로, 속성은 뒤따르는 값과 함께 내보냅니다. 일반 JSON 객체로 바꾸면 사라질 차이를 명시합니다.

바이너리 값과 숫자 map 키와 속성이 서로 다른 JSON 필드로 이어지는 그림

디코딩 결과를 확인하는 순서

01

입력 표현을 먼저 맞추기

기본 모드는 문자 그대로의 \r과 \n을 CRLF 바이트로 바꿉니다. 텍스트가 아닌 bulk는 Hex를 사용하세요. 단독 LF는 자동으로 고치지 않습니다.

  • 길이는 보이는 글자 수가 아니라 UTF-8 바이트 수입니다.
02

알고 있는 버전만 지정하기

자동 모드는 RESP2와 RESP3의 공통 타입을 읽고 RESP3 전용 접두어를 표시합니다. RESP2를 고르면 전용 타입을 거부합니다.

  • 자동 분석은 350ms 뒤 실행되며, 수동 모드는 Ctrl/Cmd + Enter를 지원합니다.
03

범위와 결과를 검토하기

타입 트리에서 바이트 범위와 선언 길이를 비교하세요. 맨 위 문자열 배열에는 명령 형태를 표시하지만 실제 명령의 유효성은 판단하지 않습니다.

  • 입력이나 옵션이 바뀌면 다시 분석할 때까지 내보내기를 막습니다.

RESP 포맷의 세부 구조

RESP2와 RESP3 타입 트리

레디스 RESP 프로토콜의 null bulk와 빈 bulk, 배열과 map, push, 서버 오류 값을 서로 구별합니다. 오류 응답을 구문 분석 실패로 처리하지 않습니다.

엄격한 바이트 길이 검사

bulk 길이와 실제 UTF-8 바이트 및 마지막 CRLF가 다르면 첫 오류의 바이트 오프셋과 입력 줄을 표시합니다.

연속 프레임과 명령 형태

파이프라인의 여러 프레임을 순서대로 보여 줍니다. 문자열 배열의 첫 요소가 명령처럼 보여도 서버가 받아들일지는 추측하지 않습니다.

타입 보존 JSON

RESP 파싱 결과에서 바이너리 Hex, 큰 정수의 십진수 문자열, 순서 있는 map 항목과 RESP3 속성을 유지합니다.

바이트만으로 알 수 없는 것

서버에 연결하지 않음
붙여 넣은 데이터만 분석합니다. SET을 실행하거나 키를 조회하거나 데이터베이스 상태를 흉내 내지 않습니다.
실제 협상 버전은 추론하지 않음
RESP2와 RESP3 공통 타입의 인코딩은 같습니다. 자동 표시는 분석에 필요한 최소 버전이지 연결의 HELLO 결과가 아닙니다.
바이너리를 텍스트로 강제 변환하지 않음
유효하지 않은 UTF-8 bulk는 Hex로 남깁니다. 깨진 문자나 일반 JSON 객체로 원본을 덮지 않습니다.
완전하고 제한된 프레임만 허용
Redis RESP 파서는 정확한 CRLF와 바이트 길이를 요구하며 최대 1 MiB, 1000프레임, 10000노드, 64단계를 읽습니다. 청크가 빠지면 오류입니다.

Redis RESP 파서 자주 묻는 질문

Redis 프로토콜 데이터를 어떻게 분석하나요?

이스케이프된 RESP 텍스트나 Hex 바이트를 넣으면 각 접두어와 길이를 타입 트리에서 볼 수 있습니다. 이 도구는 이미 확보한 통신 데이터만 읽습니다.

RESP 포맷에서 bulk 길이는 무엇을 세나요?

$ 다음 숫자는 문자 수가 아니라 바이트 수입니다. 한글은 UTF-8에서 여러 바이트이므로 눈에 보이는 글자 수와 다를 수 있습니다.

RESP3와 RESP2의 차이는 어떻게 확인하나요?

map, 불리언, push 같은 RESP3 전용 타입을 찾아 표시합니다. 공통 타입만 있다면 실제 연결이 어느 버전을 사용했는지는 알 수 없습니다.

Redis 명령도 이 파서로 확인할 수 있나요?

맨 위에 문자열 배열이 있으면 명령 이름과 인자 수를 보여 줍니다. 명령을 실행하거나 서버가 허용할지 검증하지는 않습니다.

여러 RESP 응답을 한 번에 볼 수 있나요?

완전한 프레임을 이어 붙인 입력은 순서대로 분석합니다. 중간에 끊긴 프레임이 있으면 오류 위치를 보고하고 완전한 결과처럼 내보내지 않습니다.

다른 질문이 있나요?

캡처한 프레임을 Redis RESP 파서로 확인

클라이언트를 수정하기 전에 처음 어긋난 바이트를 찾으세요. Redis RESP 파서는 전체 입력을 성공적으로 읽었을 때만 타입 JSON을 내보냅니다.

처리는 브라우저 안에서만 이루어집니다.