본문 바로가기

우아한테크코스/테코톡

Cache

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 등에서 바로 사용 가능
  • 캐시 저장 공간을 속도에 따라 여러 등급으로 나누어 메모리 계층 구조 적용 가능
  • 하드디스크에 기록 가능

참고자료

'우아한테크코스 > 테코톡' 카테고리의 다른 글

Servlet과 Spring  (0) 2021.08.06
CORS  (0) 2021.08.06
MVC 패턴  (0) 2021.08.06
DTO와 VO  (0) 2021.08.06
전략패턴  (0) 2021.08.06