작성
·
142
·
수정됨
1
몇가지 의문점이 생겨서 질문드립니다.
CF - ALB - EC2(API서버) 로 연결이 되어있다고 가정합니다. https://api.example.com/posts/1 로 GET 요청을 하고 해당 Respose 값이 dynamic하게 생성된다면 캐싱기능을 사용할 수 없는 것인가요? 만약 사용한다면 TTL이 끝난 이후 첫 Reqeust에 대한 Response만 해당 TTL동안 반환하나요?
CF - S3 로 연결이 되어있다고 가정합니다. S3의 버킷에 버전 옵션이 설정되어있습니다. 버킷의 오브젝트를 업로드 합니다. 새 오브젝트는 이전 버전의 오브젝트와 같은 KEY를 공유하지만, CF로의 캐싱은 TTL이 끝나기 전까지 이전 버전의 오브젝트를 반환하나요?
CF - S3 로 연결이 되어있다고 가정합니다. 버킷 안의 리소스를 가져오는건 이해가 됩니다. 하지만 EC2(예: EC2의 node.js 환경에서)에서 S3로 업로드하는건 CF를 타지 않고 업로드 할 수 가 있습니까? 버킷을 private 설정으로 해놓고 EC2에 S3 Full Access role을 부여하고, 버킷 policy에 EC2를 Allow, putObject 정도로 설정해놓으면 가능한가요?
답변 1
0
안녕하세요 김동현님,
CloudFront와 ALB(Application Load Balancer)를 통해 EC2에서 호스팅되는 API 서버에 연결되어 있다고 가정할 때, https://api.example.com/posts/1
와 같은 GET 요청에 대한 응답이 동적으로 생성된다 해도 캐싱 기능을 사용할 수 있습니다. 동적 콘텐츠라도, 해당 콘텐츠가 일정 시간 동안 변경되지 않을 것으로 예상된다면 캐싱을 사용할 수 있습니다. 예를 들어, 블로그 글이나 뉴스 기사와 같이 자주 변경되지 않는 콘텐츠의 경우, 짧은 시간 동안 캐싱하여 성능을 개선할 수 있습니다. 캐싱 정책은 HTTP 헤더를 통해 설정할 수 있으며, Cache-Control 헤더를 사용하여 리소스의 캐시 가능 여부, 캐시 지속 시간(TTL, Time-To-Live) 등을 지정할 수 있습니다. TTL이 지정된 캐시는 설정된 시간 동안 유효하며, 이 시간 동안 동일한 요청에 대해서는 캐시된 응답을 반환합니다. TTL이 만료된 후 첫 번째 요청이 들어오면, CloudFront는 원래의 소스(여기서는 EC2에 위치한 API 서버)로부터 새로운 콘텐츠를 가져와 이를 캐시에 저장하고 요청한 클라이언트에게 응답합니다.
CloudFront가 Amazon S3 버킷을 오리진으로 사용하고 해당 버킷에 버전 관리가 활성화되어 있는 경우, CloudFront는 S3 오브젝트에 대한 요청을 처리할 때 특정 버전의 오브젝트를 명시적으로 지정하지 않는 한, S3 버킷에서 가장 최신 버전의 오브젝트를 제공받습니다. 그러나 CloudFront는 설정된 TTL(Time-To-Live) 동안 오브젝트를 캐시하며, 이 기간 동안은 오브젝트의 새로운 버전이 S3 버킷에 업로드되더라도 CloudFront는 여전히 캐시된(즉, 첫 번째 요청 시점에서의) 오브젝트의 버전을 반환합니다.
네, 말씀하신 방법대로 EC2 인스턴스에서 Amazon S3 버킷으로 직접 파일을 업로드하는 것은 가능합니다. EC2 인스턴스에서 S3 버킷으로의 파일 업로드는 보통 AWS SDK나 CLI를 사용하여 직접 S3 API를 호출하고, 이 과정에서는 CloudFront를 거치지 않죠.