Infra/CDN

CloudFront 안전하게 변경하기 #1, (CacheBehavior)

eagle25 2024. 2. 25. 17:14

개요

이 글에서는 Cache Behavior를 사용해 CF에 새로 추가한 버킷에서 파일을 읽을 수 있는지 검증하는 방법에 대해 소개한다.
 
이전 글에서는 CloudFront의 S3를 교체하게 된 배경과, 어떤 작업 과정을 거쳐 버킷을 안전하게 변경할 것인지 소개했다. 자세한 내용은 이 글을 참조하자.
 

CacheBehavior

이번 1편에서 다룰 핵심 기술이다. 소개에 앞서, 이 기술을 소개하는 AWS 문서의 핵심 내용을 인용해보았다.

CacheBehavior is a complex type that describes how CloudFront processes requests. Each cache behavior specifies the one origin from which you want CloudFront to get objects.

 
간략하게 요약해 보자면, Cache Behavior는 CloudFront가 각 요청별로 리소스를 어떤 origin에서 가져올지를 설정하는 기능인 것이라 할 수 있다. 물론 이름이 Cache Behavior만큼 캐싱과 관련된 기능도 있지만, 이번 편의 핵심은 요청별로 origin을 다르게 사용하는, 즉 routing과 관련되어 있기 때문에 해당 내용은 생략한다.
 


작업 목표

이번편의 목표는 CloudFont가 새로운 버킷에서 파일을 읽을 수 있는 상태인지 검증하는 것이다.
 
아래처럼 버킷을 바로 변경해버릴 경우, CF의 서빙에 문제가 발생될 수 있다. 이는 전체 장애로 이어지게 된다. 따라서, 새로운 버킷에서 파일을 잘 읽을 수 있는지 확인해야 한다.

 

작업 과정

선행 작업

1. CloudFront의 origin에 새로운 버킷을 추가한다.  AWS 문서에 따르면, 단순히 버킷만 추가하는것은 기존 동작에 영향을 주지 않는다고 한다.

If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used.

 
 
2. Legacy 버킷에 있는 파일 중, 서빙이 되지 않아도 문제 없는 파일을 1개 선택하고 새로운 버킷으로 복사한다. 필자는 예시로 /image.png(아무런 의미도 없는 파일) 를 사용했다
 

Cache Beavior 추가

앞서 Cache Behavior는 CloudFront가 각 요청별로 리소스를 어떤 origin에서 가져올지를 설정하는 기능이라고 소개했다.
 
이제, 추가된 버킷에서 CF가 파일을 읽을 수 있도록 behavior를 추가해야 한다.
 
유의사항
Cache Behavior를 추가할 때, 경로 설정에 유의해야 한다. 아직 새로운 버킷을 사용해도 문제 없는지 확실하지 않은 상태이다. 따라서 파일 한 개에 대해서만 새로운 버킷을 사용하도록 해야 점진적 변경이 가능하다. 이 파일은 읽기를 실패해도 문제 없는 만만만한 파일을 사용하면 된다. (예, 위에서 언급한 /image.png)
 
Behavior 추가하기
CloudFront Behavior는 기본적으로 아래처럼 설정되어 있다.

 
Create Behavior를 눌러 Behavior를 생성한다. 이 Behavior는 /image.png 요청은 새로운 버킷에서 가저오도록 설정하는 역할을 한다. Cache나 기타 설정은 본인 필요에 따라 자유롭게 설정하자.

 
Behavior 생성을 완료하면 /image.png의 priority가 0인것을 확인할 수 있다. 즉 우선순위가 제일 높다는 것이다.

 


작업 결과 

Cache Behavior까지 설정이 완료되었다면, 이제 CloudFront는 어떻게 동작하는지 다이어그램을 통해 설명해보겠다.
 
아래 다이어그램에서 CF는 New, Legacy 총 두 개의 S3 origin을 가진다. Cache Behavior의 경우, /image.png는 new 버킷에서, 그 외 파일은 legacy 버킷에서 파일을 읽도록 셋팅되어 있다.
 
 /image.png 패턴의 우선순위가 가장 높고, 해당 요청은 new 버킷에서 파일을 읽는다.
 

 
/image.png 외 다른 요청은 * 패턴과 매칭되기 때문에 Legacy 버킷에서 파일을 읽는다.
 

검증

새로운 버킷에서 파일을 읽는것이 문제 없는지 검증해 보겠다. 먼저 CF에서 /iamge.png 파일 읽기에 문제가 없다면, Legacy 버킷에서 /image.png를 지워본다. 파일을 지운 이후에도, /image.png 파일 읽기에 성공한다면 New 버킷에서 파일을 읽을 수 있는 상태가 된 것이다.


마무리

이번 편에서는 Cloud Front의 Cache Behavior가 어떤 역할을 하는지 살펴 보았다. 이를 응용해 새로 추가된 s3에서 CF가 파일을 잘 읽어올 수 있는지 검증까지 진행했다. 
 
다음 편에서는 새로운 버킷에서 전체 요청을 처리도록 하기 전, 기존 버킷에 있던 파일이 새로운 파일에 모두 있었는지 검증하도록 하겠다.