[DB] Redis란? 개념부터 자료 구조까지 한 번에 정리!

2025. 2. 18. 21:54·DB

현재 나는 AI를 활용하여 여행 일정을 자동으로 생성하는 기능을 개발 중이다.

 

테스트를 진행하는 과정에서, 새로운 장소를 추천할 때 이전에 추천된 장소가 중복 포함되는 문제를 발견했다.
이 문제를 해결하기 위해 여러 방법을 고민하던 중, Redis의 캐싱 기능을 알게 되었다.

 

Redis를 활용하면 기존에 추천된 여행 일정의 장소를 저장하고, 새로운 추천 요청 시 중복된 장소가 다시 추천되지 않도록 필터링하는 방식을 적용할 수 있었다.

[Python] Redis를 활용한 중복 추천 방지 캐싱 서비스 개발

 

이 과정에서 Redis의 개념과 특징, 그리고 장점에 대해 깊이 이해하게 되었고, 이를 정리해보고자 한다.

 

Redis란?

Remote Dictionary Server의 약자로, 오픈 소스 인메모리(In-Memory) 데이터 저장소이다.
일반적으로 캐싱, 세션 관리, 메시지 큐, 실시간 데이터 처리 등에 활용되며, NoSQL 데이터베이스 중 하나로 분류된다.

  • Key-Value Store 방식으로 데이터를 저장하며, 다양한 자료 구조를 지원함
  • 메모리 기반이기 때문에 읽기/쓰기 속도가 매우 빠름
  • 데이터 영속성(Persistence) 기능을 지원하여, 인메모리 데이터도 지속적으로 보관할 수 있음

공식 사이트: https://redis.io/ko/

 

Redis를 사용하는 이유

Redis는 빠른 속도와 다양한 기능 때문에 고성능 애플리케이션 개발에 필수적인 데이터 저장소로 활용된다.

 

1. 빠른 데이터 접근 속도

  • Redis는 데이터를 RAM(메모리)에 저장하므로, 일반적인 디스크 기반 DB보다 수십~수백 배 빠른 속도를 제공한다.
  • 캐싱, 실시간 추천 시스템 등에 적합하다.

2. Key-Value 기반의 간단한 데이터 저장

데이터 저장 방식이 직관적이며, Key를 기반으로 빠르게 조회할 수 있다.

  • 복잡한 관계형 데이터베이스보다 훨씬 가볍고 효율적이다.

3. 다양한 자료 구조 지원

    • 단순한 Key-Value 저장뿐만 아니라, 리스트, 해시(Hash), 집합(Set), 정렬된 집합(Sorted Set) 등 다양한 자료 구조를 활용할 수 있다.
    • 이를 활용하면 중복 제거, 순위 정렬, 태그 검색 등의 기능을 쉽게 구현할 수 있다.

4. 높은 확장성 & 분산 처리 지원

  • 클러스터링(Clustering) 및 샤딩(Sharding)을 지원하여 대규모 데이터 처리가 가능하다.
  • 여러 서버에서 데이터를 분산하여 저장하고 빠르게 조회할 수 있다.

5. 데이터 영속성(Persistence) 지원

  • 일반적으로 RAM에 저장되지만, AOF(Append Only File), RDB(Snapshot) 방식으로 데이터를 디스크에 저장하여 영속성을 보장할 수 있다.

 

Redis의 장점

1. 빠른 데이터 처리 속도

  • 메모리 기반이기 때문에 매우 빠른 데이터 읽기/쓰기 속도를 제공함

2. 다양한 자료 구조 지원

  • 리스트, 해시, 집합 등 다양한 데이터 구조를 저장할 수 있어 활용도가 높음

3. 확장성과 가용성

  • 클러스터링 및 샤딩을 통해 확장 가능하며, 높은 가용성(High Availability, HA)을 제공할 수 있음

4. 데이터 영속성 옵션 제공

  • AOF(Append Only File), RDB(Snapshot) 방식으로 데이터를 저장 가능하여 장애 복구가 가능함

5. 메시지 큐 기능 지원

  • Pub/Sub(발행-구독) 모델을 지원하여, 실시간 메시지 처리 시스템으로도 활용할 수 있음

 

Redis의 단점

1. 메모리 사용량이 많음

  • 데이터가 메모리에 저장되기 때문에, 대량의 데이터를 저장하면 RAM 비용이 증가함

2. 복잡한 관계형 데이터 처리 불가능

  • Redis는 Key-Value Store이므로, SQL처럼 JOIN 연산이 필요하거나 복잡한 관계형 데이터 구조를 다루기 어려움

3. 데이터 유실 가능성

  • Redis는 기본적으로 RAM에 데이터를 저장하므로, 서버가 갑자기 종료되면 데이터가 손실될 수 있음
  • 영속성 옵션(AOF, RDB)을 사용하면 해결할 수 있지만, 디스크 I/O가 증가하여 성능 저하 가능성이 있음

4. 트랜잭션 기능이 제한적

  • Redis의 MULTI/EXEC 기능을 사용하면 일괄 처리가 가능하지만, RDBMS의 트랜잭션(ACID 보장)만큼 강력하지 않음

 

Redis에서 지원하는 자료 구조

Redis는 단순한 Key-Value 저장소가 아니라, 다양한 자료 구조를 지원하여 데이터를 유연하게 관리할 수 있다.
아래는 Redis에서 제공하는 주요 자료 구조와 활용 사례이다.

1. String (문자열)

  • 설명
    • 가장 기본적인 Key-Value 저장 방식이며, 문자열 값을 저장할 수 있음.
    • 512MB까지 저장 가능.
    • SET, GET, INCR, DECR, APPEND 같은 명령어로 값을 조작할 수 있음.
  • 활용 사례
    • 캐싱(Cache): 자주 조회되는 데이터를 저장하여 빠르게 접근 (예: 사용자 세션 정보, API 응답 캐싱)
    • 세션 관리: 로그인 세션 정보를 저장하고, 만료 시간 설정 가능
    • 카운터 기능: INCR을 이용해 조회수 증가
SET user:1001 "Juyoung"  # 키(user:1001)에 값 저장
GET user:1001            # 값 가져오기
INCR page:views          # 조회수 증가

 

2. List (리스트)

  • 설명
    • 순서가 있는 문자열 리스트이며, FIFO(큐) 또는 LIFO(스택) 방식으로 활용할 수 있음.
    • LPUSH, RPUSH, LPOP, RPOP 등의 명령어로 조작 가능.
  • 활용 사례
    • 메시지 대기열(Queue): 채팅 시스템에서 메시지 저장
    • 이벤트 로그 저장: 최근 방문 기록을 리스트에 저장
    • 작업 큐(Task Queue): 비동기 작업을 처리할 때 활용
RPUSH chat:room1 "Hello" "Hi" "How are you?"  # 채팅 메시지 추가
LPOP chat:room1                              # 첫 번째 메시지 가져오기
 

3. Set (집합)

  • 설명
    • 중복을 허용하지 않는 데이터 집합.
    • SADD, SREM, SMEMBERS, SINTER 등의 명령어 사용 가능.
  • 활용 사례
    • 태그 저장: 게시물 태그를 저장할 때 사용
    • 중복 추천 방지: 이미 추천된 장소를 저장하고, 새 추천 시 제외
    • 사용자 그룹 관리: 특정 이벤트에 참여한 유저 목록 관리
SADD tags:post1 "Redis" "Database" "NoSQL"   # 태그 추가
SMEMBERS tags:post1                          # 태그 목록 가져오기

 

4. Sorted Set (정렬된 집합)

  • 설명
    • 점수(Score)와 함께 저장된 데이터 집합으로, 값이 자동 정렬됨.
    • ZADD, ZRANGE, ZREM, ZRANK 명령어 사용.
  • 활용 사례
    • 랭킹 시스템: 게임 순위, 인기 게시글 정렬
    • 타임스탬프 기반 데이터 정렬: 뉴스 피드 정렬
ZADD leaderboard 100 "UserA" 200 "UserB" 300 "UserC"  # 점수와 함께 추가
ZRANGE leaderboard 0 -1 WITHSCORES                    # 순위 가져오기
 

5. Hash (해시)

  • 설명
    • Key-Value 쌍을 여러 개 저장할 수 있는 구조 (JSON 객체처럼 사용 가능).
    • HSET, HGET, HGETALL 등의 명령어 사용.
  • 활용 사례
    • 사용자 프로필 저장: 이름, 이메일, 포인트 정보 관리
    • 설정값 저장: 서비스 설정값을 저장하는 데 유용
HSET user:1001 name "Juyoung" email "juyoung@example.com"
HGET user:1001 name  # 사용자 이름 가져오기
 

6. Bitmap (비트맵)

  • 설명
    • 비트 연산을 활용한 저장 방식으로, 효율적인 공간 활용이 가능함.
    • SETBIT, GETBIT, BITCOUNT 등의 명령어 사용.
  • 활용 사례
    • 사용자 로그인 상태 저장: 특정 날짜에 로그인 여부 확인
    • 출석 체크 시스템: 비트 연산을 이용해 출석 관리
SETBIT login:20240223 0 1  # 0번째 유저가 로그인함
SETBIT login:20240223 1 0  # 1번째 유저는 로그인 안함
BITCOUNT login:20240223    # 로그인한 유저 수 카운트

 

7. HyperLogLog

  • 설명
    • 데이터 개수를 정확하게 세는 것이 아니라, 추정(Estimation)하여 메모리를 절약하는 방식.
    • PFADD, PFCOUNT, PFMERGE 명령어 사용.
  • 활용 사례
    • 방문자 수 카운트: 동일 사용자의 중복 방문을 제거하고 유니크 방문자 수 계산
    • 대규모 데이터 카운팅: 특정 이벤트 참여자 수 추정
PFADD visitors "UserA" "UserB" "UserC"
PFCOUNT visitors  # 방문자 수 추정

 

8. Geospatial

  • 설명
    • 위도/경도를 기반으로 위치 정보를 저장하고 거리 계산 가능.
    • GEOADD, GEODIST, GEORADIUS 명령어 사용.
  • 활용 사례
    • 근처 맛집 찾기: 사용자의 위치 기반으로 가까운 가게 추천
    • 실시간 위치 서비스: 사용자의 이동 경로 분석
GEOADD places 127.036 37.511 "Restaurant A"
GEOADD places 126.978 37.566 "Restaurant B"
GEODIST places "Restaurant A" "Restaurant B" km  # 두 장소 거리 계산
 

'DB' 카테고리의 다른 글

[DB] Windows 11 환경에서 Redis 설치하고 키 관리하기  (0) 2025.12.18
[DB] MongoDB Atlas 설정 및 삭제 방법 총정리  (0) 2025.02.14
[DB] ORM(Object-Relational Mapping)이란?  (0) 2025.02.12
[DB] DB 정규화 (Database Normalization)에 대하여  (0) 2025.01.29
[DB] ERD 관계 / 식별자 관계 / 1:1 & 1:N & N:M  (0) 2025.01.16
'DB' 카테고리의 다른 글
  • [DB] Windows 11 환경에서 Redis 설치하고 키 관리하기
  • [DB] MongoDB Atlas 설정 및 삭제 방법 총정리
  • [DB] ORM(Object-Relational Mapping)이란?
  • [DB] DB 정규화 (Database Normalization)에 대하여
dud9902
dud9902
개발자 취준생 기록일지
  • dud9902
    dud's DevStory
    dud9902
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • SpringBoot (14)
      • React (12)
      • Python (14)
      • AI (21)
      • DB (6)
      • Figma (1)
      • Markdown (1)
      • AWS (7)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    springboot
    스프링부트
    miniforge
    의존성 주입
    Agent
    db
    AWS
    AI
    pydantic
    redis
    Python
    twilio
    langchain
    EC2
    FastAPI
    react
    recognize anything
    CrewAI
    pytorch
    docker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dud9902
[DB] Redis란? 개념부터 자료 구조까지 한 번에 정리!
상단으로

티스토리툴바