전체 글 219

커스텀 echo 커멘드에 프리픽스 추가해보기

echoblue 명령어를 처음 구현했을 때는 echo와 완전히 동일한 동작이었습니다. 이번에는 입력값을 그대로 반환하는 대신, echo2_ prefix를 붙여서 반환하도록 기능을 확장해봤습니다. echoblue "abc" → echo2_abcechoblue "hello world" → echo2_hello world 핸들러 수정 변경이 필요한 곳은 src/server.c의 핸들러 함수 하나입니다.변경 전:void echoblueCommand(client *c) { addReplyBulk(c, c->argv[1]);}변경 후: void echoblueCommand(client *c) { robj *obj = getDecodedObject(c->argv[1]); sds r..

소스를 분석하고 echoblue 커맨드를 valkey 에 추가해보기

오픈소스 기여를 공부하면서 Valkey 프로젝트에 간단한 명령어를 직접 추가해보는 과제를 진행해봤습니다. 대상은 echoblue라는 명령어로, Redis의 ECHO처럼 입력한 문자열을 그대로 반환하는 기능입니다. 단순해 보이지만 실제로 명령어 하나가 등록되기까지 건드려야 하는 파일이 여러 개이고, 내부 구조를 이해하지 않으면 어디서 시작해야 할지 막막합니다. 이 글에서는 구현 전 분석부터 테스트 통과까지 전 과정을 기록해봤습니다. 기존 echo 명령어 분석 새 명령어를 추가하기 전에 기존 echo 명령어가 어떻게 구현되어 있는지 파악하는 것이 먼저였습니다. echo는 가장 단순한 명령어 중 하나라 레퍼런스로 삼기 좋았습니다. 관련 파일 목록 - src/commands/echo.json — 명령어..

Valkey RESP 실습해보기

Valkey RESP 를 실습해보았습니다. 환경은 docker 로 로컬에 Valkey 이미지를 띄운 후 테스트했습니다.# docker-compose.ymlversion: '3.8'services: valkey: image: valkey/valkey:latest container_name: valkey-server ports: - "6379:6379" docker-compose up -dtelnet localhost 6379 간단한 SET/GET 명령어*3$3SET$5hello$5world+OK*2$3GET$5hello$5world ZSET ZADD / ZRANGE 명령어*4$4ZADD$11leaderboard$41000$7player1:1*4$6ZRANGE$11leade..

[과제] git object 뜯어보기

파이썬 파일을 만들고 커밋을 날려보며 object 파일을 확인해봤습니다 Tree 오브젝트 : 파일이름인 test.py 와 Blob 오브젝트의 해시, 파일모드 및 타입을 알 수 있습니다. Blob 오브젝트 : 파일의 내용을 표시해줍니다.커밋을 두번 날렸는데 blob 오브젝트도 두개가 생겼습니다. 이 파일을 보기전엔 파일수정이 되면 수정된 파트만 가지고있나? 라고생각했는데 그게아니라 수정버전의 모든 파일내용을 따로 기록하고있는걸 알 수 있었습니다. Commit 오브젝트 : 트리오브젝트의 해시를 가지고있으며 커밋메세지 작성정보와 작성자를 가지고있습니다.

DB 장애에 Pod가 죽었다... Liveness Probe에 /actuator/health 쓰면 안 되는 이유

잘 수정되지 않는 운영 환경 서버에서 어느 날 DB에 문제가 발생했는데, Pod가 죽는 현상을 목격했습니다. 분명 Datadog 모니터링상 메모리/CPU 등 어떠한 지표도 크게 문제가 되지 않았는데 Pod가 죽으니, "왜?" 라는 생각과 함께 대응하기 어려웠던 부분이 있었습니다.수습 후에 원인을 찾았고, 알아봤던 내용을 기록합니다.주 원인은 Spring Actuator Health 엔드포인트 설정이었습니다. 기존 K8s의 Liveness Probe 설정을 확인해보니 /actuator/health를 찌르고 있었습니다.Liveness Probe와 Readiness Probe이번 이슈의 원인을 이해하려면 이 둘의 차이를 짚고 넘어가야 합니다.Liveness Probe는 "이 프로세스가 아직 동작하고 있는가?"..

개발/스프링 2026.03.26

도커 업데이트 이후 Testcontainers 테스트 실패 이슈 해결 기록

사내에서 사용하는 소프트웨어들은 보안팀을 통해 버전 관리가 되고 있고,이번에 도커도 29 버전으로 업데이트가 진행되었습니다. 제가 진행 중인 프로젝트에서는 DB 등 외부 자원을 포함한 테스트를 할 때 Testcontainers(1.21.0 버전) 를 활용하고 있습니다.그런데 도커를 업데이트한 이후, 로컬에서 테스트 코드를 실행했을 때 아래와 같은 에러 메시지가 출력되며 테스트가 동작하지 않았습니다.Caused by: java.lang.IllegalStateException: Could not find a valid Docker environment.Please see logs and check configuration...Could not find a valid Docker environment. Ple..

개발/이슈 2025.11.25

[릿코드 8] String to Integer (atoi) (파이썬/python)

https://leetcode.com/problems/string-to-integer-atoi/description/ String to Integer (atoi) - LeetCode Can you solve this real interview question? String to Integer (atoi) - Implement the myAtoi(string s) function, which converts a string to a 32-bit signed integer (similar to C/C++'s atoi function). The algorithm for myAtoi(string s) is as follows: 1. Read leetcode.com 단순히 문제에서 제시하는 상황을 구현하는문제였습..

PS/릿코드 2023.04.04

[릿코드 380] Insert Delete GetRandom O(1) (파이썬/python)

https://leetcode.com/problems/insert-delete-getrandom-o1/description/ Insert Delete GetRandom O(1) - LeetCode Can you solve this real interview question? Insert Delete GetRandom O(1) - Implement the RandomizedSet class: * RandomizedSet() Initializes the RandomizedSet object. * bool insert(int val) Inserts an item val into the set if not present. Returns true if th leetcode.com 릿코드에는 이런 유형도있구나 생각..

PS/릿코드 2023.03.24