본문 바로가기

MY개발생각

[개발생각] REDIS vs RDB 안전성에 대해서..

참, 막연한 두려움인것일까?, 고정관념인 것일까? REDIS는 뭔가 불안전하고, RDB는 안전하다고 느끼는 것..

 

서비스를 만들때, RDB 대신, 성능을 위해서 REDIS에 값을 넣고 조회하는 방법을 많이 사용한다.

그런데, 이때 꼭 불안한 마음이 들긴한다..

 

REDIS 죽으면 어떻하지??

RDB에도 저장을 해둬야하나?

 

write-back이라고 하는데,

캐시에 먼저 저장해두고, 적절하게 후에 rdb등에 백업해서 저장해두는 방법도 많이 쓴다.

 

엄밀히 말하면, RDB가 REDIS보다 더 안전한것인가?라는 의문이 들긴한다.

RDB도 복제타이밍이나, 커밋/설정등에 따라 유실이 될수가 있다.

완벽하게 완전무결한 솔류션은 아니다.

다만 복제디비를 유지할수있어서, 문제가 있을때,

바로 슬레이브 디비가 구동될수있다 정도랄까?! 

(스케일아웃측면에서는 오히려 확장기능은 더 떨어지는 것같고 ;;)

 

REDIS도 클러스터링을 지원하기때문에,

레플리카 설정을 통하면 노드가 죽는경우의 리스크를 많이 없앨수있다.

또한 설령 노드가 죽었다 하더라도,

RDB, AOF를 통해, 복구가 가능하다.

 

다만, AOF는 현재까지 실행된 명령어를 직접 하나하나씩 실행해서 복구하는 방법이기때문에 복구시간이 오래걸린다는 문제가 있고,

RDB는 주기적으로 스냅샷을 떠놓는 방법이기에, 복구가 빠르지만, 스냅샷을 떠놓기전의 데이터는 유실될수있다는 문제가 있다.

 

하지만, 예전 REDIS 버전에서나 RDB, AOF분리해서 사용했지,

요즘 버전 7,8+ 등에서는 내부적으로 RDB, AOF를 사실 혼합사용하는 방법으로 동작한다.

AOF가 내부적으로 RDB스냅샷을 만들고, 스냅샷만드는 간극에는 증분 AOF파일을 통해 보정하면서 복구를 한다.

 

그럼, 여기서 의문점이 든다.

그럼 REDIS만 사용해도 충분히 안전하지 않나?

꼭 RDB에 저장을 해야하는것에 집착을 하지 않아도 되지 않을까?

만났던 많은 개발자들도, 뭔가 관성인지, 편견인지는 모르지만

데이터는 RDB에 저장되어있어야 안전하다고 느끼는 개발자들이 상당히 많다.

(성능측면이 아니라면, 물론 나도 그런것 같다 ㅋ)

 

그 이유중에 하나가, 조회하면, 보이는 가시성 때문이 아닐까?

쿼리를 통해 데이터가 직접적으로 눈으로 보이기에 더 안전하다고 보는게 아닐까? 생각해본다.

인간이란 눈에 보이는것을 더 믿게 되는 습성이 있는것같다.

눈으로 보이고, 데이터를 실제 내가 조회하고 조작할수있다는 안도감에서 더욱 RDB가 더 안전하다고 느끼는것같다.

(물론, REDIS도 조회가 가능하지만, 뭔가 종합적으로 데이터를 바라볼수있는 형태로는 부족하니..)

 

정답은 없지만, 해당 솔류션이 다른 솔류션의 안정성을 충족하고, 성능상으로도 더 뛰어나다면, 

믿고 쓰는 판단도 좋은 판단같다.

 

(그래서, REDIS만 사용하는 케이스를 이번에 만들려고 한다... 물론 메모리 계산은 꼭 해야한다.)

REDIS의 메모리 최대 사용 기간은 계산을 해야하고, 문제가 있다면, 노드를 충분하게 늘리거나, write-back을 구현해야한다.