본문 바로가기
개발관련

Spring Boot Redis Cache 사용

by 수바니 2024. 8. 8.

개인프로젝트 과제를 하다가 필수기능에 캐시활용하기가 있었다.

강의를 듣다보니 Redis를 이용하였다.

왜 이 둘을 활용할까 ? 궁금증이 들었고, 그에 대한 내용을 포스팅 할 것 이다.

 

캐시(Cache)란?

데이터를 미리 복사해 놓은 임시 저장소를 의미한다.

( = 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소)

저장공간 계층 구조에서 확인 할 수 있듯이, 캐시는 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다.

 

이러한 캐시는 성능향상에 큰 이점이 있는데 바로 DB접근을 줄일 수 있는것이다.

ex) 반복적으로 동일한 결과를 돌려주는 경우 (이미지나 썸네일)

즉, Cache란 반복적으로 데이터를 불러오는 경우에 DBMS혹은 서버에 요청을 반복적으로 하는것이 아니라, Memory에 데이터를 저장하였다가 불러다 쓰는것을 의미한다.

 

redis는 인메모리 DB로 디스크가 아닌 메모리에 데이터를 저장한다.

이러한 redis에 특징을 활용하여 캐시 공간으로써 사용할 수 가있다.

따라서 Springboot와 캐시 그리고 redis를 활용하는것이다.

 

구조설명

사용자의 첫 요청시에는 DB에 접근하여 데이터를 가져온다. 이때, DB에서 가져온 데이터를 redis에 저장한다.

만약 같은 요청이 또 온다면 DB에 접근할 필요없이 redis에서 데이터를 가져간다.

DB에 접근을 하지 않으니 성능향상에 도움을 주는 것이다.

혹은, 처음부터 서버를 구동시 DB로부터 데이터를 미리 redis로 옮겨 놓을 수도 있다.

 

redis 사용

1. 의존성을 추가하고

2. 기본설정파일 (yml)을 설정해야한다.

3. configuration을 설정하여야 한다.

redis와 관련된 부분은 Service 내부에 작성할 필요는 XXX

 

Cache의 사용

1. Cache는 어노테이션을 통한 Cache적용을 한다.

@Cacheable         @CachePut       @CacheEvict

 

 

@Cacheable

캐시에 데이터가 있으면 메서드 로직을 실행하지 않고 캐시로부터 데이터를 조회하여 반환한다. 만약 캐시에 데이터가 없다면 메서드 내부의 로직을 실행하고 캐시에 데이터를 저장한 후 반환한다. 데이터를 조회 시 사용되며 위에서 구현한 방식이다.

 

@CachePut

무조건 메서드 내부의 로직을 실행하고 캐시에 데이터를 저장한 후 반환한다. 데이터를 갱신할 때 사용된다.

 

@CacheEvict

키값에 해당하는 데이터를 삭제한다.