728x90
🤖 RESP(Redis Serialization Protocol)란?
- Redis 서버는 클라이언트와 통신할 때 RESP(Redis Serialization Protocol)라는 간단한 텍스트 기반 프로토콜을 사용한다.
- 일반적인 서버와 클라이언트가 JSON 형식으로 데이터를 주고받는 것처럼 클라이언트가 명령을 보낼 때와 Redis 서버가 응답할 때 모두 정해진 포맷으로 문자열을 주고받는 방식이다.
😗 간단한 예시
# 클라이언트
$ set email gildong@email.email
- 클라이언트에서 사용자가 입력하는 명령어이다.
# RESP로 변환되어 서버에는 아래와 같이 전송됨
*3\r\n$3\r\nSET\r\n$5\r\nname\r\n$19\r\ngildong@email.email\r\n
- Redis 서버로 전송될 때 변환되는 형식이다.
✍🏻 설명
| 내용 | 의미 |
| *3 | 총 3개의 파트(SET, name, Alice) |
| $3 SET | 첫 번째 파트는 길이 3인 문자열 SET |
| $5 name | 두 번째 파트는 길이 5인 문자열 name |
| $19 gildong@email.email | 세 번째 파트는 길이 19인 문자열 gildong@email.email |
🥸 실습
# redis가 실행중인 로컬에서(redis cli 아님X)
$ echo -e '*3\r\n$3\r\nSET\r\n$5\r\nemail\r\n$19\r\ngildong@email.email\r\n' | nc localhost 6379
# 출력
+OK
# 그대로 로컬에서
$ echo -e "*2\r\n$3\r\nGET\r\n$5\r\nemail\r\n" | nc localhost 6379
# 출력
$19
gildong@email.email
echo 및 nc 명령어를 이용해 프로토콜 그대로 redis서버에 명령을 보내면 클라이언트에서 입력한 명령어와 똑같이 동작한다.
- echo -e: 문자열 내의 이스케이프 문자(\r\n 등)를 실제로 해석해서 출력한다.
- | nc localhost 6379: 위에서 만든 명령을 Netcat을 통해 로컬에서 실행 중인 Redis 서버에 TCP로 전송한다.
- | : 앞에서 생성한 문자열을 파이프로 넘김.
- nc : netcat 명령어로, TCP/UDP 연결을 만들어 네트워크 통신을 할 수 있게 해주는 도구.
- localhost 6379 : 로컬에 설치된 Redis 서버의 기본 포트(6379)로 연결.
☝🏻 RESP v2
- Redis 6 버전 이전에서 기본으로 사용되던 텍스트 기반 프로토콜이다.
- 위의 예시가 RESP v2 버전이다.
- 간단하고 빠르지만 제한적인 구조를 가진다.
✌🏻 RESP v3
- Redis 6부터 도입된 향상된 프로토콜이다.
- 더 풍부하고 표현력 있는 구조를 제공한다.
- HELLO 3 명령어로 동작할 수 있다.
- JSON과 유사한 구조가 필요한 경우나 map, set, null 등을 명확히 다루고 싶을 때 사용한다.
👀 예시

✅ 기본 구조 요약 정리
| 타입명 | RESP2 구분자 | RESP3 구분자 | 설명 |
| Simple String | + | + | 일반 문자열 응답 (예: +OK) |
| Error | - | - | 에러 메시지 (예: -ERR something) |
| Integer | : | : | 숫자 응답 (예: :100) |
| Bulk String | $ | $ | 길이 명시된 문자열 (예: $5\r\nhello) |
| Null | $-1 | _ | RESP2는 null bulk string, RESP3는 _ |
| Array | * | * | 일반 배열 |
| Null Array | *-1 | ~0 | RESP2는 null array, RESP3는 빈 set/array 등으로 구분 |
| Boolean | ❌ | # | RESP2는 없음, RESP3는 #t(true), #f(false) |
| Map | ❌ | % | Key-Value 쌍 구조 |
| Set | ❌ | ~ | 중복 없는 값들의 집합 |
| Push message | ❌ | > | Pub/Sub, client tracking 등 서버 푸시 메시지 |
| Double | ❌ | , | 부동 소수점 숫자 (예: ,3.14) |
| Big number | ❌ | ( | 큰 정수 (BigInteger 등) |
| Verbatim String | ❌ | = | 형식을 포함한 문자열 (예: =txt:Hello) |
참고
2025 오픈소스 컨트리뷰션 아카데미 Git & Redis 수업 자료
ChatGPT
728x90
'넓고 얕은 데이터베이스 지식 > NoSQL' 카테고리의 다른 글
| Valkey에 추가한 나만의 echo 명령어 분석하기 (1) | 2025.05.27 |
|---|---|
| Valkey 오픈 소스를 직접 빌드하고 나만의 echo 명령어를 추가해보자 (0) | 2025.05.13 |
| Redis & Valkey에 대해 알아보자 - 원자성과 자료구조(Siphash, Skiplist) (2) | 2025.05.11 |
| Redis & Valkey에 대해 알아보자 - 개념, 역사, 캐싱, 사용 분야 (0) | 2025.05.09 |
| 속성으로 익히는 mongoDB (관련 용어 & 명령어 요약 정리) (0) | 2023.08.11 |