Redis 활용하기 - 캐시(Cache)
캐시(Cache) 란?
Cache란 한 번 조회된 데이터를 미리 특정 공간에 저장해놓고, 똑같은 요청이 발생하게 되면 서버에게 다시 요청하지 말고 저장해놓은 데이터를 제공해서 빠르게 서비스를 제공해주는 것을 의미한다.
즉, 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참조하지 않고 Cache를 접근하여 요청을 처리하는 기법이다.
서비스를 처음 운영할 때는 WEB-WAS-DB 정도로 작게 인프라를 구축하는데, 사용자가 늘어나면 DB에 무리가 가기 시작한다.
DB는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생해도 데ㅣ터가 손실되지는 않지만, 매 트랜잭션마다 디스크에 접근해야하므로 부하가 많아지면 성능이 떨어진다.
그래서 사용자가 늘어나면 DB를 스케일 인 또는 스케일 아웃하는 방식 외에도 캐시 서버를 검토하게 된다.
Redis Cache는 메모리 단 (In-Memory)에 위치한다. 따라서 용량은 적지만 접근 속도가 빠르다.
다만 저장하려는 데이터 셋이 주어진 메모리 크기보다 크면 디스크를 쓰는 것이 올바른 선택이다.
캐시의 구조 패턴
Look aside Cache 패턴
캐시를 사용하는 패턴은 첫 번째로 Look aside Cache 패턴이다.
위에서 말한 일반적인 캐시 정의를 그대로 구현한 구조이다.
look aside cache는 캐시를 한 번 접근하여 데이터가 있는지 판단한 후, 있다면 캐시의 데이터를 사용하고 없으면 실제 DB 또는 API를 호출한다.
[Look aside Cache 쿼리 순서]
- 클라이언트에서 데이터 요청
- 서버에서 캐시에 데이터 존재 유무 확인
- 데이터가 있다면 캐시의 데이터 사용 (빠른 조회)
- 데이터가 없다면 실제 DB 데이터에 접근
- 그리고 DB에서 가져온 데이터를 캐시에 저장하고 클라이언트에 반환
Write Back 패턴
write back은 주로 쓰기 작업이 굉장히 많아서, INSERT 쿼리를 일일이 날리지 않고 한꺼번에 배치 처리를 하기 위해 사용한다.
예를 들어 영어 듣기 평가를 온라인으로 진행하는 서비스가 있을 때, 여러 학생이 동시에 제출 버튼을 누르면서 DB에 갑작스럽게 엄청난 쓰기 요청이 몰리게 되면 DB 서버가 죽을 수도 있다.
이 때 Write back 기반의 캐시를 사용하면 캐시 메모리에 데이터를 저장해 놓고, 이후 DB 디스크에 업데이트 해 주면 안전하게 쓰기 작업을 이행할 수 있는 것이다.
즉 ,insert를 1개씩 500번 수행하는 것보다 500개를 한 번에 삽입하는 동작이 훨씬 빠르기 때문에 write back 방식은 빠른 속도로 서비스가 가능하다.
하지만 단점도 있다.
DB에서 디스크를 접근하는 횟수가 줄어들기 때문에 성능 향상을 기대할 수 있지만, DB에 데이터를 저장하기 전에 캐시 서버가 죽으면 데이터가 유실된다는 문제점이 있다.
그래서 다시 재생 가능한 데이터나 극단적으로 heavy 한 데이터에서 write back 방식을 많이 사용한다.
예를 들면 로그를 캐시에 저장하고 특정 시점에 DB에 한 번에 저장하는 경우가 있다.
[write back 쿼리 순서]
- 우선 모든 데이터를 캐시에 모두 저장
- 캐시의 데이터를 일정 주기마다 DB에 한꺼번에 저장 (배치)
- 그리고 DB에 저장했으니 잔존 데이터를 캐시에서 제거
'Study > DB' 카테고리의 다른 글
[DBMS] Redis(레디스)란? - 6 (0) | 2023.01.22 |
---|---|
[DBMS] Redis(레디스)란? - 5 (0) | 2023.01.21 |
[DBMS] Redis(레디스)란? - 4 (0) | 2023.01.19 |
[DBMS] Redis(레디스)란? - 3 (0) | 2023.01.19 |
[DBMS] Redis(레디스)란? (0) | 2023.01.17 |