NoTimeForDawdling

DB 데이터 캐싱(Caching) 본문

DB

DB 데이터 캐싱(Caching)

Room_Energy 2021. 3. 11. 19:36

데이터베이스 데이터 캐싱

캐시란 한 번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결과값을 받을 수 있도록 도와주는 공간입니다.

 

데이터베이스 데이터 캐싱은 읽기(Read) 성능을 개선시키기 위해 DB와 같은 영구 저장소로부터 로드된 데이터를 빠르게 읽어올 수 있는 Memory 영역에 저장해두는 방식입니다.

 

Cache를 사용할 때 동일한 요청에 대하여 빠른 응답이 가능하며, 최초 요청에 대한 응답을 전송하는 시점에 서버는 DB에서 읽어온 값을 Cache에 저장해 둡니다.

 

만약, 해당 요청이 다시 한번 들어온다면 서버는 DB가 아닌 Cache에서 동일한 요청 값을 리턴할 수 있을 것이며, DB에서 값을 조회하지 않기 때문에 DB resouce(자원)을 다른 요청에 할당할 수 있게 됩니다.

 

결국 서비스 전체적으로 빠른 속도를 가질 수 있으며, 많은 요청에 대한 처리를 분산함에 따라 서비스 부하를 감소시킬 수 있습니다.

언제 적용하면 좋을까?

  1. 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우(서버의 균일한 API데이터)

  2. 반복적으로 동일한 결과를 돌려주는 경우(이미지나 썸네일 등)

Cache에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있습니다.

 

즉, Cache란 반복적으로 데이터를 불러오는 경우 지속적으로 DBMS 혹은 서버에 요청하는 것이 아니라 Memory에 데이터를 저장하였다가 불러다 쓰는 것을 의미합니다.

 

그렇기 때문에 DB의 부하를 줄이고, 서비스의 개선도 이룰 수 있습니다.

CRUD에 따른 데이터 처리

1. Read 요청시

클라이언트가 웹서버에 요청을 보내면, 웹서버는 데이터를 DB에서 가져오기 전에 Cache에 데이터가 있는지 확인합니다.

 

1-1 Cache에 데이터가 있을시

  1. DB에 데이터를 요청하지 않고 바로 클라이언트에 데이터를 반환합니다. (cache hit)

1-2 Cache 서버에 데이터가 없을시

  1. DB에 해당 데이터를 요청합니다. (cache miss)

  2. DB는 사용자가 원하는 데이터를 반환합니다.

  3. 웹서버는 반환된 데이터를 다음 사용을 위해 캐시에 저장한 후 클라이언트에 반환합니다.

  4. 이후 동일한 요청이 들어오면 cache hit가 발생합니다.

CUD (Create, Update, Delete 요청시)

이 경우는 Read 과정과 조금 다릅니다. 그 이유는 데이터에 변화가 생겼으므로 해당하는 값의 데이터는 캐싱 값이 아닌 현재 실시간 정보를 보내주는 것이 효과적이기 때문입니다.

  • Create : Database에 데이터를 생성

  • Update : Datebase에 데이터를 수정하고, 캐시 서버에도 데이터가 있다면 마찬가지로 수정

  • Delete : Database에 데이터를 삭제하고, 캐시 서버에도 데이터가 있다면 마찬가지로 삭제

CUD 상황에서 중요한 점은 데이터에 중요한 변경사항이 있는 경우 기존의 캐싱 데이터를 삭제 또는 수정하는 과정이 있어야 한다는 점입니다. 그렇지 않으면 잘못된 데이터를 제공할 수 있습니다.

참고

'DB' 카테고리의 다른 글

SQL Injection이란?  (0) 2021.03.24
SQL vs NoSQL  (0) 2021.03.14
ORM(Object Relation Mapping)이란?  (0) 2021.03.10
DB 인덱스(Index)  (0) 2021.03.04
Primary Key vs Unique Key  (0) 2021.02.26