티스토리 뷰

DB

[DB] NoSQL과 레디스(Redis)

rimo (리모) 2023. 12. 7. 04:35

 

NoSQL과 레디스에 대하여

 


 

SQL(Structured Query Language)

SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 프로그래밍 언어입니다.

RDBMS에서 자료의 검색과 관리, 스키마 생성과 수정, 데이터베이스 객체 접근 등 자료를 처리하는 용도로 사용되는 구조적 데이터 질의 언어로,
에스큐엘 혹은 시퀄이라고 읽습니다.

 

RDBMS는 오랜 시간 개발자들에게 사랑받아 왔지만,

현대의 대용량/비정형 데이터의 저장이나, 빠른 응답시간 등 새로운 요구사항에 대응하기에는 부족한 점들이 있었습니다.

 

이에 좀 더 유연한, 새로운 데이터 구조를 가진 데이터 베이스들이 등장하게 되었죠.

 

 

NoSQL

Not Only SQL : 데이터를 저장하는 데에는 SQL 외에 다른 방법들도 있다! 

 

그 대안이 바로 NoSQL입니다. NoSQL은 기존 RDBMS 방식을 탈피한 데이터베이스를 의미합니다.

기존의 관계형 DB가 가지고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원하죠.

 

NoSQL의 종류

NoSQL은 문서, 그래프, 키-값, 인 메모리 등 다양한 데이터 모델을 사용하기에 여러 유형을 가집니다만,

크게 4개의 유형으로 나뉩니다.

 

1. Key-Value Stores (키-값 저장소) : ⭐

  • 키와 값의 쌍으로 데이터를 저장합니다. 
  • 메모리기반으로, 간단하고 빠르게 데이터를 읽어오고 싶을 때 사용합니다.
  • 키를 기반으로 조회 및 업데이트를 수행합니다.
  • ex: Redis
  1.  

2. Document Stores (문서 저장소) :

  • JSON, XML 등과 같은 문서 형식으로 데이터를 저장합니다.
  • 비정형 데이터와 같이 복잡한 데이터 구조를  다루기에 유용합니다.
  • 문서 단위로 쿼리를 실행할 수 있습니다.
  • ex: MongoDB

3. Wide-Column Stores (Column-Family) :

  • 행과 열의 구조를 가진 데이터를 저장합니다.
  • 각 행이 동일한 열을 가질 필요가 없다는 점에서 관계형 데이터베이스에 대해 뛰어난 유연성을 제공합니다.
  • 분산 시스템에서 확장성과 고성능을 제공합니다.
  • 비정형 데이터 및 대용량 데이터를 저장하는 데에 적합합니다.
  • ex: Apache Cassandra

4. Graph Databases (그래프 데이터베이스) :

  • 그래프 형식의 데이터를 저장하고 관리합니다. 
  • 노드(사물에 대한 정보)와 엣지(노드 간의 관계에 대한 정보)로 구성된 복잡한 데이터 관계를 표현할 수 있습니다.
  • 복잡한 네트워크 및 연결 데이터를 분석하는 데 유용합니다.
    (소셜 네트워크, 사기 탐지 등 패턴을 찾아보기 위해 관계를 자세히 검토해야 하는 경우에 적합.)
  • ex: Neo4j, Amazon Neptune

 

 

SQL과 NoSQL 비교해보기

SQL의 대안으로 NoSQL이 등장했지만, 그렇다고 NoSQL이 SQL보다 모든 상황에서 나은 것은 아닙니다. 

 

따라서 각각의 장단점을 고려하여 프로젝트의 요구 사항에 맞게 선택하는 것이 중요합니다. 

데이터의 구조, 크기, 처리량 등을 고려하여 적절한 데이터베이스를 선택하는 것이죠. ✌️

 

SQL 장점

명확하게 정의된 스키마로, 데이터 무결성을 보장할 수 있습니다. 
데이터 중복을 최소화할 수 있습니다.

 

NoSQL의 장점

스키마를 동적으로 변경할 수 있으며 비정형 데이터 처리에 훨씬 유연합니다.

대부분의 NoSQL은 대량의 데이터를 빠르게 처리할 수 있는 성능을 제공합니다.

분산 처리가 가능해 대규모 데이터 처리에 유용합니다.

 

SQL 단점

상대적으로 덜 유연합니다. 데이터 스키마가 사전에 정의되어야 하며, 스키마 변경 시 비용과 시간이 많이 소요될 수 있습니다.
테이블 간 관계를 맺고 있기 때문에 JOIN이 복잡한 쿼리가 만들어질 수 있습니다.
대용량 데이터 처리 성능에 한계가 있습니다.

 

 

NoSQL 단점

스키마가 명확하지 않아 명확한 데이터 구조를 보장하지 못합니다.

데이터 중복이 발생할 수 있습니다.

데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정해야 하는 경우 모든 컬렉션에서 수행해야 합니다.

 

 

 

언제 사용하는 것이 좋을까? 🤔


SQL을 사용하자!

  • 데이터가 자주 변경이 일어나는 경우
  • 명확한 스키마가 사용자와 데이터에게 중요한 경우

 

NoSQL을 사용하자!

  • 정확한 데이터 구조를 알 수 없거나 변경, 확장될 확률이 있는 경우
  • 데이터를 자주 변경하지 않고, 읽기 처리 주된 경우
  • 데이터베이스를 수평으로 확장해야 하는 경우 (대용량 데이터를 다뤄야 하는 경우)

 

 

 


 

Redis ⭐

Redis(레디스)는 Remote Dictionary Server의 약자로,  인기 있는 Key-Value Store 입니다. 

기본 사용 포트는 6379 입니다. 

 

 

Data Structures | Redis

Designed with developers in mind and unlike simplistic key-value data stores, Redis data structures deliver flexible ways to model your data for many use cases in modern applications.

redis.com

 

레디스의 특징

1. 인 메모리 데이터 저장소

데이터를 메모리에 저장하여 읽기(Read) 속도가 빠릅니다.

데이터를 디스크에 저장하는 디스크 기반 데이터베이스(MySQL, Oracle, MongoDB 등)에 비해  더 높은 처리량과 성능을 보여주죠.


2. 다양한 데이터 구조

레디스는 문자열, 해시, 리스트, 세트, 정렬된 집합 등의 데이터 구조를 지원합니다.

이를 이용해 다양한 유형의 데이터를 저장하고 처리할 수 있습니다.

 

3. 클러스터링을 지원

여러 노드에 데이터를 분산하여 처리할 수 있습니다.

 

4. 영속성 지원

데이터를 디스크에 저장하여 영속성을 제공합니다. 

이를 통해 데이터의 지속성을 보장합니다.

 

 

메모리를 사용한다면서요? 영속성은 어떻게 지원하죠?

 

  • 스냅샷 (Snapshot): 레디스는 주기적으로 메모리 상태를 디스크에 스냅샷 형태로 저장합니다. 스냅샷은 백그라운드에서 비동기적으로 수행되기에 Redis 서버 작동 중에도 지속적으로 사용할 수 있습니다.
  • AOF (Append-Only File): AOF는 레디스 서버에 적용된 모든 쓰기 작업을 기록하는 로그 파일입니다. Redis는 서버 재시작 시에 AOF 로그 파일을 읽어와 이전 상태를 복원하여 데이터의 영속성을 보장합니다.

레디스는 스냅샷을 통해 메모리 상태를 주기적으로 디스크에 저장하고, AOF로 모든 쓰기 작업을 로그로 기록해 서버 재시작 시에 데이터를 복원하여 영속성을 유지합니다.⭐

 

 

 

그 외에도 레디스는 DBMS로서 트랜잭션, 인증, 네트워크 보안(SSL/TLS)과 같이 여러 기능을 가지고 있습니다!

 

 

 

[참고자료]

 

  • DB 관리에 불철주야 몰두하시는 DBA님들이 계시지만, 내 문제상황에 걸맞은 DB애플리케이션을 선택하고 개발하는 것은 백엔드 개발자의 몫 아닐런지요.
 

레디스Redis가 뭐에요? 레디스 설치하기, 레디스 튜토리얼

서문. 레디스가 뭔가요?

sihyung92.oopy.io

 

 

NoSQL 의 종류별 특징

장점SQL 장점명확하게 정의 된 스키마, 데이터 무결성 보장관계는 각 데이터를 중복없이 한번만 저장됩니다.NoSQL의 장점스키마가 없기때문에, 훨씬 더 유연합니다. 즉, 언제든지 저장된 데이터를

velog.io

 

 

이후 레디스 사용에 대한 내용을 추가할 예정입니다.

감사합니다.

 


 

공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday