데이터베이스 - 인메모리 저장소와 Redis란?

2024. 8. 30. 23:44데이터베이스/REDIS

2024/08/30

 

 

※   인메모리 저장소와 Redis에 대해 알아보자.


https://phoenixnap.com/kb/wp-content/uploads/2022/11/in-memory-vs.-on-disk-database.png

 

 💡 인메모리 데이터베이스란?
 
       메모리(RAM)에 데이터를 보관하여 디스크의 입출력 접근을 피하고, 병목 현상(BottelNeck)도 예방하는 등 처리 속도가 뛰어난 데이터베이스를 말한다.

 

 

   ▶  인메모리 저장소의 필요

👉   Spring Boot를 사용하면서 관계형 데이터베이스를 주로 사용해왔다. 이유는 영속성 데이터, 즉 파일 시스템에 데이터를 저장함으로써 서비스가 종료되어도 유지되는 데이터를 위해서라 할 수 있다.  

But, 일부 서비스에서는 때때로 일시적인 데이터를 저장해야하는 상황이 발생한다. 예를 들어, 장바구니 같은 기능은 사용자의 행동에 따라 빈번하게 데이터의 수정이 발생한다.

이러한 경우, 파일 시스템에 매번 데이터를 저장하는 것은 그 특성상 속도가 느릴 수밖에 없다. 따라서, 특정 기능의 구현을 위해 파일 시스템을 사용하는 데이터베이스 대신 메모리를 사용해 데이터를 일시적으로 보관하는 데이터베이스가  요구된다. 

 

 

   ▶  Redis란?



           ●  
Redis는 REmote DIctionary Server를 줄인말로,
               Java의 Map과 같은 방식으로 데이터를 저장하는 데이터베이스를 가리킨다.


 

   ▶  Redis의 특징

           ● 
일반적인 관계형 데이터베이스와 다른 가장 큰 특징은 In-Memory 데이터베이스라는 것


              ○  상용 서비스에 주로 활용되는 관계형 데이터베이스는 영속성을 제공하는데 목적을 두고 있다❗
              ○  이는 데이터가 사라지지 않게 하기 위해 파일시스템(흔히 말하는 SSD 또는 HDD)에 저장한다는 의미
              ○
  컴퓨터가 종료되어도 데이터가 사라지진 않지만 기본적으로 데이터를 읽고 쓰는데 오래걸린다.

 

                     ✅  Redis는 메모리, 즉 RAM에 데이터를 저장하기 때문에, 복잡한 입출력 과정이 필요하지 않다❗

                       ➡️ 일반적인 관계형 데이터베이스에 비해 더 빠르게 동작하는 대신, 언제든 사라질 수 있는 데이터를 다룬다는 차이를 가지고 있다.
                            예) 특정 게시글의 조회수, 사용자 세션, 장바구니처럼 시간이 지나면 삭제되는 데이터들을  다룰 때 사용


 
           ●  내부적으로 데이터를 저장하는 방식이 관계형 데이터베이스와 다르다. ➡️  NoSQL 데이터베이스

🔎 여기서 잠깐, NoSQL이란?

관계형 데이터베이스는 일반적으로 테이블 형식으로 데이터를 저장하고, 그 데이터를 회수하기 위해 SQL문을 사용한다. 
SELECT * FROM users;​

 

반면 Redis는 단순 문자열(String)부터, 리스트, 집합, Hash 등 다양한 형태의 데이터를 저장하며, 이 데이터를 회수하기 위해 SQL을 사용하지 않는다.
SET greeting "Hello, Redis!"
GET greeting​

Redis는 대표적인 NoSQL 데이터베이스이다. NoSQL은 데이터베이스를 만드는 접근법의 일종으로, (현재는) Not only SQL을 의미한다.

이들은 일반적인 관계형 데이터베이스가 약점을 가진 확장성, 유연성, 성능에 대한 문제를 해결하기 위해 사용되며, 컴퓨터 기술의 발전과 웹의 활성화로 인해 비정형 데이터를 더 높은 성능으로 사용하는데 초점이 맞춰진 경우가 많다.

 

 

   ▶  Redis의 특징 - NoSQL


           ● 
스키마와 SQL을 사용하는 관계형 데이터베이스와 달리, NoSQL 데이터베이스는 데이터를 관리하는 방법이 서로 다르고 사용법도 판이하다.
           ●  그 중 몇 가지만 살펴보면,  
                
               ✅  Key-Value: 가장 단순한 형태의 데이터베이스로, Key에 Value를 저장하는 형태다. JSON, Python의 Dictionary, Java의 Map의 형태로 데이터를 관리한다고 생각할 수 있다.
               ✅  Document: 객체를 표현하는 Document라는 단위로 데이터를 저장하는 형태다. Key - Value에서 발전했다고 볼 수 있으며, JSON, XML 등 복잡한 데이터를 저장하고 관리합니다.
               ✅  Column-Family: 각 Row의 Column이 고정되어있지 않고, 필요한 데이터 Column을 이름, 데이터, Timestamp와 함께 저장하는 형태의 데이터베이스다.


           ●  관계를 기준으로 데이터를 다루지 않기 때문에 키마를 만들지 않고, 그렇기 때문에 비정형 대규모 데이터를 매우 빠르게 다룰 수 있다.

 

 

   ▶  Redis의 활용 

           ●  Redis는 NoSQL 중에서도 Key-Value Store로 작동하는 인메모리 데이터베이스이며, 지연이 적은 읽기/쓰기 성능을 가졌다.
           ● 
그렇기 때문에 일시적인 데이터, 변경이 잦은 데이터를 다뤄야 되는 상황에서 많이 활용된다.
              ○  Session Clustering : 여러 애플리케이션 인스턴스에서 같은 세션 정보를 사용할 수 있도록 도와준다.
              ○  Caching : 자주 사용되는 데이터를 저장해두어, 데이터베이스 조회를 줄이고 전반적인 응답속도를 개선한다.
              ○
  지원하는 다양한 자료구조를 바탕으로 리더보드, 방문수 트래킹, 좌표 기반 검색 등의 기능을 쉽게 구현할 수 있게 해준다.

 

 

 

 


※ 위 이미지들은 스파르타코딩클럽에 저작권이 있으므로 무단 도용 금지 및 상업 목적으로 사용할 수 없습니다.