이번 튜토리얼에서는 Redis의 SPOP과 SREM 명령어를 사용하여 키에 저장된 집합(Set) 값에서 요소를 삭제하는 방법을 알아보겠습니다. 두 명령어는 모두 집합에서 요소를 제거하지만, 동작 방식에 중요한 차이가 있습니다.
SPOP 명령어란?
SPOP 명령어는 지정된 키에 저장된 집합에서 하나 이상의 임의(random) 요소를 제거하고 그 값을 반환합니다. 어떤 요소가 선택될지 예측할 수 없기 때문에, 무작위 추첨이나 샘플링 작업에 활용하기 좋습니다.
문법(Syntax)
redis host:post> SPOP <key name> [count]
여기서 count는 집합에서 제거할 요소의 총 개수를 의미합니다. count를 생략하면 기본적으로 한 개의 요소만 제거됩니다.
출력 결과(Output)
- (문자열 응답): 집합에서 제거된 요소들 - (nil): 키가 존재하지 않는 경우
예제(Example)

SREM 명령어란?
SREM 명령어는 키에 저장된 집합에서 지정한 특정 요소들을 삭제합니다. 집합에 존재하지 않는 멤버가 포함되어 있으면 해당 멤버는 자동으로 무시되며 오류가 발생하지 않습니다.
문법(Syntax)
redis host:post> SREM <key name 1> <key name 2>
삭제하고 싶은 멤버가 여러 개라면 공백으로 구분하여 한 번에 여러 요소를 전달할 수 있습니다.
출력 결과(Output)
- (integer): 집합에서 실제로 삭제된 요소의 개수 (존재하지 않는 멤버는 제외) - 0: 키가 존재하지 않는 경우 - 에러(error): 키는 존재하지만 저장된 값이 집합(Set) 타입이 아닌 경우
예제(Example)

SPOP과 SREM의 차이점
두 명령어의 핵심 차이는 다음과 같습니다. SPOP은 어떤 요소가 제거될지 지정할 수 없고 무작위로 선택되는 반면, SREM은 삭제할 멤버를 직접 지정할 수 있습니다. 따라서 무작위 추출이 필요한 경우에는 SPOP을, 특정 데이터를 정확히 제거해야 하는 경우에는 SREM을 사용하는 것이 적합합니다.
참고 자료(References)
- SPOP 명령어 공식 문서(Redis Docs)
- SREM 명령어 공식 문서(Redis Docs)
지금까지 Redis 데이터 저장소에 저장된 집합(Set) 값에서 요소를 삭제하는 방법을 살펴보았습니다. 내용이 도움이 되셨다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!