우아한테크코스/테코톡
Cache
newwisdom
2021. 8. 6. 14:13
반응형
2021-05-31글
[10분 테코톡] 🐻큰곰의 Cache을 들으며 정리한 글입니다.
메모리 계층 구조
- 데이터를 저장하는 공간의 속도와 용량은 반비례
- 빠를수록 가격이 올라간다.
- 용량이 큰 저장장치는 속도가 느림
- 둘 다 잡기엔 비용이 너무 많이 듦
파레토의 법칙
- 원인 중 상위 20%가 전체 결과의 80%를 만든다.
- 많이 쓰는 20%가 80%의 효율을 차지한다.
데이터 지역성의 원리
- 자주 쓰는 데이터는 시간적 혹은 공간적으로 한 곳에 몰려있을 가능성이 높음
- 시간 지역성
- for문에 조건 변수를 선언하면 해당 변수는 for문이 끝나기 전까지 계속 쓰일 확률이 높음
- 공간 지역성
- for문에서 어떤 배열에 접근했을 때 해당 배열이 위치한 메모리 공간의 내용은 for문이 끝나기 전까지 계속 쓰일 확률이 높음
- 순차 지역성이라고 부르기도 함(arr[0], arr[1] 다음에는 arr[3]에 접근할 확률이 높을 것을 따로 분류하기도 함)
- ex) 창고의 모든 종이를 한번에 미리 책상위로 가져오면 효율이 좋다.
Cache
- 나중에 필요할 수 있는 무언가를 저장했다가 신속하게 회수할 수 있는 보관
- 원본 데이터를 빠르게 저장할 수 있는 메모리에 저장한다.
- 낮은 시간 복잡도로 접근 가능한 곳에 주로 저장한다.
- ex) 자바의 HashMap
- 원하는 데이터가 없거나 최신성을 잃은 경우 그때서야 원본 데이터가 있는 곳에 접근해 데이터를 가져온다.
- 최신성을 잃었다는 프로그래머가 정해주는 것
- 원하는 데이터가 있으면 캐시에서 바로 해당 데이처를 제공한다. (Cache Hit)
- 캐시 공간은 작으니 안쓰는 데이터부터 삭제한다.
Example
CPU
- 1초에 최고 수십억번 작동 각능
- 아무리 빠른 주기억장치라도 CPU를 따라가기 어려움
- 그래서 SRAM이라는 특수한 메모리를 CPU에 넣어 캐시 메모리로 사용
하드 디스크, 데이터베이스
- 하드디스크는 주기억장치에 비해 10만배 느림
- 처리 효율을 올리려면 자주 쓰이는 데이터를 캐싱하는 것이 좋다.
- JPA의 영속성 컨텍스트
Youtube
- 미국에 서버가 있으니 Google Global Cache를 두어 인기 동영사는 국내 서버가 처리하도록 함
- 이처럼 세계 각지에 캐시 서버를 두는 것이 CDN
웹 캐시
- 네트워크를 통해 데이터를 가져오는 것은 하드 디스크보다 느릴 때도 많다.
- 웹 브라우저에서는 정적 파일을 하드디스크나 메모리에 캐싱해뒀다가 다음번에 이를 재활용한다.
- 동적 페이지 경우 매번 내용이 바뀌지 않는 경우가 더 많으므로 서버에서 생성한 HTML을 캐싱한다.
- 클라이언트에서 자주 요청하는 내용은 웹 서버로 전달하지 않고 웹 서버 앞단 프록시 서버에서 캐싱해둔 데이터를 바로 제공한다. (프록시 캐시)
브라우저 캐시
- 웹 서버에서 클라이언트에 보내는 HTTP 헤더에 캐시 지시사를 삽입해 브라우저에서 이에 따른 캐싱 정책을 실시한다.
- 캐시 유효시간 (max-age)가 지나도 캐시 데이터가 바뀌지 않은 경우를 확인하기 위해 ETag라는 유효성 검사 토큰을 사용한다.
- 캐싱 정책은 웹페이지 전반적 상황에 따라 각 파일마다 다르게 적용되야 함
- 정적 파일과 동적 부분의 브라우저 캐싱 정책은 달라야함
Redis(Remote Dictionary Server)
- 메모리 기반 NoSQL DBMS의 일종으로 웹 서비스에서 캐싱을 위해 많이 씀
- Dictionary Server는 자바의 HashMap과 유사하다.
- 기본적으로 모든 데이터를 메모리에 저장
- 재부팅 때 메모리가 휘발되지 않게 데이터를 하드디스크에 기록할 수 있음
- DBMS 일종이므로 명시적 삭제하지 않는 한 메모리에서 삭제하지 않음
EHcache
- 자바 표준 캐싱 API 명세인 JSR-107을 따르는 오픈소스 캐시 구현체
- Spring 프레임워크나 Hibernate ORM 등에서 바로 사용 가능
- 캐시 저장 공간을 속도에 따라 여러 등급으로 나누어 메모리 계층 구조 적용 가능
- 하드디스크에 기록 가능
참고자료
반응형