Redis는 가볍고 빠른 인메모리 데이터 구조 서버로, 커스텀 기능 추가가 비교적 직관적입니다. 이번 포스팅에서는 Redis의 기본 명령어 중 하나인 ECHO와 동일한 동작을 수행하는 새로운 명령어를 추가하는 과정을 다룹니다.
✅ 목표
- ECHO 명령어처럼 문자열을 그대로 반환하는 ECHO_DUCK 명령어 추가
- Redis 서버에 새로운 명령어를 등록하는 과정 이해
- Redis 내부 명령어 등록 시스템을 실습 기반으로 학습
🔧 사전 준비
실습은 오픈소스 valkey 저장소를 clone해서 사용합니다.
GitHub - valkey-io/valkey: A flexible distributed key-value database that is optimized for caching and other realtime workloads.
A flexible distributed key-value database that is optimized for caching and other realtime workloads. - valkey-io/valkey
github.com
📁 주요 파일 설명
- server.c: Redis의 핵심 기능이 구현된 메인 소스 파일입니다. 대부분의 명령어 처리 함수들이 이곳에 정의되어 있습니다.
- server.h: 전역 함수 선언, 전역 변수, 자료구조 정의 등이 들어있는 헤더 파일입니다.
- commands.def: 이 파일에서는 모든 명령어의 정의, 속성, 그룹 등을 관리합니다.
🛠️ 1단계: 명령어 함수 추가 (server.c)
echoCommand와 동일하게 동작하는 echo_duckCommand 함수를 작성합니다.
server.c 하단에 다음 내용을 추가합니다.
- client *c는 클라이언트 요청 정보를 담고 있습니다.
- addReplyBulk() 함수로 문자열 그대로 응답합니다.
📌 2단계: 함수 선언 추가 (server.h)
다음 코드를 server.h 파일에 추가해줍니다.
헤더 파일에 선언하지 않으면, 빌드 과정에서 외부 참조 오류가 납니다.
📄 3단계: 명령어 등록 (commands.def)
명령어를 시스템에 등록하기 위해 commands.def 파일에 다음 한 줄을 추가합니다.
{MAKE_CMD("echo_duck",
"Returns the given string.",
"O(1)",
"1.0.0",
CMD_DOC_NONE,
NULL,
NULL,
"connection",
COMMAND_GROUP_CONNECTION,
ECHO_History,
0,
ECHO_Tips,
0,
echoDuckCommand,
2,
CMD_LOADING|CMD_STALE|CMD_FAST,
ACL_CATEGORY_CONNECTION,
ECHO_Keyspecs,
0,
NULL,
1
), .args=ECHO_Args},
🔁 4단계: Redis 빌드
이제 수정한 레디스를 다시 빌드합니다.
🧪 5단계: 명령어 테스트
레디스 서버를 실행하고 redis-cli로 접속해서 명령어를 실행하세요.
성공적으로 동작한다면 커맨드 등록 완료입니다! 🎉
'Redis' 카테고리의 다른 글
🦆 Redis 커맨드를 직접 만들어보자 - prefix 붙이기 (0) | 2025.05.22 |
---|