[AWS로 시작하는 인프라 구축의 정석] Ch12. 캐시 서버 준비하기

Cherry·2023년 8월 8일
1
post-thumbnail

본 포스트는 AWS로 시작하는 인프라 구축의 정석 책을 활용한 스터디 기록입니다.

👥 캐시 - Cache

캐시란?

Cache란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 의미합니다.
캐시를 사용하면 처리에 시간이 걸리는 결과 데이터를 저장해두고, 다음에 같은 처리를 수행할 때는 저장된 결과 데이터를 사용해 결과를 빠르게 반환할 수 있습니다!!

캐시 시스템

캐시는 다음과 같이 동작합니다.

첫 번째 처리에서는 시간이 걸리는 작업의 처리 결과를 서버가 저장하고 있지 않기 때문에 시간이 걸리는 작업을 호출하고 그 결과 값을 사용자에게 전달해 줍니다.

반면 서버에 처리 결과를 저장한 두 번째 처리부터는 시간이 걸리는 작업을 또 처리할 필요없이 서버에 저장된 결과를 사용자에게 반환해주기만 하면 되기 때문에 더 빠르게 처리할 수 있게 됩니다!!

캐시 사용 주의점

캐시는 무조건 데이터를 빠르게 가져다주는 좋은 시스템이라고 생각할 수 있지만, 그렇게 생각해서 아무런 고려없이 데이터를 캐시에 담아두면 안됩니다.

  • 시간이 걸리는 처리 결과 데이터가 캐시 데이터와 어긋날 가능성
    -> 갱신이 되지 않은 데이터를 받을 수 있음
  • 서버에 캐시 데이터 저장 영역이 필요
    -> 지나치게 많은 데이터를 캐시에 저장하면 서버 자체의 부하가 높아짐

📍 AWS Elastic Cache

AWS에서는 이런 캐시 관련 서비스인 Elastic Cache라는 서비스를 제공합니다.
Elastic Cache는 Redis나 Memcached가 이미 적용된 환경을 제공해주기 때문에 EC2에 직접 설치하여 사용하는 것보다 관리 포인트가 줄어듭니다.

Elastic cache 계층 시스템

Elastic cache는 기본적으로 임의의 키에 대해 캐시된 데이터를 반환하는 간단한 키/값 시스템을 제공하지만 내부적으로는 다루는 데이터 양이나 유형에 따라 성능을 높이는 구성을 제공합니다!

Elastic cache에서는 세 가지 요소가 있습니다.

  • 노드: 최소 단위, 실제 데이터가 저장되는 곳
  • 샤드: 노드를 묶은 노드 그룹, 하나의 프라이머리 노드와 여러 복제 노드로 구성됨
  • 클러스터: 샤드를 묶은 그룹, 여러 샤드로 구성됨

노드

노드는 Elastic cache의 최소 단위로 캐시된 데이터가 실제로 저장되는 영역을 확보하고 있습니다. (노드별로 캐시 엔진, 시스템, 용량 등을 설정할 수 있습니다.)

샤드

샤드는 최소 1개, 최대 6개의 노드로 구성되는 노드의 그룹입니다.
(하나의 프라이머리 노드와 여러 복제 노드로 구성됩니다)

프라이머리 노드는 데이터 갱신과 참조를 수행하며, 복제 노드는 프라이머리 노드에 수행한 업데이트 내용이 복제되어 동일한 상태가 유지하며 데이터 참조가 이루어질 수 있습니다.
데이터 갱신 시에는 모든 복제 노드의 값도 갱신해주어야 하므로 시간이 걸리지만 참조의 경우 노드 숫자만큼 성능이 향상됩니다.

또한 프라이머리 노드에 장애가 발생했을 때에도 복제 노드를 계속 참조할 수 있으므로 내결함성이 향상합니다. (일정 조건을 만족헀을 때 임의의 복제 노드를 프라이머리 노드로 승격시킬 수 있음)

클러스터

클러스터는 여러 샤드의 그룹입니다. 멀티 AZ 기능을 이용하여 여러 가용 영역으로 분산시켜 사용할 수 있으며, 이를 통해 한 가용 영역에서 장애가 발생했을 때 빠르게 다른 가용영역으로 페일 오버를 수행할 수 있습니다.

Redis VS Memcached

기본적으로 캐시 용도로 자주 사용하는 두 가지 오픈소스는 Redis와 Memcached가 있으며, Elastic Cache에서도 이 두가지 엔진을 모두 제공합니다.

공통점

  1. in-memory cache
  2. key-value 저장소
  3. 데이터관리를 위해 NoSQL을 사용
  4. RAM에 데이터를 보관한다

간단히 정리를 하자면 두 가지 모두 인메모리 데이터베이스로 캐시 혹은 세션 저장소 용도로 많이 사용합니다.

차이점

그러나 Redis가 더 많이 사용하는 이유는 무엇일까요?

  1. Redis는 Memcached에 비해 다양한 자료구조를 지원합니다.
  2. 다양한(6가지) 삭제 정책을 지원합니다. (memcached는 LRU이며, 새로운 데이터와 크기가 비슷한 데이터를 임의 제거합니다.)
  3. 디스크 영구 저장 가능
  4. 복제 지원 (Memcached는 써드 파티를 사용하지 않고서는 복제본을 가질 수 없습니다.)
  5. 트랜잭션 지원 (MemCached는 원자적으로 동작하지만, 트랜잭션을 지원하지 않습니다.)

레디스 정리 글

참고
https://velog.velcdn.com/images/chaerim1001/post/a2cf0c3f-eb50-4721-b1b0-d342d5b63e94/image.png
https://mangkyu.tistory.com/69
https://escapefromcoding.tistory.com/704
https://aws.amazon.com/ko/memcached/

profile
호기심 많은 백엔드 개발자입니다 😝

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기