Cache의 활용

📌 OS 및 하드웨어에서 제공되는 캐시

캐시를 사용하면 성능을 크게 높일 수 있다. 그러나 무분별하게 쓴다고 해서 성능이 무조건 좋아지는 것은 아니다. 캐시는 시스템 상으로 분류하면 아래와 같다. OS 및 하드웨어에서 제공되는 캐시이다.
CPU L1 Cache
CPU L2 Cache
Dist Cache

📌 서비스 개발자가 바라보는 캐시

보통 서비스를 개발하는 사람들의 기준으로는 위와 같은 캐시보다 주로 아래와 같은 캐시를 말한다.

로컬 캐시

하나의 장비나 JVM 내에서 캐시 내용이 공유된다.
같은 장비에서 가져오므로 성능이 좋다는 장점이 있다.
하나의 장비 내에 있는 데이터만 동기화가 이루어지는 단점이 있다.

글로벌 캐시

다른 장비에 있는 캐시 내용을 공유한다.
데이터 동기화가 실시간으로 이루어지기 때문에 모든 사용자가 동일한 데이터를 가질 수 있다는 장점이 있다.
성능이 로컬 캐시에 비해 좋지 않다는 단점이 있다.

잘 알려진 캐시 종류

EHCache(Key - Value)
Memcached(Key - Value) : 기본으로 단독 서버에서 데이터를 제공하고, 메모리에 저장한다.
데이터가 지워지는 수명을 지정할 수 있다.
Redis(Key - Value)
MongoDB(Key - Value 및 JSON 기반)
HBase(Tabular 테입블 기반)

📌 캐시 선택하기

NoSQL 기반의 캐시를 사용할 때는 BMT(Benchmark Test)를 통해 현재 상황에 맞는 캐시를 선택해야 한다. 캐시는 자주 사용하는 필요한 대부분의 내용을 메모리에만 담는 경우도 있고, 메모리와 디스크와 같은 물리 저장소에 같이 저장하는 경우도 있다. 그러나 디스크의 경우 매우 느려지기 때문에 서버의 성능을 높일려고 했다가 오히려 성능 저하가 발생할 수 있다. 그래서 많은 데이터를 저장하려면 여러 서버에 분산하여 데이터를 저장하는 방식을 취한다. (캐시를 만든 사람이 제공하는 수치는 믿지 말자. 오픈 소스이기 때문에 문제에 대한 책임은 사용하는 사람에게 있다)
날아가도 상관 없는 데이터를 처리할 때 사용하자. 그리고 매우 자주 사용되면서 캐시에 없으면 DB에서 가져오면 되는 것들에 적용하면 큰 효과가 생길 수 있다.
1분에 몇 번 로그인하는지 확인하려고 할 때
최근 쓴 글이 어떤 글인지 확인할 때
CPU 사용량등과 같이 수집되는 데이터가 10만개 중 한두개 없어져도 전혀 문제가 없을 때
캐시를 선택했으면 캐시에서 제공하는 클라이언트 API가 있는지 확인해보자. '(캐시 이름) client'를 검색하면 언어별로 잘 정리되어 있는 문서를 확인할 수 있다.
TOP