Redis

류지승·2024년 11월 4일

Database

목록 보기
5/9
post-thumbnail

Redis

RedisRemote Dictionary Server의 약자로서 key-value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)
-> Redis는 데이터 처리 속도가 엄청 빠른 NoSQL DB이다.

RedisIn-Memory에 모든 데이터를 저장한다. 그래서 데이터 처리 성능이 굉장히 빠르다. 대부분의 RDBMS의 데이터베이스는 대부분 DISK에 데이터를 저장하지만 Redis 같은 경우 RAM에서의 데이터를 저장한다.

Redis는 단순한 문자열 뿐만 아니라 Linked-list / Set / Sorted-set / Hash / Stream을 저장할 수 있다. 또한 Redis는 기본적으로 메모리에 데이터를 저장하지만, 필요에 따라 영속성(persistence)을 지원한다. 데이터를 주기적으로 디스크에 저장하여 서버가 재시작되거나 오류가 발생하더라도 데이터를 복구할 수 있다.

  • RDB (Redis Database): 특정 시점에 데이터를 스냅샷 형태로 디스크에 저장
    RDB 방식은 특정 주기마다 Redis의 데이터를 스냅샷(snapshot)으로 디스크에 저장하는 방식이다. 이렇게 저장된 파일은 .rdb 파일 형식으로 유지되며, Redis가 재시작되거나 장애가 발생한 경우 이 파일을 사용하여 데이터를 복구할 수 있다.
  • AOF (Append Only File): 모든 쓰기 작업을 로그로 기록하여 복구
    AOF 방식은 Redis의 모든 쓰기 작업을 로그 파일에 순차적으로 기록하여 영속성을 유지한다. 모든 SET, INCR 등의 명령어가 AOF 파일에 저장되며, Redis가 다시 시작될 때 이 파일을 재생하여 데이터 상태를 복원한다.

Redis 같은 경우 영속성을 유지하기 위해서 AOF 파일을 통해 최신 상태를 복구하고, RDB로 정기적인 백업 역할을 수행한다. 이렇게 병행 설정하면 데이터의 안정성을 높이면서 복구 성능도 균형 있게 유지할 수 있다.

Redis 사용 예시

  • 캐싱(Caching)
  • 세션 관리(Session Management)
  • 실시간 분석 및 통계(Real-time Analystics)
  • 메시지 큐(Message Queue)
  • 지리공간 인덱싱(Geospatial Indexing)
  • 실시간 채팅 및 메시징(Real-time Chat And Messaging)

필자는 현재 캐싱(데이터 검색엔진 조회 성능 향상) 그리고 세션 관리(refresh token)를 focus로 사용할 예정이다.

캐싱(Caching)

Redis는 주로 캐싱 용도로 사용된다. 예를 들어, 데이터베이스에서 자주 조회하는 데이터를 Redis에 저장하여 반복적인 조회 요청을 메모리에서 처리함으로써 성능을 크게 향상시킬 수 있다. 웹 애플리케이션에서 페이지 로딩 속도를 개선하고, API 응답 시간을 단축하는 데 Redis 캐시가 효과적이다.

세션 저장소(Session Storage)

Redis는 사용자 세션 데이터를 저장하는 데 자주 사용된다. 세션 데이터는 로그인 정보와 같은 사용자 상태 정보를 포함하며, 빠른 읽기 및 쓰기 속도가 요구된다. Redis는 세션 저장소로 사용하기에 적합하며, 만료 시간을 설정할 수 있어 오래된 세션 데이터를 자동으로 제거하는 데 유용하다.

실시간 데이터 분석(Real-time Data Analysis)

Redis는 실시간 데이터 분석을 위한 도구로도 유용하다. Redis는 초당 수십만 건의 요청을 처리할 수 있어 실시간으로 사용자 활동을 분석하거나 통계 데이터를 생성하는 데 활용된다. 예를 들어, 실시간 채팅, 게임 순위, 실시간 피드 등의 기능에서 Redis를 사용할 수 있다.

Message Queue

메시지 큐(Message Queue)는 시스템 내에서 다양한 컴포넌트나 서비스가 서로 비동기적으로 통신할 수 있도록 지원하는 방식이다. 이는 두 서비스가 서로 직접적인 연결 없이도 데이터를 주고받을 수 있게 해주는 중간 저장소 역할을 한다. 메시지 큐에 데이터를 보내면, 다른 서비스가 그 데이터를 가져가 처리할 수 있다.

프로듀서(Producer)와 컨슈머(Consumer)

프로듀서(Prodcuer)는 메시지를 생성하고 메시지 큐에 넣는 역할을 한다. 컨슈머(Consumer)는 큐에 들어있는 메시지를 읽어와서 처리하는 역할을 한다.

큐(Queue)

메시지 큐(Message Queue)FIFO(First In, First Out) 구조로 되어 있어, 먼저 들어온 메시지가 먼저 처리된다. message가 queue에 저장되면, consumer가 해당 message를 가져가기 전까지 대기 상태에 놓인다.

비동기 처리

메시지 큐(Message Queue)는 비동기 통신을 지원하므로, producer가 message를 queue에 넣으면 바로 다음 작업을 수행할 수 있고, consumer는 필요할 때 message를 가져와 처리할 수 있다. 이 비동기성 덕분에 서비스 간의 결합도가 낮아지고, 각 서비스가 독립적으로 동작할 수 있다.

Redis Pub / Sub(Publish / Subscribe)

Redismessage queue 기능도 제공한다. Pub/Sub는 게시자-구독자 패턴을 통해 메시지를 송수신하는 방식으로, 한 곳에서 메시지를 발행하면 해당 메시지를 구독하고 있는 모든 클라이언트에 전달된다. 이 기능은 실시간 알림이나 채팅 시스템에 유용하게 사용할 수 있다. 채팅 애플리케이션에서 각 사용자에게 실시간으로 메시지 전송, 게임에서 사용자에게 실시간 이벤트 정보 전송, 분산 시스템에서 여러 서버가 특정 상태 변화를 실시간으로 감지하도록 구현에서 주로 사용된다.

Redis Stream

Redis Streams로그 및 이벤트 스트리밍 기능을 제공한다. Kafka와 같은 message queue 서비스처럼 이벤트 스트리밍을 지원하며, 데이터의 순차적 저장 및 실시간 분석에 매우 유용하다. 특히 IoT 데이터 처리나 로그 수집, 실시간 분석에 많이 활용된다. 데이터가 순차적으로 저장되며, 각 항목에 고유 ID가 할당된다. 각 소비자 그룹(Consumer Group)이 독립적으로 데이터를 처리할 수 있다. 또한, message queue 기능을 강화한 구조로, 데이터 손실 없이 안정적인 처리가 가능하다.

Redis Pub/Sub와 Redis Streams의 주요 차이점 요약

기능Redis Pub/SubRedis Streams
메시지 저장실시간 전송 후 저장되지 않음메시지가 저장되어 나중에 다시 조회 가능
소비자 모델단순 발행-구독소비자 그룹 지원, 여러 소비자가 분산 처리 가능
주요 사용 사례실시간 알림, 채팅로그 처리, 실시간 분석, 이벤트 스트리밍
메시지 전달 보장구독 중일 때만 전달메시지가 스트림에 저장되어 복구 가능
순차 데이터 처리지원하지 않음메시지를 순차적으로 저장하고 조회 가능

Redis Pub/Sub는 실시간 알림이나 일회성 메시지를 전송할 때 적합한다. 데이터 영속성이 필요 없고, 메시지가 즉시 전달되어야 하는 경우(예: 채팅 메시지 전송)에 사용된다.

Redis Streams는 데이터의 영속성이 필요하며, 메시지를 순차적으로 처리하거나 다시 조회해야 하는 경우(예: 로그 수집, 데이터 분석) 적합한다. Redis Streams는 Redis를 메시지 큐처럼 사용할 수 있게 해주는 고급 기능으로, 비슷한 기능을 가진 Kafka와 같은 시스템을 대체할 수 있다.

profile
성실(誠實)한 사람만이 목표를 성실(成實)한다

0개의 댓글