Redis가 사랑받는 이유에 대하여

·2022년 6월 24일
15

SKILL

목록 보기
1/16
post-thumbnail

이번에 쓸 포스트는 사람들이 많이 사용하는 메모리 기반의 DB인 레디스에 대한 글이다.

그 전에 알아볼 것이 정말 많다.
모든 것을 설명하면서 진행을 하므로 글이 상당히 길다.

대표적인 데이터베이스의 종류 3가지.

대표적인 데이터베이스에는 RDB, NoSQL, In-Memory DB로 총 세가지가 존재하는데
간단하게 특징을 확인해보고, 본론인 Redis(In-Memory DB)에 대해 알아보려고 한다.

1. RDB의 특징 (관계형 데이터베이스)

  • HDD 혹은 SSD같은 보조기억 장치에 데이터를 저장한다.
  • 행과 열이 존재한다, 쉽게 생각해서 엑셀과 같다.
  • 데이터를 저장하는 공간의 형식이 정해져있다.
  • 관계라는 것을 통하여 데이터와의 연결고리를 만든다.
  • 중복되는 데이터가 없고, 관계를 통하여 관련된 값을 한번에 변경할 수 있다.
  • SQL이라는 언어를 사용해야만 데이터에 접근할 수 있다.
  • 관계라는 속성때문에 성능을 향상시키기 위해서는 하드웨어의 스펙이 상승되어야만한다.
    샤딩이라는 것을 통해서 분리를 할 수는 있지만, 매우 어렵다.
  • 대표적으로 MySQL, Oracle, PostgreSQL가 있다.

2. NoSQL의 특징

  • HDD 혹은 SSD같은 보조기억 장치에 데이터를 저장한다.
  • Key-Value의 방식의 방식으로 데이터를 저장한다.
  • 테이블이라고 부르는 것이 아니라 문서(Document)라고 부른다.
  • 데이터의 형식이 정해져있지 않아 구조 변경이나 데이터의 형식 변경이 쉽다.
  • SQL을 사용하지 않는다. (쓰는 것도 존재해서 NoSQL이라 부르는 것이 문제가 있다고도 한다.)
  • 확장성이 좋아서 RDB와는 다르게 하드웨어의 개수를 늘리는 것으로 성능 향상을 이룰 수 있다.
  • 대표적으로 MongoDB, Elasticsearch가 있다.
  • 사람마다 NoSQL의 정의가 다르다.

3. In-Memory DB의 특징

  • Memory같은 주 기억 장치에 데이터를 저장한다.
  • NoSQL에 속하는 데이터베이스다. Key-Value 형식으로 데이터를 저장한다.
  • Memory의 특성때문에 데이터가 휘발성이며, I/O의 속도가 매우 빠르다.
  • 상대적으로 다룰 수 있는 용량의 크기가 제한적이다.
  • 보조기억장치가 없는 임베디드 장치에도 적용할 수 있다.
  • 기존 DB와는 다르게 메모리에서 무작위로 데이터를 저장하기 때문에 저장 구조가 간단하다.
    (...? 일반적인 DBMS에서는 B+Tree or B-Tree 알고리즘을 사용하는데, 메모리 인덱스에 직접 꽂힌다는걸까? 찾아봐야겠다)
  • 대표적인 것으로 Redis, Memcached가 있다.

그럼 이제부터 본론이다.

메모리란 무엇일까?


컴퓨터를 모르는 사람도 한번쯤은 봤을 법 한 삼성전자의 메모리, 별명은 초록색이라 시금치라고 부른다.

메모리는 컴퓨터 하드웨어 구성요소 3가지 중 하나로 저장을 담당하고 있는 부품이다.

컴퓨터 하드웨어 구성 요소 3가지

  • 연산을 담당하는 CPU
  • 기억을 담당하는 주 기억장치 RAM, 보조 기억장치 HDD SSD
  • 입출력을 담당하는 키보드, 모니터, 프린터

컴퓨터가 데이터를 저장할 때 사용하는 것이 바로 RAM(Random Access Memory)이고
어떤 위치에서던 똑같은 속도로 접근하여 읽고 쓸 수 있다는 의미를 가지고 있다.

간단한 컴퓨터의 작동 원리

  1. 입력을 받으면 RAM에 저장된다.
  2. RAM에 적힌 값과 존재하는 명령을 해석해서 CPU가 연산을 한다.
  3. 결과를 RAM에 보내주면 그것을 출력한다.

이러한 과정을 통해서 컴퓨터는 작동을 하게되는데, 많은 사람들이 아는 것처럼 컴퓨터는 0과 1만 사용한다.

전류를 통하여 작동을 하기 때문에 물리적 거리가 상당히 중요한데
CPU와 RAM 사이에는 레지스터와 캐시라는 메모리 계층이 있지만 저장공간이 좁고 비싸서
RAM이 주 기억장치로, 컴퓨터가 켜진 순간부터 꺼지는 그 순간까지 데이터를 담아놓고 있다.


메모리 계층의 구조

메모리(램)의 특징은?

메모리의 특징은 전원이 꺼질 경우 데이터가 모조리 날라가는 휘발성 이라는 것이다.

어째서 꼭, 휘발성이여야하는지도 한번 찾아봤는데 물리학의 문제가 좀 있는 것 같다.

참고자료 : https://pcguide101.com/ram/why-ram-is-called-volatile-memory/

그리고 위에서 언급한 것처럼 데이터를 통신하기 위해서는 물리적 거리가 중요한데,
램은 CPU와 물리적으로 가까워서 데이터를 처리하는 것이 매우 빠르다.

반대로 보조기억장치라 부르는 HDD(하드디스크)와 SSD(스스디)의 경우에는
전원이 꺼져도 데이터가 날라가지 않는 비휘발성의 속성을 가지고 있고
CPU와의 거리가 상당히 멀기 때문에 데이터를 처리하는 속도가 느리다.

캐시(Cache)란?

캐시(Cache)란 데이터를 미리 복사해놓는 임시 저장소기도 하며 빠른 장치와 느린 장치에서 속도 차이로 인한 병목 현상을 줄이기 위한 메모리다.

실제로 RAM과 CPU는 연산속도의 편차가 심하여 캐시메모리를 중간에 두는 것으로 속도 차이를 해결하고 있다.
비슷한 논리로 CPU와 HDD&SDD 속도 차이가 매우 심하여 RAM을 캐시메모리라고도 부르기도 한다.

임시로 저장한다는 특징을 통하여 한번 계산되었던 것을 다시 요청할 경우에 빠르게 가져올 수 있다.

In-Memory DB가 탄생한 이유

위의 설명으로 메모리란 무엇이고 특징은 무엇인지 알 수 있게 되었다.
드디어 본론인 In-Memory DB가 탄생한 이유다.

구글링을 계속 해본 결과, 2005년 전까지 In-Memory DB라는 것이 인기가 없었다.

그리고 대략 2008~2009년 이후부터 폭발적인 글을 확인할 수 있었는데 이 시기가 어떤 일이 있었는지 모르겠다(...)

찾아본 글에 의하면, 사물 인터넷(IoT)의 출현과 클라우드 기반 솔루션이 성장하면서 실시간으로 데이터를 처리해야 할 필요성이 생겼고,
메모리의 가격이 상대적으로 저렴해지면서 데이터를 저장하는데 사용했다. 라고 하는 것 같다.

결국은 기존의 DB로는 급격하게 늘어난 데이터를 감당할 수 없었고,
여러가지 중요한 시스템에 실시간에 가까운 데이터 처리가 필요해서 발전했다. 라고 정리를 할 수 있는 것 같다.

그럼 이제 대표적인 In-Memory DB, Memcached와 Redis의 특징을 알아보자.

Memcached의 특징

  • 데이터 타입을 String만 지원한다.
  • 데이터 저장은 오직 메모리에만 저장한다.
    • 이러한 이유로 메모리가 부족할 경우 일부 데이터를 삭제하여 메모리를 사용한다.
    • 메모리에만 저장을 할 수 있기에 복제가 불가능하여 캐시로만 사용을 할 수 있다.
  • 멀티쓰레드를 지원한다.
  • 캐시 용량은 Key는 250byte, Value는 1MB를 지원한다.
  • 수평적 확장이 가능하다.

Redis의 특징

  • 데이터 타입은 String, Set, List, Sorted set, Hash, Bit arr, HyperLog, Stream을 지원한다.
  • 데이터 저장은 메모리를 포함하여 디스크에도 저장을 할 수 있다.
  • 스냅샷을 통해서 디스크에 담을 수 있는데 이를 통해서 비휘발성의 특징도 가지고 있다.
    • 반복적인 스냅샷을 통하여 디스크에 저장해 메모리의 여유 공간을 만들 수 있다.
  • 싱글쓰레드를 지원한다.
  • 캐시 용량은 Key와 Value 모두 512MB를 지원한다.
  • 데이터를 복제하고, 들어온 데이터를 실시간 업데이트가 가능하여 서버 복제가 가능하다.
    • 이러한 이유로 스토리지로도 사용할 수 있다.
  • Lua 익스텐션을 지원해서 로직을 만들어서 적용시킬 수 있다.
  • ACID를 유사하게 지원해서 트랜잭션을 걸 수 있다.

사람들이 레디스를 많이 사용하는 이유

DB-Engines Ranking of Key-value Stores

레디스를 사람들이 많은 사람들이 사용하냐고 질문을 받았을 때
나는 사용자가 많기 때문에 정보가 많아서 적용을 했다. 라고 대답을 했었다.

하지만 이렇게 정리를 하면서 사람들이 왜 많이 쓰는지 이해를 할 것 같다.

멤캐시드의 장점은 작은 데이터를 임시저장하는 것에 강점을 가지고 있고,
멀티쓰레드를 활용하여 다중처리가 빠르다는 장점이 있다.

하지만 그것을 제외하고 모든 것이 단점이다.

극한의 상황에 도달을 한다면 성능을 위하여 큰 노력을 사용하게 되지만
일반적인 경우에서는 편의성을 선택을 하길 마련인데, Redis를 선택한다는 것이 그것과 동일한 선상에 있는 것 같다.

애초에 저장할 공간이 없다고 데이터를 일부 지운다는 것은.... 로그같은 경우에는 그렇게 사용될 수도 있긴 하겠지만
너무 좋지 못한 방향이라고 생각한다.

설정을 할 경우에는 지울 수 있다고는 하지만, 자료가 상당히 모자라서 직접 만들어야한다는 것은 어쩔 수 없는 듯 하다.

끝!!!!!


참고한 자료

System Properties Comparison Memcached vs. Redis vs. SingleStore
Difference between Redis and Memcached
[Database] Redis에 대해 알아보자 (Redis 컬렉션, Sentinel, Cluster, 운영시 장애 포인트)
Redis의 개념과 특징, 아키텍처
인메모리 데이터베이스란 무엇입니까?

보는게 좋은 자료

Redis와 Memcached를 비교하는 영상

https://www.youtube.com/watch?v=LLFMTEaW98g
https://www.youtube.com/watch?v=5DstN-gg16o
https://www.youtube.com/watch?v=BWt4XYuDchM

꼭...보자 할거 정리좀하고 (ㅠㅠ)

profile
물류 서비스 Backend Software Developer

2개의 댓글

comment-user-thumbnail
2022년 9월 12일

Memcached는 적은 양의 데이터를 임시로 저장할 수 있는 장점이 있습니다.
빠른 다중 처리는 다중 스레딩의 이점입니다.
그러나 그 외에는 모든 것이 부정적이다.

답글 달기
comment-user-thumbnail
2023년 8월 7일

좋은 내용 감사합니다 멋지네요! 저도 개발 공부하는 중인데, https://quantpro.co.kr/ 해당 사이트 퀀트 내용 어떤지 의견주시면 감사하겠습니다!

답글 달기