캐싱이란?
- 캐싱(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
'Web' 카테고리의 다른 글
자바 개발자 면접 준비 - 총정리 (0) | 2020.03.12 |
---|---|
maven, gradle 비교 (0) | 2020.03.06 |
Restful API 설계하는 방법 (0) | 2020.03.04 |
SDK, API, 프레임워크, 라이브러리 용어 정리 / 프레임워크 라이브러리 차이 (0) | 2020.03.03 |
HTTP/1.1 HTTP/2.0 차이 (1) | 2020.03.03 |