Open Source Software

Redis(Remote Dictionary Server)란?

Somaz 2022. 9. 26. 15:25
728x90
반응형

Overview

오늘은 오픈 소스 프로젝트인 Redis에 대하여 공부해보려고 한다.

 

출처 : https://backendless.com/redis-what-it-is-what-it-does-and-why-you-should-care/

 

 

 


 

Redis란?

Redis는 데이터베이스, 캐시, 메시지 브로커 및 스트리밍 엔진으로 사용되는 오픈 소스(BSD 라이선스), 인메모리 데이터 구조 저장소이다.

문자열, 해시, 목록, 집합, 범위 쿼리가 포함 된 정렬된 집합, 비트맵, 하이퍼로그, 지리 공간 인덱스 및 스트림과 같은 데이터 구조를 제공한다.

 

in-memory 형태의 NO-SQL로써 Key-Value 쌍의 해쉬 맵 형태의 데이터베이스이다.

  • in-memory: disk가 아닌 memory에 저장하기 때문에 disk I/O 작업이 발생하지 않아 속도가 빠르며, 휘발성
  • No-SQL: Not Only SQL를 뜻하며 RDBMS에 비해 속도가 빠른 장점

 

 

Redis에는 다음도 포함된다.

 

 

Redis 역사와 배경

  • 최초 릴리즈: 2009년 Salvatore Sanfilippo에 의해 개발
  • 이름 유래: REmote DIctionary Server의 약자
  • 현재 관리 주체: Redis는 현재 Redis Inc.가 관리하지만, 여전히 오픈 소스로 운영되고 있으며 강력한 커뮤니티가 유지되고 있음.

 

 

 


 

Redis의 이점

 

성능

모든 Redis 데이터는 메모리에 상주하므로 데이터 액세스의 대기 시간을 낮추고 처리량을 높인다. 기존 데이터베이스와 달리 인 메모리 데이터 스토어에는 디스크로의 이동이 필요하지 않기 때문에 엔진 대기 시간이 마이크로초 단위까지 줄어든다.

 

 

유연한 데이터 구조

제한적인 데이터 구조를 제공하는 다른 키 값 데이터 스토어와 달리 Redis에서는 애플리케이션 요구 사항을 충족할 수 있는 다양한 데이터 구조를 지원한다. Redis 데이터 유형은 다음과 같다.

  • 문자열 – 최대 512MB 크기의 텍스트 또는 바이너리 데이터
  • 목록 – 추가된 순서가 유지되는 문자열 모음
  • Sets – 순서가 유지되지 않는 문자열 모음으로 다른 세트 유형과 교차, 통합 및 비교 가능
  • Sorted Sets – 값을 기준으로 순서가 지정된 세트
  • Hashes – 필드 및 값의 목록을 저장하는 데이터 구조
  • Bitmaps – 비트 수준 작업을 제공하는 데이터 유형
  • HyperLogLogs – 데이터 집합 내 고유 항목을 추정하기 위한 확률적 데이터 구조
  • Streams - 로그 데이터 구조 메시지 대기열
  • Geospatial - 경도/위도 기반 항목 맵, ‘인근’
  • JSON - 숫자, 문자열, 부울, 배열 및 기타 개체를 지원하는 명명된 값의 중첩된 반정형 객체

 

 

단순성 및 사용 편의성

Redis를 사용하면 더 짧고 단순한 코드로 기존의 복잡한 코드를 작성할 수 있다. Redis에서는 더 짧은 코드를 작성하여 애플리케이션 데이터의 저장, 액세스 및 사용을 지원할 수 있다.

 

 

복제 및 지속성

Redis는 기본-복제 아키텍처를 사용하며 비동기식 복제를 지원하므로 데이터가 여러 복제 서버에 복제될 수 있다. 따라서 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 더 빠른 복구 기능을 제공할 수 있다.

 

 

고가용성 및 확장성

Redis는 단일 노드 기본 또는 클러스터링된 토폴로지에서 기본-복제 아키텍처를 제공한다. 따라서 가용성이 뛰어난 솔루션을 구축하여 일관된 성능과 안정성을 제공할 수 있다.

 

 

오픈 소스

Redis는 AWS를 포함한 역동적인 커뮤니티를 통해 지원되는 오픈 소스 프로젝트이다. Redis는 개방형 표준을 기반으로 하고 오픈 데이터 형식을 지원하며 다양한 클라이언트 세트를 제공하므로 공급업체 종속이나 기술 종속이 없다.

 

 

 


 

Redis의 언어지원

  • Python
  • Perl
  • C/C#/C++
  • Java
  • Go
  • JavaScript
  • PHP
  • Ruby
  • Node.js

 

 

  • 캐싱 
    • Redis를 사용하면 빈번하게 요청되는 항목을 1밀리초 미만의 응답 시간으로 지원
    • 고가의 백엔드를 추가하지 않고도 손쉽게 확장하여 더 많은 로드를 처리
    • 주요 예시 : 데이터베이스 쿼리 결과 캐싱, 영구 세션 캐싱, 웹 페이지 캐싱 등

 

  • 채팅, 메시징 및 대기열
    • Redis는 패턴 매칭과 다양한 데이터 구조(목록, 정렬된 세트, 해시 등) 옵션으로 게시/구독을 지원
    • 고성능 채팅방, 실시간 코멘트 스트림, 소셜 미디어 피드 및 서버 상호 통신 가능
    • Redis 목록 데이터 구조를 사용하면 간단한 대기열을 손쉽게 구현

 

  • 게임 순위표
    • 점수로 정렬된 목록을 유지하는 Redis Sorted Set 데이터 구조 사용
    • 실시간 순위 목록 업데이트 가능, 시계열 데이터 처리 가능

 

  • 세션 스토어
    • 사용자 프로필, 자격 증명, 세션 상태, 사용자별, 개인화 등과 같은 세션 데이터를 관리하는 데 용이

 

  • 다양한 미디어 스트리밍
    • 라이브 스트리밍 지원 가능한 빠른 인 메모리 데이터 스토어를 제공
    • CDN이 동시에 수백만 명의 모바일 및 데스크톱 사용자에게 스트리밍 가능하도록 메타데이터, 사용자의 인증 정보/토큰, 메니페스트 파일을 저장하는데 사용

 

  • Machine Learning
  • 실시간 분석

 

 

Redis 클러스터 구조 이해

+---------------------+   +---------------------+
| Master Node (A)     |<->| Replica Node (A')   |
+---------------------+   +---------------------+
| Master Node (B)     |<->| Replica Node (B')   |
+---------------------+   +---------------------+
| Master Node (C)     |<->| Replica Node (C')   |
+---------------------+   +---------------------+

 

  • 자동 샤딩 및 리밸런싱 지원
  • 각 마스터는 특정 슬롯 범위 담당
  • 장애 발생 시 자동 failover

 

 

 

 

 

 


 

Redis 사용법 및 명령어

 

redis 접속

# 사용법
redlis cli -h <주소> -p <port>

# ex)
redis-cli -h 10.1.28.3 -p 6379
10.1.28.3:6379>
10.1.28.3:6379>

 

 

redis 명령어

# 활성화된 채널 확인
pubsub channels
1) "data"

# 채널을 구독중인 클라이언트 수(subscribe) 확인
pubsub numsub data
1) "data"
2) (integer) 3

# 패턴형으로 등록된 클라이언트 수 확인
pubsub numpat
(integer) 0

 

 

redis pub/sub

 

subscribe

redis-cli -h dev1-fgn-redis.nerdystar.io -p 30479

subscribe data
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "data"
3) (integer) 1

 

publish

publish data "hello"
(integer) 3

 

 

subscribe

subscribe data
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "data"
3) (integer) 1
1) "message"
2) "data"
3) "hello"

 

 

 


 

 

✨ 추가 내용

 

 

Redis 아키텍처 특징

특징 설명
단일 스레드 기반 Redis의 주요 처리는 단일 스레드로 동작하여, 컨텍스트 스위칭 오버헤드가 없음 (I/O 멀티플렉싱으로 성능 유지)
인메모리 모든 데이터는 메모리에 저장되며, 선택적으로 디스크에 저장 가능 (AOF, RDB)
데이터 영속성 RDB와 AOF 방식으로 데이터 백업 및 복원 지원
클러스터링 Redis Cluster 기능을 통해 고가용성 및 샤딩 지원

 

 

 

Redis 데이터 영속성 (Persistence)

유형 설명
RDB (Redis Database) 일정 주기로 스냅샷 저장 (빠른 복구)
AOF (Append Only File) 모든 명령어를 로그로 저장 (데이터 손실 최소화)
RDB + AOF 혼합 모드로 동작 가능 (권장 구성)

 

 

 

Redis 보안 강화 방법

  • ACL (Access Control Lists) 활용해 사용자별 권한 세분화
  • Redis 보안 설정 파일(redis.conf)에서 다음 항목 설정 강화:
    • requirepass 설정으로 비밀번호 설정
    • 외부 네트워크 차단 (bind 127.0.0.1)
    • TLS/SSL 설정 지원
    • Sentinel 및 Cluster 구성 시 인증 필수 적용
  • 최신 권장사항 문서: https://redis.io/docs/management/security/

 

 

 

Redis 최신 기능 및 진화 (2024 기준)

기능 설명
Redis JSON JSON 형식 데이터 저장 및 쿼리 지원 (Redis Stack 포함)
Redis Search 검색 기능 강화, 전문 검색 및 필터링 지원
Redis TimeSeries 시계열 데이터 저장 및 분석 지원
RedisBloom 블룸 필터, 카운트-미닝, 톱-K 등 확률적 데이터 구조 지원
Redis Gears 데이터 처리 파이프라인 및 트리거 기능 강화 (서버 사이드 스크립팅)
Redis AI 머신러닝 모델 서빙 지원 (ONNX 기반)

 

 

 

Redis 모니터링 및 성능 튜닝 포인트

항목 설명
Slow Log 느린 명령어 로그 분석 (SLOWLOG GET)
Keyspace Hits/Misses 캐시 적중률 모니터링 (INFO stats)
메모리 사용량 메모리 사용량 분석 (INFO memory)
Eviction 설정 메모리 초과 시 데이터 삭제 정책 설정 (LRU, LFU 등)

 

 

 

Redis 주요 실무 활용 사례

사례 설명
로그인 세션 관리 사용자 로그인 세션 캐싱, 대규모 트래픽 대응
API Rate Limiting 초당 요청 수 제한 로직 구현
실시간 순위표 게임/이벤트의 실시간 순위표 구현
채팅 서비스 실시간 메시징 및 알림 서비스 구축
분산 락 SETNX 기반 분산 락 구현
이벤트 큐 간단한 메시지 큐로 사용하여 비동기 처리

 

 

 

Redis와 다른 인메모리 DB 비교

항목 Redis Memcached
데이터 구조 문자열, 해시, 리스트, 셋, 정렬셋 등 다양한 자료구조 지원 단순 Key-Value
영속성 RDB, AOF 지원 영속성 없음 (Pure Cache)
클러스터링 Redis Cluster 지원 공식 클러스터 기능 없음
스크립팅 Lua 스크립트 지원 스크립팅 미지원

 

 

 


 

 

 

마무리

  • 이번 글에서는 Redis의 기본 개념부터, 다양한 데이터 구조와 주요 기능, 그리고 실무에서 어떻게 활용되는지까지 폭넓게 살펴봤다.
  • Redis는 단순한 캐시 서버를 넘어 고성능 데이터 저장소, 실시간 데이터 처리 엔진, 메시지 브로커 등 다양한 역할을 수행할 수 있는 강력한 도구이다.
  • 특히, Redis는 속도, 유연성, 확장성이라는 3박자를 모두 갖추고 있어, 스타트업부터 대기업까지 폭넓게 활용되고 있다.
  • 기본적인 Key-Value 저장소로만 알고 있었다면, 이번 기회에 Redis의 강력한 데이터 구조와 클러스터링, 스크립팅, 모니터링까지 다양한 기능을 제대로 이해하고, 실제 환경에서 어떻게 응용할 수 있는지 고민해보는 것도 좋겠다.
  • 앞으로도 Redis는 지속적으로 발전하고 있으며, Redis Stack과 같은 새로운 확장 기능도 활발히 추가되고 있으니, 최신 트렌드도 꾸준히 체크해두면 좋다.

 

 

 

 


 

Reference

 

728x90
반응형

'Open Source Software' 카테고리의 다른 글

Cephadm-ansible이란?  (3) 2024.02.29
Rook-Ceph란?  (0) 2024.02.20
Ceph 노드 제거 및 추가 방법(mon/mgr/osd)  (0) 2022.09.21
RabbitMQ란?  (0) 2022.08.01
Ceph 란?  (0) 2022.07.29