이전 게시물에서는 Redis에 받은 내용을 그대로 다시 돌려주는 echo 명령을 만들어봤다.
이번 게시물에서는 redis-cli에 echo_prefix_haward abc 라고 보내면 응답이 abc 가 아니라 haward_abc 로 응답이 오도록 만드는 것입니다.
목표
> echo_prefix_haward abc
hawardabc
1. 커맨드 함수 구현(server.c)
Redis에서는 문자열을 처리할 때 SDS(Simple Dynamic String) 이라는 Redis 전용 문자열 구조체를 사용합니다. SDS 구조체를 조작해서 prefix가 붙은 문자열을 만들어 볼 수 있습니다.
이전에 봤던 것 처럼 server.c에 구현해줍니다.

void echoPrefixHaward(client *c){
sds s = sdscatfmt(sdsempty(), "haward%s", c->argv[1]->ptr);
addReplyBulkSds(c,s);
}
- sds : Redis에서 사용하는 안전한 문자열입니다.
- 기존 C언어의 char * 문자열보다 동적 확장이 가능하고 안전성을 높였습니다.
- sdsempty(): 빈 문자열을 생성합니다. NULL이 아닌 sds 객체로 초기화됩니다.
- sdscatfmt(): Redis 내부에서 최적화된 printf()입니다.
- *addReplyBulkSds(client c, sds s) : 클라이언트에게 응답을 SDS 형태로 전송합니다. 이 함수 내부에서 sdsfree()까지 수행하기 떄문에 따로 free 할 필요는 없습니다.
그외 주요 함수를 간단히 소개하자면
- AddReplyBulk(client *c, robj *obj) : redisObject(robj)를 입력받아 RESP 형식에 맞게 serialize하여 클라이언트에 반환합니다.
여기서 redisObject가 나오는데 레디스는 redisObject라는 구조체로 데이터를 표현합니다. (Valkey에선 serverObject

[redis 소스코드 server.h 참고]
serverObject에는 type, encoding 등 데이터에 대한 정보가 저장되고
실제 데이터는 void *ptr 위치에 존재합니다.
sds에 대한 더 많은 정보는 아래 링크를 참고하시길 바랍니다.
https://redisgate.kr/redis/configuration/internal_string.php
https://github.com/antirez/sds
https://redis.io/docs/latest/operate/oss_and_stack/reference/internals/internals-sds/
2. 빌드 및 실행


이제 이전 게시물과 똑같이 선언 추가, command.def 등록 후 빌드 해주면 됩니다.
무슨말인지 모르겠다면 이 게시물을 참고하시길.
https://haward.tistory.com/264
짜잔 다음과 같이 명령어가 생겼습니다.

느낀점
오픈소스 어렵게 생각했는데 생각보다 쉬운 것 같다는 생각이 드네요
언어에 대한 이해만 있고 공식문서를 차근차근 따라가다보면 그렇게 어려울 것 없이 사용할 수 있을 것 같고 왜 오픈소스에 기여하라는지도 알겠습니다. 기여를 하려면 어떤 기능이 어떻게 구현 되어있는지에 대한 이해가 필요하기 때문인 것 같네요.
Redis를 시작해서 다른 오픈소스에도 관심을 가져봐야겠습니다.
'Backend' 카테고리의 다른 글
Redis(valkey)에 직접 커맨드를 추가해보자. (0) | 2025.05.17 |
---|---|
Aws Ec2에 무료로 spring 서버 올리기 (5) | 2024.10.10 |
Aws SQS Spring 스캐줄러를 사용한 Listener 관리하기 (1) | 2024.10.06 |
[spring swagger로 에러문서화하기] 에러를 문서로 만들기 (2/2) (2) | 2024.09.28 |
[spring swagger로 에러문서화하기] 에러 형식 정의 및 handler 정의 (1/2) (1) | 2024.09.21 |