이 튜토리얼에서는 Redis 데이터 저장소에 키로 저장된 리스트 값의 마지막 요소를 제거하고 반환하는 방법을 알아봅니다. 이를 위해 Redis의 RPOP 명령어와 BRPOP 명령어를 사용합니다.
RPOP 명령어란?
RPOP 명령어는 지정된 키에 저장된 리스트 값의 마지막 요소를 제거하고 그 값을 반환하는 데 사용됩니다. 키가 존재하지 않으면 nil을 반환하며, 키는 존재하지만 저장된 값이 리스트(list) 타입이 아닌 경우에는 에러를 반환합니다.
Redis RPOP 명령어의 기본 문법은 다음과 같습니다.
문법
redis host:port> RPOP <keyname>
반환값
- (string) 리스트의 마지막 요소를 나타내는 문자열 응답
- (nil) 키가 존재하지 않는 경우
- Error 키가 존재하지만 저장된 값이 리스트 타입이 아닌 경우
예제

BRPOP 명령어란?
BRPOP 명령어는 RPOP 명령어의 블로킹(blocking) 버전입니다. 지정된 리스트들에서 꺼낼(pop) 요소가 없을 때 작업을 차단합니다. 다시 말해, 지정된 모든 리스트가 비어 있거나 지정된 모든 키가 존재하지 않으면 작업이 블로킹됩니다.
BRPOP은 왼쪽에서 오른쪽 순서로 지정된 키들을 차례대로 검사하며, 비어 있지 않은 첫 번째 리스트 값의 마지막 요소를 제거하고 반환합니다. 예를 들어 BRPOP list1 list2 list3 0 명령어를 실행했을 때, list1 키가 존재하지 않고(빈 리스트로 간주), list2가 빈 리스트이며, list3에 세 개의 요소가 담겨 있다면, list1부터 list3까지 검사하는 과정에서 처음으로 비어 있지 않은 리스트인 list3의 마지막 요소를 제거하여 반환합니다.
지정된 키가 존재하지 않거나 해당 키의 리스트 값이 비어 있는 경우, BRPOP은 다른 클라이언트가 LPUSH, RPUSH, LINSERT 같은 명령어로 지정된 키 중 하나에 새 요소를 삽입할 때까지 작업을 차단합니다. 새로운 요소가 리스트 중 하나에 추가되면 클라이언트의 블로킹이 해제되면서, 해당 키의 이름과 함께 팝된 값이 반환됩니다.
BRPOP으로 인해 클라이언트가 블로킹된 상태에서 0이 아닌 타임아웃(timeout)이 지정된 경우에는, 지정된 시간이 만료될 때까지 어떤 키에도 삽입 작업이 일어나지 않으면 nil 값을 반환하며 블로킹이 해제됩니다.
타임아웃 인자는 블로킹할 최대 시간(초)을 나타내는 정수 값입니다. 타임아웃을 0초로 설정하면 새 요소가 들어올 때까지 무기한 대기할 수 있습니다.
Redis BRPOP 명령어의 기본 문법은 다음과 같습니다.
문법
redis host:port> BRPOP <keyname-1> [ <keyname> ] <timeout>
반환값
- (array) 두 개의 요소를 가진 배열 응답: 첫 번째 요소는 팝된 요소가 속한 키의 이름,
두 번째 요소는 팝된 요소 자체입니다.
- (nil) 요소를 꺼내지 못한 채 타임아웃이 만료된 경우
예제

참고 자료
- RPOP 명령어 공식 문서(RPOP Command Docs)
- BRPOP 명령어 공식 문서(BRPOP Command Docs)
지금까지 Redis 데이터 저장소에 저장된 리스트 값의 마지막 요소를 제거하고 반환하는 방법에 대해 알아보았습니다. 이 글이 도움이 되었다면 댓글로 의견을 남겨주시고, 필요한 분들에게 공유해 주세요.