본문 바로가기
🔍 CS/데이터베이스

11/24 - TIL : NoSQL과 Redis

by 컴쏘 2024. 11. 24.

 

RedisNoSQL 데이터베이스 중 하나로, Key-Value Store로 작동하는 인메모리 데이터베이스이다. 

 

 

NoSQL은 무엇일까? NoSQL에 대해 알아보자. 

NoSQL 

NoSQL은 Not Only SQL로 관계형 데이터베이스와는 달리 스키마(데이터 구조, 제약 조건을 정의한 설계도) 없이 사용 가능하거나 느슨한 스키마를 제공하는 저장소이다. 

  • 주로, 대량의 분산된 데이터를 저장하고 조회하는 데 많이 사용된다. 

NoSQL은 저장 방식에 따라 Key-Value, Document, Column 모델로 나뉜다. 간단하게 알아보면 다음과 같다. 

  • Key-Value : 가장 기본적인 형태의 NoSQL, 하나의 키로 하나의 데이터 저장 및 조회 (단일 키 - 값 구조), 고속 읽기와 쓰기에 최적화 
  • Document : Key-Value 모델을 개념적으로 확장한 구조, 하나의 키(문서에 대한 ID로 표현)에 하나의 구조화된 문서를 저장하고 조회, 저장된 문서를 컬렉션으로 관리하며, 문서 저장과 동시에 문서 ID에 대한 인덱스 생성 (문서를 조회하면 O(1) 만에 조회 가능) 
  • Column : 하나의 Key여러 개의 Column 이름과 Column 값의 쌍으로 이루어진 데이터를 저장하고 조회, 쓰기에 더 특화 

 

+) NoSQL에도 Index가 있을까?

더보기

NoSQL 데이터베이스에서도 데이터 검색 성능을 향상시키기 위해 인덱스를 제공한다고 한다. 

 

Document 형태의 NoSQL인 MongoDB를 보면, 기본적으로 _id 필드에 인덱스를 생성한다. (위에서 살펴보았듯이, Document 형태의 NoSQL은 문서 저장과 동시에 문서 ID에 대한 인덱스를 생성한다.)

 

 

그럼, Redis는? 

Redis의 경우는, RDB와 같은 인덱스와는 다르다. 

 

데이터 타입에 따라 내부적으로 효율적인 검색을 위해 자료구조를 활용하는 방식이다. (자료 구조 자체가 특정 쿼리를 빠르게 처리할 수 있도록 설계되어 별도의 인덱스가 필요하지 않은 경우가 많다.) 

 

정리하면, Redis는 전통적인 의미에서의 인덱스는 생성하지 않는다. 다만, 특정 자료구조를 활용하여 인덱스처럼 동작하는 메커니즘을 구현한다. 

 

 

그럼 Redis에 대해서도 알아보자. 

Redis

Redis는 인메모리 데이터베이스로 데이터를 Key-Value 형태로 저장하며, 단순 캐시뿐만 아니라, 데이터베이스, 메시지 브로커, 스트리밍 처리 등 다양한 용도로 사용된다. 

  • 모든 데이터가 메모리에 저장되어 초고속 읽기 / 쓰기 성능을 제공한다. (만약, 영구 저장이 필요하다면, 주기적으로 디스크에 스냅샷을 저장하거나 비동기적으로 데이터 기록) 
  • 단순한 문자열부터, Hash, List, Set, Sorted Set, Stream 과 같은 데이터 구조도 지원한다. 
  • 단일 스레드로 동작하여 동기화 문제가 발생하지 않는다. (I/O 작업은 비동기로 처리) 
  • Pub/Sub 모델을 지원하여 실시간 알림 및 메시지 브로커로 사용할 수 있다. (발행된 메시지를 구독자에게 전달하는 중간 역할)
  • 클러스터링을 통해 데이터를 Shard로 나누어 여러 노드에 분산 저장할 수 있다. 

 

Redis의 가장 큰 특징은 메모리에 의존한다는 것이다. 

 

 

그럼, 여기서 하나 더 생각을 해보면 메모리에 의존하는 데이터 저장소로는 Memcached도 있다. 무슨 차이가 있을까? 

Memcached 와의 차이 

Memcached는 인메모리 캐싱 시스템으로 빠른 읽기/쓰기 성능을 제공한다. 또한, Redis와 마찬가지로 Key-Value 형태의 저장소이다. 

 

Redis와의 차이는 다음과 같다. 

  • String Type만 지원한다. 
  • Redisscalue out(수평 확장)이지만, Memcachedscale up(수직 확장)이다. 
  • Memcached는 Multi Thread로 동작한다. 

사실, Redis는 Memcached의 대부분을 커버할 수 있다.