AWS

210219_20_캐싱_01

SW Kang 2021. 2. 19. 11:41

캐싱 (Cache)

    캐시 메모리 영역에 데이터를 저장해놓았다가 필요할 때 해당 데이터에 대한 요청이 있을 때, 기본 스토리지보다 빠르게 접근하여 데이터에 엑세스할 수 있다.

 

무엇을 캐싱해야 하나?

    느리고 비싼 쿼리가 필요한 데이터

    정적이고 자주 엑세스하는 데이터 (소셜 미디어 웹사이트 프로필)

    일정 기간 동안 변화가 없을 수 있는 정보

 

캐싱을 하기 위해 알아야 할 것

    속도 및 비용

    >데이터 획득에 긴 시간과 많은 비용이 많이 드는 쿼리가 캐싱 효율이 높음

    데이터 및 액세스 패턴

    > 소셜 미디어 사이트의 개인 프로필과 같이 비교적 정적이면서도 액세스 빈도가 높은 데이터는 캐싱 효율이 높음

       변화 속도가 빠르거나 액세스가 거의 없는 데이터는 캐싱할 필요가 없음.

 

캐싱의 장점

    어플리케이션의 속도 향상

    시간이 많이 걸리는 DB 쿼리의 부담 완화

    응답 지연 시간 감소

 

※ 캐싱은 읽기 집약적인 어플리케이션에서 보다 효율적인 사용이 가능하다.

   하지만 쓰기 집약적인 어플리케이션에서도 I/O 비율이 1보다 크므로 쓰기 집약적 애플리케이션에서도 읽기 캐싱은 유용하다.

 

아키텍처의 캐싱 유형

    클라이언트 측 - 클라이언트 측 웹 브라우저

    서버 측 - 다양한 웹 캐싱 기법을 활용한 웹 성능 향상

 


 

AWS 에서의 캐싱

    캐시 데이터를 저장하는 위치에 따른 구분 : 엣지 캐싱 / 웹 티어 캐싱 / 데이터베이스 캐싱

 

엣지 캐싱

CDN (Contents Delivery Network : 컨텐츠 전송 네트워크)

    서버와 사용자 사이의 물리적 거리를 줄여 웹 페이지 콘텐츠 로드 지연을 최소화하는, 촘촘히 분산된 서버로 이루어진 플랫폼

 

Amazon CloudFront

    AWS의 CDN 캐싱 서비스

 

Amazon CloudFront 에서의 캐싱

사용자마다 최적의 엣지 로케이션을 찾아서 캐시를 저장하고 컨텐츠를 사용자에게 전송한다.

 

컨텐츠 만료 방법

    오리진에서 컨텐츠가 변경되어도 유저는 캐시에서 데이터를 가져가기 때문에 캐시에 있는 데이터를 만료시키고 최신화해줄 방법이 필요

 

TTL (Time To Live)

    기간 고정 (만료 기간)

    고객이 설정

    CloudFront 에서 오리진으로의 GET 요청에 If-Modified-Since- header 사용

 

객체 이름 변경

    객체의 이름이 변경되면 새로 고침이 수행된

 

객체 무효화

    객체를 무효화시키고 새로운 객체를 업로드

    마지막 수단으로 매우 비효울적이고 비용이 많이 든다.

 

※ 캐싱으로 D-DoS 공격의 방지/ 완화시킬 수 있다.

 


 

웹 티어 캐싱

 

세션 관리

    고정 세션을 통한 캐싱

    

고정 세션

더보기

    모든 웹 서버에 나누어 관리하여야 할 세션 정보를 특정 웹 서버가 관리

    특정 사용자와의 세션만을 관리하는 서버를 사용하여 요청을 라우팅

    사용자는 웹 서버에 세션을 저장하기 때문에 비용적 측면에서 효율적

    네트워크 지연 시간을 줄이고 해당 세션의 검색 속도를 증가시킨다.

    사용자 세션을 관리하는 특정 서버로 요청을 라우팅할 수 있다.

 

원래 모든 웹 서버가 모든 사용자의 세션 정보를 저장하여야 한다

하지만 특정 사용자에 대해 대응하는 웹 서버를 1:1 로 고정시킴으로써

웹 서버는 모든 사용자에 대한 세션 정보를 저장할 때와 다르게 특정한 사용자만을 관리함으로써 

사용자에 대한 세션 정보를 검색할 필요가 없어지고 

웹 서버는 다른 사용자에 대한 세션 정보를 저장할 필요가 없어지고

특정 사용자에 대해 더 빠르게 대응할 수 있다.

        


 

데이터베이스 캐싱

데이터베이스에 접근하는 작업은 매우 시간이 오래 걸리는 작업으로 데이터베이스에 자주 접근을 하면 응답 시간이 매우 길어진다.

앱과 DB 사이에 캐시 서버를 둬서 자주 사용하는 데이터를 캐시 서버에 저장하여 응답시간을 최대한 단축시킨다.

 

데이터베이스 캐싱을 하는 경우

    고객에 대한 응답 시간이 우려되는 경우

    부하가 큰 대용향 요철르오 데이터베이스가 넘치는 것을 알게 되는 경우

    데이터베이스 비용을 줄이고 싶을 경우

 


 

Amazon DynamoDB Accelerator (DAX)

    DynamoDB 를 사용하는 경우

 

Amazon ElasticCache

    전체가 메모리로 구성이 된 데이터 스토어로 느린 디스크 기반인 DB 가 아닌 빠른 메모리 데이터 스토어를 통해 정보를 검색하여 속도 향상

 

 

ElasticCache 의 종류

Memcached 와 Redis


 

레이지 로딩 (Lazy Loading)

    필요할 때만 데이터를 캐시에 로드하는 캐싱 전략

   

 

    1) 어플리케이션에서 캐시 메모리에 데이터를 요청

    2-1) 캐시에 데이터가 있을 경우(캐시 적중), 캐시에 있는 데이터를 불러온 후 사용

    2-2) 캐시에 데이터가 없을 경우(캐시 미스), 어플리케이션에서 DB 에 데이터 요청

    3) DB 에서 데이터를 불러온 이후, 캐시에 데이터 로딩

    

레이지 로딩의 이점

    캐시에 요청된 데이터만 저장이 됨으로 불필요한 데이터가 캐시를 채우는 상황을 방지 가능

    결국 사용자가 많이 사용하는 데이터만 캐시에 저장되고 더 좋은 효율을 보일 수 있다.

 

※ DB 에서 데이터가 변경될 시 캐시 데이터는 업데이트되지 않기 때문에 항상 캐시의 오래된 데이터를 처리할 방법을 생각해야 한다.