전통적으로 데이터는 관계형 데이터베이스(RDBMS) 시스템, 예를 들어 MySQL, MariaDB, Oracle과 같은 플랫폼을 통해 관리되었습니다.
이러한 데이터베이스는 파일 시스템(HDD, SSD 등)에 데이터를 저장하여, 서비스가 종료되더라도 데이터가 유지될 수 있도록 설계되었습니다.
RDBMS는 파일 시스템에 데이터를 저장함으로써 데이터의 영속성과 안정성을 보장하며, 비즈니스 정보의 안전한 보관에 중요한 역할을 해왔습니다.
그러나 실시간 분석, 빠른 응답 시간, 높은 성능을 요구하는 애플리케이션의 급증과 함께, 디스크 기반 저장소의 속도 제한과 성능 병목 현상은 점점 더 두드러지게 나타나고 있습니다.
이러한 요구를 충족시키기 위해 인메모리 저장소가 주목받고 있습니다.
인메모리 저장소란❓
인메모리 저장소(In-Memory Storage)는 데이터를 디스크와 같은 영구 저장 매체가 아닌 RAM(랜덤 액세스 메모리)과 같은 주기억 장치에 저장하는 방식입니다. 이러한 인메모리 저장소는 데이터의 접근 속도가 매우 빠르기 때문에, 성능이 중요한 애플리케이션에서 많이 사용됩니다.
인메모리 저장소의 주요 특징은 다음과 같습니다.
1. 속도
- RAM은 디스크보다 훨씬 빠르게 데이터를 읽고 쓸 수 있기 때문에, 인메모리 저장소는 데이터 접근 속도가 매우 빠릅니다.
2. 데이터 영속성
- 인메모리 저장소는 데이터가 휘발성 메모리에 저장되기 때문에, 시스템이 재시작되거나 전원이 꺼지면 데이터가 사라질 수 있습니다.
- 따라서, 중요한 데이터는 주기적으로 디스크에 백업하거나, 지속적인 저장소와 함께 사용하는 경우가 많습니다.
3. 용도
- 인메모리 저장소는 데이터베이스 캐시, 세션 저장소, 데이터 분석, 인메모리 데이터베이스(IMDB) 등 다양한 용도로 사용됩니다.
- ex) Redis, Memcached
4. 비용 & 용량
- 인메모리 저장소는 사용 가능한 RAM 용량에 의해 제한됩니다.
- RAM은 디스크보다 훨씬 빠르지만, 가격이 비쌉니다.
- 따라서 대량의 데이터를 인메모리로 유지하는 것은 비용과 용량 측면에서 도전 과제가 될 수 있습니다.
- 이로 인해 인메모리 저장소는 보통 핵심 데이터나 자주 접근되는 데이터만을 저장하며, 나머지 데이터는 디스크 기반 저장소와 병행하여 사용되는 경우가 많습니다.
redis란❓
Redis는 REmote DIctionary Server를 줄인말로, 이름에서 알 수 있듯이, Redis는 외부 서버에서 데이터를 저장하고 관리하는 역할을 하는 인메모리 데이터 구조 서버입니다.
Redis는 NoSQL 데이터베이스의 대표적인 예로 Java의 Map과 유사한 방식으로 데이터를 저장하지만, 더 넓은 범위의 데이터 구조와 기능을 제공합니다. 구체적으로는 다음과 같습니다.
- 데이터 구조
- 문자열, 해시, 리스트, 집합, 정렬된 집합 등 다양한 데이터 구조를 지원합니다.
- 고성능
- 인메모리 데이터 저장 방식으로 매우 빠른 데이터 접근 속도를 자랑합니다.
- 용도
- 데이터베이스 캐시, 세션 저장소, 실시간 데이터 분석 등 다양한 용도로 사용됩니다.
정리하자면 Redis는 인메모리 데이터 저장 방식을 사용하여 데이터를 RAM에 저장합니다. 이로 인해 일반적인 RDBMS(관계형 데이터베이스)에 비해 속도가 상대적으로 빠릅니다.
그러나 RAM은 휘발성이기 때문에 시스템이 재시작되거나 전원이 꺼지면 데이터가 사라질 수 있습니다.
따라서 Redis는 게시물 조회수, 방문 횟수, 사용자 세션, 장바구니 와 같이 시간이 지남에 따라 삭제되거나 변경되는 휘발성 데이터의 저장에 가장 많이 사용되는 데이터베이스입니다.
NoSQL이란❓
RDBMS는 강력한 데이터 일관성, 정형화된 데이터 처리, 복잡한 쿼리 지원 등의 장점을 가지고 있습니다.
그러나 수직적 확장 한계, 고정된 스키마, 비정형 데이터 처리의 어려움, 디스크 기반 저장소의 속도 제한 등으로 인해 현대의 대규모 데이터와 높은 성능 요구를 충족하기에는 제약이 있습니다.
이러한 한계로 인해 NoSQL 데이터베이스가 등장하게 되었습니다.
NoSQL은 "Not Only SQL"의 약어로, 전통적인 관계형 데이터베이스(RDBMS)와는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스 시스템을 의미합니다.
NoSQL 데이터베이스는 다양한 데이터 모델과 저장 방식을 제공하며, 주로 대량의 데이터를 처리하고 확장성을 중요시하는 현대의 애플리케이션에서 사용됩니다. NoSQL의 주요 특징과 유형은 다음과 같습니다.
- 스키마 유연성
- NoSQL 데이터베이스는
스키마가 고정되어 있지 않아, 데이터 구조를사전에 정의할 필요가 없습니다. - 이는 데이터의 변경이 빈번하거나 구조가 변동성이 큰 경우에 유리합니다.
- NoSQL 데이터베이스는
- 확장성
- 수평 확장(horizontal scaling)을 지원하여, 데이터베이스의 성능을 높이기 위해 새로운 서버를 추가함으로써 확장할 수 있습니다.
- 이는 대규모 데이터 처리와 높은 트래픽을 처리하는 데 효과적입니다.
- 성능
- 데이터 저장 및 조회 속도가 빠르고, 대량의 데이터를 신속하게 처리할 수 있도록 최적화되어 있습니다.
- 비관계형 데이터 모델
- NoSQL 데이터베이스는 다양한 데이터 모델을 제공하며, 관계형 데이터베이스에서 사용하는 테이블 기반 모델과는 다른 접근 방식을 사용합니다.
NoSQL의 모델
NoSQL 데이터베이스는 다양한 데이터 모델을 제공하며, 전통적인 관계형 데이터베이스(RDBMS)와는 다른 접근 방식을 사용한다고 했습니다.
주요 NoSQL의 모델은 다음과 같습니다.
1. Document
- 데이터를 JSON, BSON, XML 등의 문서 형태로 저장하며, 문서 내부에 복잡한 데이터 구조를 포함할 수 있습니다.
- ex) Mongo DB
2. Key - Value
- 데이터를 키(Key)와 값(Value)의 쌍(Pair)으로 저장하며, 간단하고 빠른 데이터 접근이 가능합니다.
- ex) Redis, Dynamo DB
3. Column Family
- 데이터를 열 단위로 저장하며, 각 열은 여러 행을 포함할 수 있습니다. 대규모 데이터와 높은 성능을 지원합니다.
- ex) Apache Cassandra
4. Graph
- 데이터를 노드와 엣지로 저장하여, 복잡한 관계를 모델링하고 쿼리 할 수 있습니다.
- ex) Neo4 j
Redis의 활용 사례
캐싱 (Caching)
- Redis는 인메모리 데이터 저장소로서, 데이터베이스나 다른 데이터 소스의 쿼리 결과를 캐시 하는 데 자주 사용됩니다.
- 이를 통해 데이터 접근 속도를 크게 향상할 수 있습니다.
- 예시
- 웹 애플리케이션에서 자주 조회되는 데이터(예: 사용자 프로필, 인기 게시물 등)를 Redis에 캐시 하여 데이터베이스의 부하를 줄이고 응답 속도를 개선합니다.
세션 관리 (Session Management)
- Redis는 세션 정보를 빠르게 저장하고 조회할 수 있는 구조를 제공하여, 웹 애플리케이션에서 사용자 세션을 관리하는 데 적합합니다.
- 예시
- 사용자의 로그인 상태, 장바구니 정보 등을 Redis에 저장하여, 서버 간의 세션 공유와 빠른 세션 접근이 가능합니다.
실시간 데이터 분석 (Real-time Analytics)
- Redis의 데이터 구조는 실시간으로 데이터를 집계하고 분석하는 데 유용합니다.
- 특히, 리스트와 집합 구조를 활용하여 빠른 데이터 집계가 가능합니다.
- 예시
- 실시간 사용자 활동 추적, 실시간 통계 집계, 소셜 미디어에서의 실시간 피드 집계 등.
- 실시간 사용자 활동 추적, 실시간 통계 집계, 소셜 미디어에서의 실시간 피드 집계 등.
순위 시스템 (Ranking Systems)
- Redis는 정렬된 집합(sorted sets)을 사용하여, 순위를 매기고 점수를 기준으로 데이터를 정렬하는 데 유용합니다.
- 예시
- 게임에서 플레이어의 점수를 기준으로 리더보드를 생성하거나, 웹사이트의 인기 게시물 순위를 실시간으로 유지합니다.
메시징 시스템 (Messaging System)
- Redis는 Pub/Sub(발행/구독) 모델을 지원하여, 실시간 메시징 및 알림 시스템을 구축하는 데 사용됩니다.
- 예시
- 채팅 애플리케이션에서 메시지를 실시간으로 전송하거나, 이벤트 기반 시스템에서 알림을 전달합니다.
분산 잠금 (Distributed Locking)
- Redis는 분산 환경에서 여러 프로세스 간의 잠금 관리 기능을 제공하여, 자원에 대한 동시 접근을 제어합니다.
- 예시
- 여러 서버가
동시에 특정 자원에 접근하지 않도록 하는 분산 잠금을 구현합니다.
- 여러 서버가
데이터 구조 서버 (Data Structure Server)
- Redis는 다양한 데이터 구조(문자열, 해시, 리스트, 집합 등)를 제공하여, 복잡한 데이터 저장 및 조작을 지원합니다.
- 예시
- 사용자 프로필 정보를 해시 구조로 저장하거나, 작업 목록을 리스트 구조로 관리합니다.
지속성 및 복구 (Persistence and Recovery)
- Redis는 데이터를 디스크에 주기적으로 백업하는 기능을 제공하여, 시스템 재시작 후에도 데이터를 복구할 수 있습니다.
- 예시
- Redis의 RDB(스냅숏)와 AOF(추가된 파일) 옵션을 통해 데이터를 디스크에 저장하고, 복구할 수 있습니다.
참고 ❗️
RDB와 AOF와 같은 기능은 데이터의 영속성을 강화하여 시스템 재시작 후 데이터를 복구할 수 있게 합니다.
하지만 이들은 기본적으로 메모리의 휘발성 문제를 해결하기 위한 보조적인 기능일 뿐, RAM의본질적인 휘발성 특성 자체를 변화시키지는 않습니다.
'Database > redis' 카테고리의 다른 글
[Redis] Spring Boot와 Redis로 세션 클러스터링 구현하기 (0) | 2024.08.11 |
---|---|
[Redis] Spring boot에서의 Redis사용하기 #2 : RedisTemplate (0) | 2024.08.10 |
[Redis] Spring boot에서의 Redis사용하기 #1 : RedisRepository (0) | 2024.08.10 |
[Redis] Redis의 주요 타입 살펴보기 (0) | 2024.08.08 |