ENCORE CLOUD ARCHITECTURE TIL 2/19 AWS 캐싱

신민창·2021년 2월 19일
0

TIL

목록 보기
13/46

캐시

캐시 : 메모리에 데이터를 저장하여 흔히 액세스하는 애플리케이션 데이터에 대해 높은 처리량, 지연 시간이 짧은 액세스를 제공합니다. 캐싱은 애플리케이션의 속도를 높일 수 있으며 응답 지연 시간을 줄입니다. 시간 소모적인 데이터베이스 쿼리와 복잡한 쿼리는 애플리케이션에 병목 현상을 일으키는 경우가 많습니다. 읽기 집약적인 애플리케이션에서 캐싱은 애플리케이션 처리 시간과 데이터베이스 액세스 시간을 줄임으로써 유의미한 수준의 성능 향상을 제공합니다.
쓰기 집약적인 애플리케이션보다 읽기 캐싱의 효과가 뛰어남니다.

데이터베이스에서 데이터를 획득하는 것은 캐시에 비해 언제나 더 많은 시간과 비용이 듭니다. 일부 데이터베이스 쿼리는 본래부터 다른 데이터베이스 쿼리에 비해 더 많은 시간과 비용이 소모됩니다.

데이터 캐싱을 고려해야 할 경우

- 캐시 검색에 비해 데이터 획득에 더 많은 시간과 비용이 드는 경우
- 충분한 빈도로 데이터에 액세스하는 경우
- 데이터가 비교적 정적인 경우 또는 신속한 변화와 기한 경과가 큰 문제에 속하지 않는 경우

캐시해야 할 리스트

- 수집하려면 느리고 비싼 쿼리가 필요한 데이터
- 비교적 정적이고 자주 액세스하는 데이터
- 공개 거래되는 주식 가격처럼, 일정 기간 동안 변화가 없을 수 있는 정보

캐싱의 이점

- 애플리케이션 속도 향상
- 시간이 많이 걸리는 DB쿼리의 부담 완화
- 응답 지연 시간 감소

아키텍처 측면에서의 필요성 : 동일한 요청으로 인프라 용량이 지속적으로 과부화될 경우 이는 비효율적으로 비용 및 지연 시간을 늘립니다.

아키텍처의 캐싱 유형

- 클라이언트 측 : 클라이언트 측 웹 브라우저
- 서버 측 : 서버 측에서는 다양한 웹 캐싱 기법을 활용해 웹 사이트 성능을 향상시킬 수 있음

콘텐츠 만료 방법

- Time To Live(TTL) : 기간 고정, 고객이 설정, CloudFront에서 오리진으로의 GET 요청에 If-Modified-Since header를 사용
- 객체 이름 변겅 : Header-v1.jgp를 Header-v2.jpg로 변경, 새 이름이 생기면 새로 고침이 수행됨
- 객체 무효화 : 마지막 수단, 매우 비효율적이고 비용이 많이 듦

웹 티어 캐싱

세션 관리 : 인증 및 액세스 제어를 의미
고정세션을 사용하면 사용자의 세션을 관리하는 특정 서버로 요청을 라우팅 할 수 있습니다. 사용자는 애플리케이션을 실행하는 웹 서버에 세션을 저장하기 때문에 고정 세션을 비용 효율적입니다. 하지만 장애가 발생할 경우 하나의 노드에 저장된 여러 세션이 손실될 가능성이 있습니다.

데이터베이스 캐싱

데이터베이스 캐싱 사용 시기

- 고객에 대한 응답 시간이 우려되는 경우
- 부하가 큰 대용량 요청으로 데이터베이스가 넘치는 것을 알게 되는 경우
- 데이터베이스 비용을 줄이고 싶을 때

Amazon DynamoDB Accelerator가 데이터베이스 캐싱에서 효율적

탁월한 성능 : DynamoDB는 10ms 미만의 일관된 지연 시간 제공, DynamoDB plus DAX는 읽기 중심의 워크로드에 대한 초당 수백만 건의 요청에서 마이크로초 단위의 응답 시간을 제공합니다.

뛰어난 확장성 : DAX는 온디맨드 조정 기능이 있습니다. 3노드로 시작하여 최대 10노드의 클러스터까지 필요에 따라 용량을 늘릴 수 있습니다.

https://aws.amazon.com/ko/blogs/database/amazon-dynamodb-accelerator-dax-a-read-throughwrite-through-cache-for-dynamodb/


Amazon ElastiCache는 클라우드에서 인 메모리 캐시를 배포, 운영 조정하는 데 사용되는 웹 서비스이다. 메모리 데이터 스토어에서 정보를 검색할 수 있는 기능을 지원함으로써 웹 애플리케이션의 성능을 향상시킵니다.

실습 : Amazon S3 정적 웹 사이트 구성하기

S3 - 버킷 만들기


폴더 이름을 CloudFront_test로 하고 생성 후 이미지 파일 1개 업로드
(모두 퍼블릭 허용)


올린 링크에 사진이 있는지 확인

CloudFront 웹 배포 생성 후 S3와 연결하기

AWS 서비스에서 CloudFront로 이동 후 Create Distribution 클릭 후 Get Started 클릭



후 하단의 Create Distribution 클릭


Status 값이 In progress 인 것을 볼 수 있다.

시간이 지나면 Status 값이 Deployed로 표시된 것을 확인하고 CloudFront의 접속 도메인을 확인 후 복사합니다.

그 후 HTML 코드를 본인 도메인 주소, 파일 이름에 맞춰서 작성합니다.

<html>
    <head>My CloudFront Test</head>
    <body>
        <p>My text content goese here.</p>
        <p><img src="http://d33zuu30rlavku.cloudfront.net/CloudFront_test/grand-canyon-1245911.jpg" alt="my test image"></p>
    </body>
</html>

해당 INDEX.HTML을 생성한 버킷에 업로드 한다 (퍼블릭 읽기 허용)

업로드 후 CloudFront에 등록된 DNS에 /index.html을 추가하여 정상적으로 웹페이지가 출력되는지 확인
http://minchang20210219.s3.ap-northeast-2.amazonaws.com/index.html

캐시 무효화 기능을 통한 콘텐츠 업데이트
s3에 업로드되었던 html을 다음과 같이 변경한다.

<html>
    <head>My CloudFront Test</head>
    <body>
        <p>My text content goese here.</p>
        <p>I Love AWS</p>
        <p><img src="http://d33zuu30rlavku.cloudfront.net/CloudFront_test/grand-canyon-1245911.jpg" alt="my test image"></p>
    </body>
</html>

삭제 후 재업로드 한다.


S3 속성에서 업데이트된 내용이 반영된 웹 페이지가 정상적으로 로딩됨을 확인한다.

http://d33zuu30rlavku.cloudfront.net/index.html으로 주소를 입력하면 이전 페이지 캐시 때문에 i love aws 부분이 적용되지 않아야 하는데 잘 된다. 이유는 잘 모르겠다.

0개의 댓글