1. Cache란?
캐시는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
- 위키백과 -
위키 백과에 정의 되어 있듯이 컴퓨터 과학에서 임시 저장소를 가르킨다. 우리가 컴퓨터 과학을 처음 배울때 먼저 접하는 캐시는 하드웨어에서 사용하는 Cache이다.
아래 계층으로 내려갈수록 가격은 비싸지고 성능이 하락한다.
하드웨어에서는 CPU - MEMORY - HDD(SDD) 각 계층간의 속도 차이에 따른 병목 구간을 줄이기 위해서 사용된다.
캐시를 일반적으로는 자주 빈번하게 사용될 "확률"이 높은 데이터를 저장하여 사용한다.
캐시에는 자주 사용할 "확률"이 높은 데이터에 대해 재사용하기 위해서라고 설명하였는데 얼마나 자주 사용되는지를 판단하는척도가 바로 "Cache Hit Ratio"이며 이 척도를 높이는 것이 굉장히 중요하다.
2. Cache Server
서버 개발에서 이야기 하는 Cache는 하드웨어에서의 캐시가 아니라 일반적으로는 Cache 서버를 의미한다.
데이터를 저장하는 공간인 Database도 종류에 따라서 어떻게 설계를 하느냐에 따라서 속도가 달라지지만 대부분의 DB는 영구적인 저장을 위해 "디스크" 공간에 저장을 하게 되기 때문에 일반적으로는 성능이 메모리보다 느리다.
(RDBMS 동작 원리에 대해서는 별도로 기술 할 예정)
따라서, Database중에서 메모리 공간에 데이터를 저장하는 인메모리 캐시 디비가 등장하였다.
이번에는 그 중 가장 많이 사용되는 두가지 메모리디비에 대해서 알아보도록 하자.
2-1. Memcahced
Memcached (멤캐시디, 멤캐시트)는 범용 분산 캐시 시스템이다. 외부 데이터 소스(예: 데이터베이스나 API)의 읽기 횟수를 줄이기 위해 데이터와 객체들을 RAM에 캐시 처리함으로써 동적 데이터베이스 드리븐 웹사이트의 속도를 높이기 위해 종종 사용된다.
- 위키백과-
Memcached는 C언어로 만들어진 분산 메모리 캐시 시스템이다.
위키의 정의에서 알 수 있듯이 데이터와 객체들을 RAM에 캐시 처리를 함으로서 성능을 증가시킨다.
속도는 1밀리초 미만의 응답속도를 지원하며 구조가 단순하여 사용하기 편하다. 또한 분산 저장소로도 사용이 가능하다.
Key - Value 형식으로 데이터를 저장하며 데이터 베이스로의 접근을 줄여 속도를 증가시키는 용도로 사용된다.
과거(현재는 잘 모르겠음..), 페이스북(현 Meta)에서 PHP, Memcached, MySQL을 이용하여 개발되었으며 이를 이용하여 소셜그래프를 구현한것으로 유명하다.(현재는 구조가 바뀐것으로 알고 있다.)
https://engineering.fb.com/2013/06/25/core-data/tao-the-power-of-the-graph/
관련한 자세한 자료는 위 자료를 찾아보면 알 수 있다.
더 자세히 설명된 네이버D2 블로그 자료가 있어서 첨부한다.
https://d2.naver.com/helloworld/151047
2-2. Redis
레디스(Redis)는 Remote Dictionary Server의 약자로서[4], "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 2009년 살바토르 산필리포(Salvatore Sanfilippo)가 처음 개발했다. 2015년부터 Redis Labs가 지원하고 있다. 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DBMS이다. BSD 라이선스를 따른다.
- 위키백과 -
Redis도 Memcached와 마찬가지로 인메모리에 데이터를 저장하는 인메모리 캐시 DB이다.
현재 가장 많이 사용되는 인메모리 캐시 디비이며 장점으로는 굉장히 다앙햔 자료구조를 제공한다.
제공하는 자료구조는 다음과 같다.
- String: key-value 값으로 저장
- List : 선형리스트의 구조
- Set : 중복데이터가 없음
- Hash
- Sorted Set : score값으로 정렬 가능 set, ranking 처리 등의 사용
레디스는 굉장히 다양한 자료구조를 제공하여 사용하기에 용이할 뿐만 아니라 영속저장도 지원을 하고 클러스터링 등의 기능을 지원한다.
현재 회사에서 사용하는 Cache는 Redis이기 때문에 Redis에 대해서는 조금 더 자세히 다음 글에서 적어보도록 하겠다.
(시리즈로 좀 장기에 걸쳐서..)
3. Local Cache
하지만 위 글을 읽다보면 의문이 생길 수 있다. 서버 자체에도 메모리가 존재하는데 굳이 다른 디비를 사용할 이유가 있을까?
Local Cache는 분명한 장점과 단점이 있다.
장점
1. Local Memory내에 저장되기 때문에 속도가 빠르다.
2. 외부 통신 상태와 상관없이 사용할 수 있다.
단점
1. Local에서 작동하기 때문에 서버의 자원을 사용하게 된다. 따라서, 서버 성능에 영향을 끼칠 가능성이 있다.
2. Local에만 저장되기 때문에 서버를 여러대를 사용할 시 공유가 힘들다.
이와 대조적으로 위에서 설명한 Cache Server와 같은 저장소를 Global Cache라고 이야기 하며 장단점은 정확히 로컬 캐시와 반대이며 샤딩과 레플리케이션 등의 처리가 가능하며 영구 저장도 가능하다는 장점을 포함하고 있다.
결론
Cache를 적절히 사용하면 성능상의 큰 이득을 볼 수 있으며 Local Cache와 Global Cache의 장단점을 잘 생각해서 사용해보자.
'Computer Science > 데이터베이스' 카테고리의 다른 글
[Redis] Redis의 자료구조 (0) | 2022.10.03 |
---|