Kotlin/Spring
(Spring) 어떤 식으로 캐시를 구성하는 것이 좋을까?? 캐시 전략에 대해 알아보자
너어디사니
2024. 7. 12. 19:03
웹 페이지를 개발하기 위해서는 우리는 캐시를 활용해서 성능을 개선해야 할 경우가 있을 것이다
오늘은 그러한 캐시를 어떤 방법으로 활용할 수 있는지 알아보고자 한다
캐시란?? : 휘발성 메모리로 컴퓨터의 전원이 꺼지면 지워지는 특징이 있지만 DB에서 조회하는 것과 다르게 굉장히 빠르게 조회할 수 있다는 특징이 있다
이러한 특징이 있는 캐시는 장단점이 명확하기 때문에 전술적으로 혹은 전략적으로 캐시의 설계전략을 잘 설계해서 가져가는 것이 좋다
캐시 전략은 크게 쓰기 / 읽기 전략이 있다
먼저 읽기 전략은 아래와 같은 전략들이 있다
1. Look Aside 전략
그림에서 볼 수 있듯이 먼저 캐시를 방문 하고 캐시 미스가 날 경우 DB에서 조회 및 캐시에 저장하는 방법이다
장점
- 캐시와 DB가 분리 운영되고 있기 때문에 안정성을 확보 할 수 있다
- 특정 데이터만 캐시에 따로 저장해서 분리 운영하기 용이하다
단점
- 캐시 서버에 부하가 발생해서 다운이 발생할 경우 DB에서 성능 저하가 발생할 수 있다
- 캐시 서버와 DB 서버 간의 데이터 정합성 문제가 발생할 수 있다
2. Read Through 전략
Read through 패턴은 아예 서버가 캐시 서버만 바라보고 요청 / 응답을 하며 DB는 캐시서버에 데이터를 전송해주는 방식이다
- 읽기가 많은 서비스에 적합하다
장점
- 데이터의 정합성을 확보 할 수 있다
단점
- 데이터를 조회하는데 LookAside에 비해서 전체적으로 속도가 느려질 수도 있다
- 캐시 서버가 다운이 될 경우 서비스 운영이 차질이 생길 수 있다
다음 쓰기 전략은 아래와 같은 전략들이 있다
1. Write Back 전략
Write Back 전략은 기본적으로 캐시에 저장할 데이터를 한번에 모아둔 다음에 데이터 베이스에 저장을 하는 구조이다 (마치 JPA의 1차 캐시 느낌이 든다)
장점
- 쓰기 쿼리와 횟수를 줄이고 부하를 방지할 수 있다
- 데이터의 정합성을 보장할 수 있다
단점
- 자주 사용되지 않는 불필요한 리소스가 저장이 될 수 있다
- 캐시 서버가 오류가 발생할 경우 데이터가 없어질 수도 있다
2. Write Through 전략
쓰기 쿼리가 들어왔을 경우 캐시에 모아두지 않고 바로 데이터베이스에 저장하는 방법이다
장점
- 데이터의 일관성을 유지할 수 있다
- 데이터가 유실이 되야 하지 않을 경우에 사용하면 좋다
단점
- 쓰기 쿼리가 2번 발생하기 때문에 성능이 저하
3. Write Around 전략
이 전략은 캐시를 업데이트 하지 않고 바로 데이터 베이스에 업데이트 하는 방법이다
장점
- 데이터베이스에 저장되는 속도는 가장 빠름
단점
- 캐시 서버와 DB 서버 간의 정합성이 떨어짐
이상 전략들이 있다
이상 전략들이 무조건 옳고 그름이 있지는 않고 프로젝트에 맞게끔 설계를 구성하면 될 것 같다