Redis
Redis는 오픈 소스로, 데이터베이스로 사용되는 Key-Value 저장소입니다. 또한 다양한 인메모리 데이터 구조를 제공히며, 비정형 데이터를 저장, 관리하기 위한 오픈 소스 기반의 NoSQL 입니다. 그래서 웹 서버의 부담을 획기적으로 줄이고, 고속으로 데이터 제공이 가능합니다.
NoSQL란?
Not Only SQL 혹은 Non-Relational Operational DataBase의 약자로 비관계형 데이터베이스를 지칭합니다.
기존의 RDBMS와 같은 관계형 데이터 모델을 지양하며 대량의 분산된 비정형 데이터를 저장하고 조회하는데 특화된 데이터베이스로 스키마 없이 사용하거나 느슨한 스키마를 제공하는 저장소입다.
스키마란?
데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것입니다.
위 사이트의 이미지와 같이 현재 가장 인기있는 Key-Value 저장소이기도 합니다.
✔️ 인메모리( In-Memory )
컴퓨터의 주기억장치인 RAM에 데이터를 올려서 사용하는 방법으로 RAM에 데이터를 저장하게 되면 메모리 내부에서 처리가 됩니다. 데이터를 저장/조회할 때 하드디스크를 오고가는 과정을 거치지 않아도 되어 속도가 빠르지만 서버의 메모리 용량을 초과하는 데이터를 처리할 경우, RAM의 특성인 휘발성에 따라 데이터가 유실될 수 있습니다.
🏷️ 특징
✅ Key, Value 구조
✅ 빠른 처리 속도
- 디스크가 아닌 메모리에서 데이터를 처리하기 때문에 속도가 빠릅니다.
✅ Data Type(Collection)을 지원
- 개발의 편의성, 생산성이 좋아지고 난이도가 낮아집니다.
✅ AOF, RDB 방식
- 인 메모리 데이터 저장소가 가지는 휘발성의 특성으로 데이터가 유실될 경우를 방지하여 백업 기능을 제공합니다.
AOF (Append On File) 방식
Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태입니다.
RDB(Snapshotting) 방식
순간적으로 메모리에 있는 내용 전체를 디스크에 담아 영구 저장하는 방식입니다.
✅ Redis Sentinel 및 Redis Cluster를 통한 자동 파티셔닝을 제공
- Master와 Slaves로 구성하여 여러대의 복제본을 만들 수 있고, 여러대의 서버로 읽기를 확장 가능합니다.
파티셔닝이란?
다수의 Redis 인스턴스가 존재할 때 데이터를 여러 곳으로 분산 시키는 기술각 Redis 인스턴스는 전체 키 중 자신에게 할당된 일부 파티션의 키들만 관리하게 됩니다.
✅ 다양한 프로그래밍 언어 지원
✅ 싱글 스레드
- 한번에 하나의 명령만 수행이 가능하므로 Race Condition이 거의 발생하지 않습니다.
Race condition이란?
공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태입니다. 즉, 두개의 스레드가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상황에서 발생프로그램의 일관성과 정확성을 손상시킬 수 있습니다.
🏷️ 주의할 점
✅ 시간 복잡도
- Single Threaded(싱글 스레드) 사용으로 한번에 하나의 명령만 수행이 가능하므로 처리 시간이 긴 요청의 경우 장애가 발생할 수 있습니다.
✅ 메모리 단편화
- 크고 작은 데이터를 할당하고 해제하는 과정에서 메모리의 단편화가 발생하여 응답 속도가 느려질 수 있습니다.
❗메모리 단편화 (Memory Fragmentation)
RAM에서 메모리를 할당받고 해제하는 과정에서 위와같이 부분부분 빈 공간이 생기는데, 새로운 메모리 할당 시에 사용 가능한 메모리가 충분히 존재하지만 메모리의 크기만큼의 부분이 없어 마지막 부분에 할당되어 메모리 낭비가 심하게 됩니다. 이 현상이 계속되면 실제 physical 메모리가 커져 프로세스가 죽는 현상이 발생 할 수도 있으므로, redis를 사용 시에 메모리를 적당히 여유있게 사용하는 것이 좋습니다.
✅ 메모리 단편화
- 메모리 사용량이 너무 많으면 Redis 서버의 성능 저하나 장애로 이어질 수 있기 때문에 주기적인 모니터링을 통해 메모리를 관리해주어야합니다.
📖 Reference
'코딩 공부 > DB' 카테고리의 다른 글
[DB] NoSQL (3) | 2024.10.16 |
---|---|
[DB] Index (1) | 2024.10.06 |