모르는게 많은 개발자

[NoSql] Redis 개념/특징 본문

알아가는 개발

[NoSql] Redis 개념/특징

Awdsd 2020. 6. 14. 18:17
반응형

로그인 인증 서버 프로젝트를 진행해보면서 Redis라는 DBMS(Database Management System)을 사용해 봤다. 처음 사용때는 그냥 빠르다는 이유로 사용했지만 이후 Redis가 정확히 무엇이고, 왜 빠른지 알아보았다. 정리한것에 대해 글을 쓰려한다.


1. Redis 특징

Redis는 Remote Dictionary Server의 약자로 In-Memory 기반의 Key-Value 기반의 NoSql DBMS이다. 

In-Memory

Redis는 기본적으로 In-Memory기반이다. 즉, 데이터들이 디스크에 저장되는 다른 DBMS와 달리 Memory(Ram)에 저장된다. 일반적으로 디스크를 읽는 속도보다 메모리를 읽는 속도가 훨~씬 빠르기 때문에 데이터를 Read/Write하는 과정에서 속도가 훨씬 빠르다는 장점이있다.

Key-Value

Redis는 key-value로 데이터가 이루어져 있다. 예를 들어 내가 key가 "a"이고 value="1"이라는 데이터를 넣었을 때  나중에 데이터를 Read할 때는 key를 통해 데이터를 찾을 수 있다. 

Collection

Redis는 Collection 즉, 다양한 자료구조(String, Hash, Set, List, Sort등)를 저장할 수 있는 기능이 있다. 이 기능을 이용해 개발자들의 편의성과 성능을 높여줄 수 있다. 예를 들어 RDBMS에 SCORE를 저장하고 정렬하여 출력한다고 가정을 했을 때 RDBMS 정렬을 디스크에서 수행하기 때문에 속도가 느려지지만 Redis의 Sort자료구조를 활용하면 속도와 편의성을 동시에 얻을 수 있다.

Cache 방식

Redis는 기본적으로 Cache방식을 사용한다. 여기서 Cache란 데이터를 미리 저장해놓고 요청에 따라 필요한 데이터를 바로 보내주는 것이다. 이 방식을 사용함으로써 DB Read의 부하를 줄여줌으로 써 많은 요청이 몰렸을 때 성능이 향상될 수 있다.

Expires

내가 Redis를 처음 사용할 때 가장 신기했던 기능이다. Expires는 말그대로 만료를 뜻하는데 Redis는 각 데이터(key-value)에 만료시간을 설정하여 일정 시간후 데이터를 자동으로 없앨 수 있다. 난 이 기능을 이용해 로그인 인증 토큰 처리를 했다.


2. Redis의 데이터 저장 방식

Redis는 In-memory라고 언급했다. 그러면 memory의 휘발성때문에 서버가 꺼지면 데이터가 사라질까라는 의문을 가질 수 있다.

하지만 Redis는 데이터를 디스크에도 따로 저장하는 방식을 사용하기 때문에 서버가 다운되도 데이터를 유지하는 영속성(Persistence)을 가지고 있다. Redis가 데이터를 저장하는 방식은 두가지가 있다.

AOF

AOF는 Append Only File의 약자로 Redis의 명령이 실행될 때마다 명령이 파일에 기록되는 형식이라 데이터 손실이 거의 없다.

하지만 명령이 실행되고 바로 저장되는 것이 아니기 때문에 명령어 수행과 저장 사이에 서버가 다운된다면 데이터 손실이 있을 수 있다.

또한 AOF는 데이터 전체를 다시 저장하는 Rewrite기능이 있다. 이 기능을 사용하면 지금까지 저장된 기록은 모두 지워지고 최종 수정된 마지막 데이터만 남게 된다.

 

이 기능이 있는 이유는 저장하는 파일이 너무 크면 OS파일 사이즈에 제한이 걸리거나, Redis 서버를 켰을 때 AOF파일을 로드하는 시간이 오래 걸릴 수 있기때문입니다.

 

또한 AOF파일은 Text파일로 되어있기 때문에 수정이 가능하다. 예를 들어 데이터를 모두 지우는 명령어를 잘못 사용하여 데이터가 지워지면 AOF파일에서 해당명령을 지우고 서버를 다시 시작하면 데이터가 유지된다.

 

RDB

RDB는 AOF처럼 실시간으로 저장하는 방식이 아닌 특정 시점에 메모리에 존재하는 데이터 전체를  Binary파일로 저장하는 방식이다.

AOF파일 보다 크기가 작아 AOF파일보다 빠르게 로드 할 수 있다.

RDB는 기본적으로 dump.rdb파일에 기록된다. RDB를 저장할 때는 BGSAVE혹은 SAVE명령어로 저장한다.

SAVE명령시 Redis는 클라이언트의 요청을 받지 못하고, BGSAVE는 자식 프로세스에서 백그라운드로 수행되기 때문에 클라이언트 요청을 처리 할 수 있다.


3. Redis VS Memcached

Memcached는 Redis와 유사한 특징을 가진 분산 캐시 시스템이다. Redis와 Memcached의 차이점은 아래와 같다.

반응형

'알아가는 개발' 카테고리의 다른 글

JWT 저장소에 대한 고민(feat. XSS, CSRF)  (3) 2021.04.22
[NoSql] SpringBoot, Redis 연동 예제  (0) 2020.07.29
Base64 인코딩 개념/과정  (0) 2020.06.13
REST란 무엇일까?  (0) 2020.05.14
TCP/UDP 특징 총정리  (0) 2020.05.05
Comments