과제 내용
1. src/ 디렉토리 밑에 commands로 시작하는 다음과 같은 파일들이 있습니다.
- src/commands.h
- src/commands.c
- src/commands.def
2. Redis에 echo{영어이름} command를 추가해보세요.
- 영어이름은 영어대소문자와 숫자로만 만들어주시면 됩니다.
- 실제 함수만 추가가 아니라, 함수 구현이 추가되어야 합니다.
- 1차적으로는 echoCommand를 찾아서 함수명만 만들어주시면 됩니다.
- commands.def 에 추가할 함수를 echoCommand를 참고해서 추가하고, server.c 에도 echoCommand를 참고해서 추가하면 됩니다.
수행 내용
1. 파일 확인
commands.def
echo 명령을 찾아보았습니다. 여러 값 들과 함께 있습니다.
server.h
echoCommand가 있습니다.
server.c
echoCommand 함수가 정의되어 있습니다.
commands.c
commands.def의 값들이 어떤 구성으로 되어있는지 알 수 있습니다.
2. 새 명령어 추가
/* Automatically generated by generate-command-code.py, do not edit. */
commands.def에 이 파일은 generate-command-code.py에 의해 자동 생성되므로 편집하지 말라고 되어있습니다.
함수를 직접 추가하는 것은 안 되겠네요.
utils/generate-command-code.py을 보니 commands 내부의 json 파일을 받아서 create_command함수를 실행합니다.
create_command 함수를 통해서 명령어가 생성된다고 추측할 수 있습니다.
그럼 commands 디렉토리 내부에 {command}.json 으로 명령을 생성해주면 될 것 같습니다.
src/commands 디렉토리 내부에 생성하고 싶은 명령어의 이름으로 json 파일을 만들었습니다.
기존에 있던 echo와 같은 기능을 수행할 것이기 때문에 echo.json의 내용을 그대로 가져와 이름과 function만 변경해주었습니다.
server.h와 server.c에 echosummerCommand를 추가합니다.
컴파일을 위해 make를 해줍니다.
generate-command-code.py 파일에서 processing json files... 이후에 명령어를 생성해주었으니 commands.def에서 명령어가 생성된 것을 확인할 수 있을 것입니다.
commands.def 파일을 확인해보니 echosummer 명령어가 새로 생겼습니다.
make test
make install
redis-server
test와 install 후에 서버를 실행시킵니다.
새로운 창을 열어 cli를 실행시키고 명령어가 작동하는지 확인해봅니다.
알게된 것
Redis는 src/commands/ 디렉토리 내에 json 파일로 명령어가 저장되어 있습니다.
server.c와 server.h에서 실제 명령어가 하는 행동을 정의합니다.
컴파일을 하면 generate-command-code.py에서 json 파일들을 읽어와 명령어를 생성하고 commands.def에 생성된 명령들을 기록합니다.
서버를 실행시키면 cli에서 명령어를 실행시킬 수 있습니다.