https://www.youtube.com/watch?v=tVZ15cCRAyE
목차
- 1. 캐시란
- 2. 캐시사용이유
- 3. 캐시 전략패턴
- 4. 캐시 사용시 주의사항
- 1. 캐시란
- 데이터나 값을 미리 복사해놓은 임시저장소이다.
- 대표적인 예시로 Dynamic Programming 도 캐시를 사용한 것이라 볼 수 있다.
- 이전의 역할을 저장할떄 캐시로 사용한다.
- JPA 의 Persistent Context도 1차 캐시에서 데이터를 가져와서 성능적인 이점을 사용한다.
- 2. 캐시사용이유
- 파레토의 법칙 : 많은 성과에서 80% 의 결과가 20%의 원인에서 나온다.
- 캐시에 자주 사용되는 약 20%의 데이터를 미리 캐시해놓는다면 효과적인 성능향상을 나타내게 할 수 있다.
- 데이터의 지역성
- 공간적 지역성
- 배열에 있다고 가정하자.
- 이 하나의 배열의 한곳에 참조를 하였을떄 와 인접한 주소의 내용이 다시 참조되는 특성이다.
- 시간적 지역성
-
for(int i=0;i<num;i++){ for(int j=0;j<num;j++){ cache[i][j] += 1; } }
- 위의 코드에서 i 변수와 j 변수의 사용되었던 데이터가 빠른 시일 내에 다시 사용될 가능성이 높다.
- 공간적 지역성
- 파레토의 법칙 : 많은 성과에서 80% 의 결과가 20%의 원인에서 나온다.
- 3. 캐시 전략 패턴
- 1. Cache Hit : 캐시에 데이터가 존재
- 2. Cache Miss : 캐시에 데이터가 존재하지않아 DB에서 가져온다.
- 캐시의 읽기전략 ( LookAside 패턴 , Read Through 패턴 )
- LookAside 패턴 : 캐시의 데이터가 없을때 옆(곁) (DB)를 조회하여 읽어오는 전략이다. ( 캐시는 Server와만 소통한다. )
- 장점 : 캐시에 문제가 생기는 경우 DB로 요청을 위임한다
- 단점 : 캐시, DB의 데이터 정합성 유지가 어렵다. 첫 조회 시 DB 과부하가 발생한다.
- Read Through 패턴 : 항상 캐시를 통해서 읽는다. (캐시가 직접 DB에서 데이터를 가져온다.)
- 장점 : 캐시, DB 간의 데이터 정합성 보장. 캐시를 통해서 DB와 소통하기에.
- 단점 : 캐시가 죽으면 애플리케이션에 문제 발생
- LookAside 패턴 : 캐시의 데이터가 없을때 옆(곁) (DB)를 조회하여 읽어오는 전략이다. ( 캐시는 Server와만 소통한다. )
- 캐시의 쓰기전략 ( Write Around 패턴, Write Back 패턴, Write Through 패턴 )
- Write Around 패턴 : 캐시를 우회하여 직접 쓴다.
- 장점 : 성능이 좋음. 빠름, DB에 바로 쓰기 때문에 빠르다. 불필요한 데이터가 캐시에 올리지않는다. 캐시를 거쳐서 쓰지않기에 빠른것이다.
- 단점 : 캐시, DB의 데이터 정합성 유지가 어려움
- Write Back 패턴 : 캐시에 데이터를 미리 한꺼번에 써놓고 나중에 DB에 쓰기 작업을 한다. 이떄 Scheduling을 사용한다.
- 장점 : 쓰기 횟수 비용을 줄일 수 있다. ( 원래 많은 양의 데이터를 쓰게 되면 insert문이 여러개놓아서 성능 오류가 날 수 있는데 Bulk Insert로 성능을 챙길 수 있다. )
- 단점 : 캐시의 데이터 유실 문제 (캐시가 죽을경우 데이터가 유실가능성있다.)
- Write Through 패턴 : 항상 캐시를 거쳐서 쓴다.
- 장점 : 데이터 정합성이 보장된다.
- 단점 : 두번의 쓰기가 항상 진행되기 때문에 성능을 고려해야한다.
- Write Around 패턴 : 캐시를 우회하여 직접 쓴다.
- 캐시 사용시 주의사항
- 1. 자주 사용되면서 변경이 되지 않는 데이터
- 2. 유실되어도 크게 문제가 없는 데이터
- 3. 데이터베이스와 함께 사용할때 데이터 정합성 문제를 고려한다.
'무언가에 대한 리뷰 > 테크영상리뷰' 카테고리의 다른 글
[무언가에 대한 리뷰][테크영상리뷰][10분 테코톡] 무민의 JVM Stack & Heap (0) | 2023.10.11 |
---|---|
[무언가에 대한 리뷰][테크영상리뷰][10분 테코톡] 멍토의 Blocking vs Non-Blocking, Sync vs Async (0) | 2023.10.11 |
[무언가에 대한 리뷰][테크영상리뷰][쉬운코드]DB 인덱스(DB index) !! (0) | 2023.10.09 |
[무언가에 대한 리뷰][테크영상리뷰][10분 테코톡] 라라, 제로의 데이터베이스 인덱스 (0) | 2023.10.07 |
[무언가에 대한 리뷰][우아콘2020] 수십억건에서 QUERYDSL 사용하기 (0) | 2023.10.04 |