본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/데이터베이스

1일1개 (30) - Redis

by poetDeveloper 2024. 9. 9.

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#30. Redis

Redis를 들어보았는가 ? NoSQL 배울 때 종종 나오는 개념이고 Redis를 "캐시로 사용"한다는 문구가 자주 보인다. Redis가 무엇이며, 이것을 캐시로 쓴다는 게 무슨 의미일까 ? Redis에 대해 알아봅시다.

 

 

Redis란 ?

Redis는 "Remote Dictionary Server"의 줄임말로, key-value 구조의 비정형 데이터를 저장하고 관리하는 오픈 소스 기반 비관계형 DBMS이다. Redis는 메모리에 데이터를 저장( )하기 때문에 매우 빠른 데이터 처리를 지원한다. 그래서 Redis를 "인메모리 DB"라고 부르기도 한다.

Redis는 값 저장을 할 때 단순한 키-값에만 그치지 않고, 문자열, 리스트, 셋, 해시 등도 지원한다.

Redis는 주로 캐싱, 세션 저장소, 메세지 브로커* 등에 활용된다.

 

* 메세지 브로커 : Sender와 Receiver간의 데이터 송수신을 중개하는 시스템을 말함. 발신자는 메시지를 브로커에게 전달하고, 브로커는 이를 수신자에게 안전하고 효율적으로 전달하는 역할을 함. 발신자와 수신자는 직접적으로 통신하지 않으며, 메시지 브로커를 통해 비동기식으로 데이터를 주고받는다.

 

Redis 특징

  1. 빠른 속도 : Redis는 모든 데이터를 메모리에 저장하고 작업하기 때문에 매우 빠른 읽기, 쓰기를 제공한다. 특히나 짧은 대기 시간과 높은 처리량이 필요한 애플리케이션에 적합하다.
  2. 다양한 데이터 구조 : 앞서 언급했듯이 단순한 키-값 뿐만 아니라, 리스트, 셋, 해시 등 다양한 데이터 구조를 지원하므로 복잡한 데이터도 효율적으로 처리할 수 있다.
  3. 지속성 지원 : 기본적으로 메모리식 DB지만, Redis는 스냅샷 저장이나 AOF(Append Only File) 방식으로 데이터를 저장할 수 있다.
  4. 확장성 : Redis는 클러스터링과 레플리케이션을 통해 확장성과 고가용성을 제공한다. 대규모 시스템에서도 사용 가능함을 보여준다. 이를 통해 여러 서버에 데이터를 복제하거나 분산 저장하여 데이터 유실 가능성을 최소화하고 대규모 트래픽을 처리할 수 있다.
  5. Pub/Sub 메시징 : 앞서 말했듯 Redis는 단순한 스토리지 역할을 넘어서 메시지 브로커 역할도 수행하는데, 메세지를 중개하며 서버 간 통신이나 실시간 메시징 시스템을 구축고 이때 Pub/Sub(발행/구독) 모델을 사용할 수 있다. 이는 서버 간 통신, 실시간 데이터 처리, 알림 서비스 등 다양한 용도로 활용된다.

 

RAM이랑 뭐가 다른데 ?

내용을 읽어보면, 모든 데이터를 메모리에 저장한다는데.... 그럼 RAM이랑 뭐가 다른 것인가 ?? 일단 선요약을 먼저 보고, 직관적이지 않은 것들 몇개만 이야기해보자.

  일반 RAM Redis
데이터 구조 직접 구현해야 함 다양한 데이터 구조 내장 및 지원
데이터 일관성 및 동시성 직접 동시성 처리 필요 원자적 연산 및 데이터 일관성 보장
데이터 지속성 메모리 휘발성, 재부팅 시 손실 디스크에 저장 가능 (RDB, AOF)
속도 빠르지만 비구조적 관리 필요 메모리 기반으로 빠르고 구조적 관리 가능

 

1. 데이터 일관성 및 동시성 제어

  • RAM : 메모리에 데이터를 저장할 때는 동시 접근 문제가 발생할 수 있다. 데이터 접근 시 충돌을 방지하거나 일관성을 보장하는 것은 개발자가 직접 처리해야 할 문제다.
  • Redis : Redis는 기본적으로 싱글 스레드로 동작하며, atomic한 연산을 보장한다. 그래서 여러 클라이언트가 동시에 Redis에 접근해도 데이터 일관성이 보장되며, 충돌이나 데이터 손실에 대해 걱정할 필요가 없다.

2. 데이터 지속성

  • RAM : 휘발성이므로 재시작되거나 전원이 나가면 모든 데이터가 사라짐
  • Redis : Redis는 기본적으로 메모리에 데이터를 저장하지만, 데이터를 디스크에 저장하는 옵션도 제공한다. 이를 통해 애플리케이션이 종료되거나 시스템이 재시작되어도 데이터를 복구할 수 있다. 이때 다음과 같은 기술이 사용된다.
    • RDB 스냅샷 : 특정 시점에 메모리 데이터를 디스크에 저장함.
    • AOF(Append Only File) : 모든 쓰기 연산을 로그 형태로 디스크에 기록하여, 데이터 손실 없이 복구할 수 있도록 만들어줌.

 

Redis의 활용 방안

  1. 캐싱 : Redis는 메모리 기반의 빠른 접근 성능을 활용하여 웹 애플리케이션의 DB쿼리 결과를 캐시하여 성능을 크게 향상시킬 수 있다. 사실상 이게 Redis의 초필살기라고 생각한다. Redis는 고성능 메모리 기반의 캐시로 많이 사용된다. Redis 캐싱을 통해 자주 조회되는 데이터를 메모리에 저장해 DB나 다른 느린 스토리지에 접근할 필요를 없애준다.
  2. 세션 저장 : Redis는 서버 간의 세션을 공유하는 데 사용할 수 있다. 세션 데이터를 Redis에 저장하면 서버가 재시작되거나 확장되더라도 일관성을 유지할 수 있다.
  3. 실시간 분석 가능 : Redis는 빠른 읽기, 쓰기 성능 덕분에 실시간 분석 데이터를 처리할 때 유용하다. 웹사이트 방문자 수 실시간 카운팅 이럴 때 유용하다.
  4. 메시지 큐* : Redis는 Pub/Sub 및 리스트와 같은 데이터 구조를 활용해 메시지 큐를 구현할 수 있습니다. 이는 비동기 작업 처리에 유용합니다.

* 메시지 큐 = 발신자가 보낸 메시지를 일시적으로 저장한 후, 수신자가 이를 순차적으로 가져가서 처리하는 구조. 메세지를 마치 큐처럼 다루고 이를 통해 비동기적으로 데이터를 주고받을 수 있다.

 

정리

  • Redis는 RAM을 사용해 매우 빠른 속도로 데이터를 처리하는 시스템
  • 하지만 ! 일반 RAM과는 달리, 데이터를 영구 저장하거나 복구하는 기능도 제공하고, 다양한 데이터 구조를 지원하면서 DB 특성도 함께 갖추고 있다.
  • 따라서 Redis는 RAM을 단순히 캐시로 사용하는 것 이상으로, 고속 데이터 저장소 역할을 하면서도 필요할 때는 영구적인 데이터 저장을 보장할 수 있는 마치 하이브리드형 DB라고 할 수 있다.