데이터베이스/Redis

Redis의 보석, Sorted Set (ZSET) 완벽 정리

Jinwookoh 2025. 8. 30. 22:30

 

안녕하세요! 오늘은 Redis의 다양한 자료구조 중에서도 특히 강력하고 유용한 **Sorted Set (ZSET)**에 대해 깊이 파고들어 보려 합니다. ZSET은 단순히 데이터를 저장하는 것을 넘어, 정렬, 순위, 범위 검색 등의 복잡한 기능을 놀라울 만큼 효율적으로 처리합니다. 블로그 포스팅처럼 쉽게 풀어 설명해 드릴 테니, 끝까지 함께해 주세요!


ZSET이란 무엇인가요?

Sorted Set은 이름 그대로 정렬된 집합입니다. 일반적인 Set이 멤버의 고유성만 보장하는 데 비해, ZSET은 모든 멤버가 **스코어(Score)**라는 부동 소수점 값을 가집니다. Redis는 이 스코어를 기준으로 멤버들을 오름차순으로 항상 정렬된 상태로 유지합니다.

핵심 특징:

  • 정렬: 멤버들은 스코어 값에 따라 자동으로 정렬됩니다. 스코어가 같으면 멤버의 사전순으로 정렬됩니다.
  • 고유성: Set처럼 모든 멤버는 유일합니다. 이미 존재하는 멤버를 다시 추가하면 스코어만 업데이트됩니다.
  • 성능: 정렬된 상태를 유지하기 때문에 특정 범위의 데이터를 조회하거나 순위를 찾는 작업이 매우 빠릅니다.

ZSET은 언제 사용하면 좋을까요?

ZSET의 정렬 기능은 다양한 애플리케이션에서 빛을 발합니다. 특히 다음과 같은 경우에 ZSET은 완벽한 솔루션이 됩니다.

1. 실시간 리더보드 (Leaderboard) 게임 순위, 인기 투표 랭킹 등 점수를 기준으로 한 랭킹 시스템을 만들 때 ZSET은 가장 효율적인 선택입니다. 새로운 점수가 들어올 때마다 자동으로 순위가 재정렬되므로, 복잡한 쿼리나 별도의 정렬 작업 없이도 실시간으로 랭킹을 보여줄 수 있습니다.

2. 평점/인기 기반 정렬 목록 상품의 평점, 게시물의 좋아요 수, 동영상의 조회수 등을 스코어로 사용하여 인기순으로 정렬된 목록을 손쉽게 구현할 수 있습니다. 예를 들어, ZADD 명령어로 좋아요 수를 업데이트하면, 좋아요 수가 가장 많은 게시물이 자동으로 목록의 맨 위로 올라옵니다.

3. 시간 기반 데이터 정렬 게시글의 생성 타임스탬프를 스코어로 사용하여 최신순으로 정렬된 목록을 만들 수 있습니다. ZRANGE 명령어로 특정 시간 범위 내의 게시물을 조회하거나, 최신 글 100개를 가져오는 것도 간단합니다.


ZSET 핵심 명령어 훑어보기

이제 실제로 ZSET을 다룰 때 가장 많이 사용하는 명령어들을 알아볼까요?

  • ZADD key score member: ZSET에 스코어와 멤버를 추가합니다. 이미 존재하는 멤버는 스코어가 업데이트됩니다.
  • 코드 스니펫
     
    ZADD my_ranking 100 "user:Alice"
    ZADD my_ranking 150 "user:Bob"
    ZADD my_ranking 120 "user:Charlie"
    
  • ZSCORE key member: 특정 멤버의 현재 스코어를 조회합니다.
  • 코드 스니펫
     
    ZSCORE my_ranking "user:Bob" 
    # 결과: "150"
    
  • ZRANGE key start stop [WITHSCORES]: 특정 순위 범위의 멤버를 조회합니다. WITHSCORES 옵션을 추가하면 스코어도 함께 반환됩니다.
  • 코드 스니펫
     
    ZRANGE my_ranking 0 -1 WITHSCORES
    # 결과: 
    # 1) "user:Alice"
    # 2) "100"
    # 3) "user:Charlie"
    # 4) "120"
    # 5) "user:Bob"
    # 6) "150"
    
  • ZREM key member: 특정 멤버를 ZSET에서 제거합니다.
  • ZCARD key: ZSET에 포함된 멤버의 총 개수를 반환합니다.

마무리하며

Redis의 ZSET은 단순한 캐시 서버를 넘어 강력한 기능을 구현하게 해주는 Redis의 '보석'과도 같습니다. 리더보드나 인기순 목록처럼 정렬된 데이터가 필요하다면, 더 이상 복잡한 데이터베이스 쿼리에 의존하지 마세요. Redis ZSET을 활용하면 놀라울 만큼 빠르고 효율적인 시스템을 구축할 수 있습니다.