Cache

Coastby·2023년 4월 20일
0

Keyword

목록 보기
8/8
post-custom-banner

Cache

나중에 올 요청의 결과를 미리 저장해두었다가 빠르게 제공해주는 서비스

자주 사용하는 데이터를 미리 보관해둔 임시 장소

📌 Memory

비교적 저장 공간이 적고 전체적인 비용이 비싸다. 대신 빠른 IO를 통해 성능적으로 이점이 있다.

파레토의 법칙

  • 20%의 사용자가 80%의 요청을 한다.
  • 20%의 데이터를 캐시해두면 80%요청을 응답할 수 있다

📌 일반적으로 아래 특징을 가진 데이터를 캐싱하면 좋다.

  • 도중에 변경될 일이 없는 데이터베이스 조회 값
  • 자주 호출되는 데이터

Cache 구조

  1. Look Aside

    일반적으로 많이 쓰는 패턴

    읽기에서 캐싱에 데이터가 있는지 확인 후 없으면 DB에 요청

  2. Write Back

    쓰기에서 캐시에 저장을 먼저한다.

    Insert 쿼리를 500번 날리는 것보다 Insert 쿼리 하나로 500개를 처리하는 것이 훨씬 빠르다. (배치 작업)

    단점 :

    • Cache는 메모리에 저장되어 리부트되면 데이터가 사라질 수 있다.
    • 로그를 DB에 저장할 때 보통 캐시에 넣어놓고 배치작업으로 DB에 저장한다.
    • 극단적으로 무거운 write (백업 등)에 많이 쓰인다.

📌 참고
스프링부트에서 사용하는 캐시는 대부분 JSR-107을 따른다. JSR-107을 따르는 캐시를 사용하면 어떤 구현체 캐시를 사용하는지에 관계없이 추상화를 지원한다.
✅ JSR (Java Specification Requests)
자바 플랫폼에 대한 규격을 제안하거나 기술한 것을 의미한다.
JSR-107은 JCACHE (Java Temporary Caching API)에 관한 내용이다.

📌 로컬 캐시 vs 글로벌 캐시

○ 로컬캐시

  • 로컬 (해당 서버)에서만 사용하는 캐시
  • 외부 서버와 트랜잭션 비용이 들지 않기 때문에 속도가 빠르다
  • 로컬에서만 사용하기 때문에 분산 서버의 구조에서 캐시를 공유하기 어렵다.

○ 글로벌캐시

  • 여러 서버에서 접근할 수 있는 캐시 서버를 구축하여 사용하는 방식
  • 네트워크를 통해 데이터를 가져오는 트랜잭션 비용이 있기 때문에 로컬 캐시에 비해 상대적으로 느리다.
  • 별도의 서버로 운영되기 때문에 서버 간 데이터 공유에 용이하다.
profile
훈이야 화이팅
post-custom-banner

0개의 댓글