캐싱이란?

  • 캐싱(Caching)은 애플리케이션의 처리 속도를 높여준다. 이미 가져온 데이터나 계산된 결과값의 복사본을 저장함으로써 처리 속도를 향상시키며, 이를 통해 향후 요청을 더 빠르게 처리할 수 있다. 대부분의 프로그램이 동일한 데이터나 명령어에 반복해서 엑세스하기 때문에 캐싱은 효율적인 아키텍처 패턴이다.

캐시를 적용하기에 적합한 데이터

  • 반복적이고 동일한 결과가 나오는 기능의 반환값
  • 업데이트가 자주 발생하지 않는 데이터
  • 자주 조회되는 데이터
  • 입력값과 출력값이 일정한 데이터
  • 캐싱된 데이터는 데이터 갱신으로 인해 DB와 불일치가 발생할 수 있다. 그렇기 때문에 데이터 Update가 잦게 일어나거나 데이터 불일치시 비즈니스 로직 상 문제가 발생할 수 있는 기능은 캐싱 대상으로 적합하지 않다.

Local Cache vs Global Cache

  • Local Cache

    • 서버마다 캐시를 따로 저장한다.
    • 다른 서버의 캐시를 참조하기 어렵다.
    • 서버 내에서 작동하기 때문에 속도가 빠르다.
    • 로컬 서버 장비의 Resource를 이용한다. (Memory, Disk)
    • 캐시에 저장된 데이터가 변경되는 경우:
      • 해당 서버를 제외한 모든 peer에 변경 사항 전달
      • All-to-All Replication
      • WAS 인스턴스가 늘어나고, 캐시 저장 데이터 크기가 커지면 성능이 저하되는 이유는 이 때문
  • Global Cache

    • 여러 서버에서 캐시 서버에 접근하여 참조 할 수 있다.
    • 별도의 캐시 서버를 이용하기 때문에 서버 간 데이터 공유가 쉽다.
    • 네트워크 트래픽을 사용해야 해서 로컬 캐시보다는 느리다.
    • 데이터를 분산하여 저장 할 수 있다.
      • Replication: 두 개의 이상의 DBMS 시스템을 Mater / Slave 로 나눠서 동일한 데이터를 저장하는 방식
      • Sharding: 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법
    • 캐시에 저장된 데이터가 변경되는 경우:
      • 추가적인 작업 필요없음
      • 서비스 확장으로 WAS 인스턴스가 늘어나고, Cache 데이터 크기가 커질 수록 효과적인 이유

참고
https://deveric.tistory.com/71
https://ojava.tistory.com/70
https://hahahoho5915.tistory.com/33

+ 따끈한 최근 게시물