DB #6 :: Redis

해다·2022년 5월 3일
0

etc.

목록 보기
19/21
post-thumbnail
post-custom-banner

🙊 잘못된 내용은 댓글로 알려주세요~


🛑 Redis?

Redis는 Remote Dictionary Server의 준말로 오픈소스 기반 비관계형 데이터베이스 관리 시스템으로 모든 데이터를 메모리에 저장하고 조회하는 Key, Value 구조의 NoSQL 인메모리(In-memory) 데이터 저장소이다.
속도가 빨라서 주로 데이터베이스나 캐시, 메시지 브로커로 사용되고 있으며 이런 점에서 Redis의 특징을 몇 가지 엿볼 수 있다.

  1. 메모리 기반의 데이터 저장소이고
  2. NoSQL & Cache 솔루션이고
  3. Cache로도 사용될 수 있으며
  4. 명시적으로 삭제나 만료를 설정하지 않으면 데이터 영구보존이 가능하다

🤔 인메모리는 뭐지?

인메모리에서는 외부 저장장치가 아니라 메모리에 데이터를 저장한다.
외부 저장장치가 아니라는 건? HDD나 SDD라 불리우는 하드 디스크에 데이터가 저장되지 않고, RAM에 데이터가 저장된다는 이야기다.
컴퓨터를 배우다 보면 항상 기본적으로 나오는 이야기인데, RAM은 속도가 빠르지만 컴퓨터의 전원을 끄면 데이터가 유실되기 때문에 영속성이 보장되지 않는다. 이 특징을 살려서 빠른 속도의 데이터 조회를 가능하게 하기 위해 바로 Redis가 탄생한 것이다!

🤔 바로 위에서는 영구 보존이 가능하다고 써져있는데?

그래서 Redis가 특별한 위치를 가지고 있는 것이다! 인메모리 기반이지만, snapshot과 AOF(Append Only File) 방식을 사용하여 데이터를 디스크에 저장해 데이터를 영속화 시키는 기능이 있기 때문에 메모리에 저장된 데이터가 휘발되지 않는다.
그리고 key-value와 같은 단순한 구조의 데이터 모델 을 사용하고 있기 때문에 그 속도가 더욱 빠른 것이기도 하다. 그래서 페이스북, 인스타그램 등 과 같은 대형 서비스 업체들이 사용자들의 대규모 메시지를 실시간으로 처리하기 위해 Redis를 사용하고 있다!

😞 그렇다고 Redis가 항상 좋은 건 아니다

인메모리 데이터 저장소의 특성상, 서버 장애가 발생한다면 데이터 유실이 일어날 가능성이 높기 때문에 서버 장애에 대한 운영플랜이 필수로 요구된다.
이러한 특성 때문에 다른 무엇보다 메모리 관리가 특히 중요하고, 싱글 스레드로 작동하기 때문에 한 번에 하나의 명령만 처리가 가능하다. 그렇기 때문에 처리하는데 시간이 오래 걸리는 복잡한 명령이나 요청을 피해야한다는 단점이 있다.
또한 메모리 할당, 해제 같은 메모리 풀을 사용하지 않고 쓰기 연산이 copy on write 방식으로 동작해서
메모리 파편화가 발생할 수 있다.
여기서 메모리 파편화는? 메모리 단편화(fragmentation)라고도 불리는데, 쉽게 말하면 메모리는 충분하지만 메모리의 공간이 조각조각 나뉘어져서 실제로 사용이 불가능한 상태를 말한다.
그럼 copy on write는? 데이터 변경 시에 실제 메모리 크기 만큼 자식 프로세스가 원본을 복사하는 방식으로 실제 필요한 메모리의 양보다 더 많은 메모리를 사용하게 만든다!

👀 그래도 많이 쓸 걸?

다만 위의 사례는 아주 극단적인 경우이고 앞서 말했듯이 페이스북과 같은 대규모 서비스에서도 Redis를 사용하고, 찾아보니 배민도 쓴다는 것 같은데... 그러면 괜찮지 않을까 하는 생각을 한다.

profile
잘하는 건 아닌데 포기하진 않을거야
post-custom-banner

0개의 댓글