Redis는 뭔가요?

권태용·2020년 10월 7일
2

Database

목록 보기
2/3

'Redis는 뭔가요?' 라는 질문에 현재 진행중인 프로젝트에서 Redis의 사용방법을 찾아봤다. 프로젝트 코드상에서 확인하면 Cache 레포지토리로 사용한다.

근데 왜 Cache 데이터 저장 용도로 Redis를 사용하는 것일까?
다른 NoSQL이 있는데 굳이 Redis를 쓰는 이유가 멀까?

그렇게 Redis의 특징을 찾아보고 왜 쓰는지 그리고 그 활용방법에 대해 찾아 보았다.

Redis란

Redis는 NoSQL이다. NoSQL의 종류는 key-value, Column famliy store, DocumentDB, Graph DB등이 있다.

그중 Redis(REMote Dictionary Server) Dictionary 특징인 key-value로 데이터를 저장한다. 때문에 하나의 키에 데이터를 저장한다.

특징은 아래와 같다.

  1. 데이터는 메모리와 디스크에 저장되고 서버가 죽으면 디스크 데이터로 복구가 가능하다.
  2. 데이터의 만료일을 지정하여 데이터를 캐시처럼 일정기간 저장 할 수 있고 명시적으로 키를 통해 데이터를 삭제할 수 있다.
  3. 데이터의 타입은 String, Sorted Set, Hash, List형식을 지원한다.

Redis의 활용방법

Redis를 활용방법을 정리하는데 혼란이 왔다. Cache 레포지토리로 사용하는가 Session 레포지토리로 사용하는 것인가 .. 찾아 보니 두 방법 모두 사용 가능하였다.

Session Clustering

세션은 클라이언트의 정보를 서버 측에 저장한다. 하지만 이런 세션을 클러스터링 하면 좋은점이 뭘까? 아니 왜 클러스터링을 하게 되었을까?

사용자가 많아지면 서버의 부하가 늘어나고 그에 따라 서버를 증설한다. 뿐만아니라 여러 서비스를 각각의 서버로 분리하여 운영하기에 여러 서버를 통해 서비스를 제공한다. 그렇기에 세션을 서버인스턴스에 저장하게 될 경우 여러 서버에 로그인을 해야 한다. 이런 문제점을 해결 하고자 Session Clustering이 나왔다.

Spring에선 Spring-Data-Redis라이브러리를 사용하여 세션 저장소를 Redis서버로 지정할 수 있다.

Cache

캐시는 한번 가져온 데이터를 임시로 저장하고 이를 메모리에 저장해두어 다음 데이터 사용시에 효율적인 트래픽 처리를 위해 사용된다. 어떤 데이터를 캐시로 처리 할 것인가는 개발자가 선택하기 나름이다. 크리티컬한 데이터가 아니고 자주 참조가 된다면 캐시를 사용하는 것이 바람직 할 것이다.

스프링은 캐싱 여부를 메소드 별로 설정할 수 있고 Redis를 사용해 로컬 메모리가 아닌 Redis에 캐싱 데이터를 저장 할 수 있다.

정리

처음엔 Redis의 용도를 캐싱이라는 목적으로만 사용가능 한 줄 알았다. 그렇기 때문에 세션데이터를 Service 로직을 통해 가져오고 이때 Service 함수들은 Cache를 적용하는걸로 착각했다. 하지만 Spring내에서 Session데이터를 Redis에 저장하게 하는 설정이 존재했던 것이다.

profile
개발일기장

0개의 댓글