Redis를 많이 사용하는 이유?
redis가 많이 사용되는 이유를 알아보기 전에 대표적인 데이터베이스와 전반적인 용어를 먼저 알아보자
대표적인 데이터베이스의 종류와 특징
1. RDB의 특징
- SQL 쿼리 언어를 사용해서 데이터에 접근할 수 있다.
- HDD 혹은 SSD 같은 보조기억 장치에 데이터를 저장한다.
- 행과 열이 존재한다.
- 테이블마다 스키마(Schema)를 정의해야 한다.
- 데이터 타입과 제약으로 데이터의 정확성이 보장된다.
- 중복되는 데이터가 없고, 관계를 통하여 관련된 값을 한 번에 변경할 수 있다.
- 비용이 많이 들어 확장성이 좋지 않다.
- 데이터 중복이 없어 쓰기 속도가 빠르다
- 대표적으로 MySQL, Oracle, PostgreSQL가 있다.
2. NoSQL의 특징
- SQL 쿼리 언어를 사용하지 않는다(쓰는 것도 있다고도 한다)
- 스키마를 반드시 정의하지 않아도 된다.(Schema-less)
- HDD 혹은 SSD 같은 보조기억 장치에 데이터를 저장한다.
- Key-Value의 방식의 방식으로 데이터를 저장한다.
- 문서(Document)라고 부른다.
- 데이터 중복이 가능해 읽기 속도가 빠르다.
- 데이터의 형식이 정해져 있지 않아 구조 변경이나 데이터의 형식 변경이 쉽다.
- 확장성이 좋아서 RDB와는 다르게 하드웨어의 개수를 늘리는 것으로 성능 향상을 이룰 수 있다.
- 대표적으로 MongoDB, Elasticsearch가 있다.
3. In-Memory DB의 특징
- NoSQL에 속하는 데이터베이스다.
- Key-Value 형식으로 데이터를 저장한다.
- Memory 같은 주 기억 장치에 데이터를 저장한다.
- Memory의 특성상 데이터가 휘발성이며(스냅샷을 생성하여 보존 가능), I/O의 속도가 매우 빠르다.
- 상대적으로 다룰 수 있는 용량의 크기가 제한적이다.
- 보조기억장치가 없는 임베디드 장치에도 적용할 수 있다.
- 기존 DB와는 다르게 메모리에서 무작위로 데이터를 저장하기 때문에 저장 구조가 간단하다.
- 대표적인 것으로 Redis, Memcached가 있다.
메모리란?
메모리는 컴퓨터 하드웨어 구성요소 3가지 중 하나로 저장을 담당하고 있는 부품이다.
컴퓨터 하드웨어 구성 요소 3가지
- 연산을 담당하는 CPU
- 기억을 담당하는 주 기억장치 RAM, 보조 기억장치 HDD SSD
- 입출력을 담당하는 키보드, 모니터, 프린터
컴퓨터가 데이터를 저장할 때 사용하는 것이 바로 RAM(Random Access Memory)이고 어떤 위치에서 던 똑같은 속도로 접근하여 읽고 쓸 수 있다는 의미를 가지고 있다.
간단한 컴퓨터의 작동 원리
- 입력을 받으면 RAM에 저장된다.
- RAM에 적힌 값과 존재하는 명령을 해석해서 CPU가 연산을 한다.
- 결과를 RAM에 보내주면 그것을 출력한다.
컴퓨터는 0과 1만 사용한다, 이렇게 전류를 통하여 작동을 하기 때문에 물리적 거리가 상당히 중요한데 CPU와 RAM 사이에는 레지스터와 캐시라는 메모리 계층이 있지만 저장공간이 좁고 비싸서 RAM이 주 기억장치로, 컴퓨터가 켜진 순간부터 꺼지는 그 순간까지 데이터를 담아 놓고 있다.
메모리 계층의 구조
메모리(램)의 특징은?
- 전원이 커질 경우 데이터가 모조리 날아가는 휘발성이다.
- CPU와 물리적으로 가까워서 데이터를 처리하는 것이 매우 빠르다.
- 반대로 보조 장치라고 부르는 HDD(하드디스크)와 SSD는 전원이 꺼져도 데이터가 날아가지 않는 비휘발성의 속성을 가지고 있고, CPU와의 거리가 멀어서 데이터를 처리하는 속도가 느리다.
캐시(Cache)란?
- 캐시(Cache)란 데이터를 미리 복사해놓는 임시 저장소이다
- RAM과 CPU는 연산속도의 편차가 심하여 캐시 메모리를 중간에 둠으로써 병목 현상을 줄이고 속도 차이를 해결한다.
- 임시로 저장하다는 특징을 이용하여 한번 사용되었던 것을 다시 요청할 경우에 빠르게 사용 가능하다.
In-Memory DB가 필요한 이유
- 사물 인터넷(IoT)의 출현과 클라우드 기반 솔루션이 성장하면서 실시간으로 데이터를 처리해야 할 필요성이 생겼다.
- 수백만 개의 장치에서 매초 데이터가 생성되었고, 그에 대한 실시간에 가까운 데이터 처리가 필요했다.
- 데이터 지속성은 큰 문제가 아니었다.
Memcached, Redis의 공통점
- 1ms 이하의 응답 시간을 제공한다.
- 문법적으로 사용하기 쉽고, 개발 코드 양 또한 적다.
- 데이터를 여러 노드에 분산하여 저장시킬 수 있다(수요가 증가할 때 스케일아웃 가능)
- 다양한 프로그래밍 언어 지원 : Java, Python, C, C++, C#, JavaScript, Node.Js, Ruby, Go etc..
Memcached만의 특징
- 멀티스레드를 지원한다.
Redis만의 특징
- 데이터 타입은 String, Set, List, Sorted set, Hash, Bit arr, HyperLog, Stream을 지원한다.
- 스냅샷을 통해서 특정 시점에 데이터를 디스크에 저장할 수 있다.
- 싱글 스레드를 지원한다.
- Master - Slave 구조로, 여러 개의 복제본을 만드는 것이 가능하다(높은 가용성)
- ACID를 지원해서 트랜잭션을 걸 수 있다.
- Publish(발행)과 Sub(구독) 방식의 메시지를 패턴 검색이 가능하다. 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버 상호 통신에 사용할 수 있다.
- 루아 스크립트 지원
- 실시간 위치기반 데이터를 지원합니다.
사람들이 레디스를 많이 사용하는 이유??
위의 차별성만 봐도 Redis를 안쓸 이유가 없어 보인다.
하지만 Redis는 싱글 스레드이기 때문에, 다중처리가 Memcached에 비해 속도가 엄청나게 차이가 있다.
- Memcached: Keys, fullshall 등의 명령어 사용사 1ms정도 소요
- Redis: 데이터 100만 건 기준 1s
또 RDB 작업(특정 간격마다 모든 데이터를 디스크에 저장)하는 작업이 매우 오래 소요된다.
- AWS, 60기가 메모리 기준 10m
사용할 때 주의하자!!
참조 : https://www.tibco.com/ko/reference-center/what-is-an-in-memory-database
https://chrisjune-13837.medium.com/redis-vs-memcached-10e796ddd717
'취준' 카테고리의 다른 글
TypeScript를 왜 사용해야 할까? (0) | 2022.12.03 |
---|---|
JavaScript의 비동기 처리? (0) | 2022.11.30 |
REST API vs GraphQL (0) | 2022.11.23 |
엘리스 SW 엔지니어 트랙 2기 합격 후기 (5) | 2022.03.21 |
댓글