'Redis는 뭔가요?' 라는 질문에 현재 진행중인 프로젝트에서 Redis의 사용방법을 찾아봤다. 프로젝트 코드상에서 확인하면 Cache 레포지토리로 사용한다.
근데 왜 Cache 데이터 저장 용도로 Redis를 사용하는 것일까?
다른 NoSQL이 있는데 굳이 Redis를 쓰는 이유가 멀까?
그렇게 Redis의 특징을 찾아보고 왜 쓰는지 그리고 그 활용방법에 대해 찾아 보았다.
Redis는 NoSQL이다. NoSQL의 종류는 key-value, Column famliy store, DocumentDB, Graph DB등이 있다.
그중 Redis(REMote Dictionary Server) Dictionary 특징인 key-value로 데이터를 저장한다. 때문에 하나의 키에 데이터를 저장한다.
특징은 아래와 같다.
Redis를 활용방법을 정리하는데 혼란이 왔다. Cache 레포지토리로 사용하는가 Session 레포지토리로 사용하는 것인가 .. 찾아 보니 두 방법 모두 사용 가능하였다.
세션은 클라이언트의 정보를 서버 측에 저장한다. 하지만 이런 세션을 클러스터링 하면 좋은점이 뭘까? 아니 왜 클러스터링을 하게 되었을까?
사용자가 많아지면 서버의 부하가 늘어나고 그에 따라 서버를 증설한다. 뿐만아니라 여러 서비스를 각각의 서버로 분리하여 운영하기에 여러 서버를 통해 서비스를 제공한다. 그렇기에 세션을 서버인스턴스에 저장하게 될 경우 여러 서버에 로그인을 해야 한다. 이런 문제점을 해결 하고자 Session Clustering이 나왔다.
Spring에선 Spring-Data-Redis라이브러리를 사용하여 세션 저장소를 Redis서버로 지정할 수 있다.
캐시는 한번 가져온 데이터를 임시로 저장하고 이를 메모리에 저장해두어 다음 데이터 사용시에 효율적인 트래픽 처리를 위해 사용된다. 어떤 데이터를 캐시로 처리 할 것인가는 개발자가 선택하기 나름이다. 크리티컬한 데이터가 아니고 자주 참조가 된다면 캐시를 사용하는 것이 바람직 할 것이다.
스프링은 캐싱 여부를 메소드 별로 설정할 수 있고 Redis를 사용해 로컬 메모리가 아닌 Redis에 캐싱 데이터를 저장 할 수 있다.
처음엔 Redis의 용도를 캐싱이라는 목적으로만 사용가능 한 줄 알았다. 그렇기 때문에 세션데이터를 Service 로직을 통해 가져오고 이때 Service 함수들은 Cache를 적용하는걸로 착각했다. 하지만 Spring내에서 Session데이터를 Redis에 저장하게 하는 설정이 존재했던 것이다.