- 어느 날, CND에 관한 공부를 하던 도중 선배님께서 저에게 흥미로운 질문을 던지셨습니다. 그 질문에 대한 답변을 찾아 냈으며, 여러분과 함께 이 주제를 공유하고자 글을 작성하게 되었습니다 🙂
- 고객이 파일을 업로드 했는데 cloudfront 적용 후 계속 이전 파일이 다운로드 된다고 한다. 이때 어떻게 해결할 것인가?
- cloudfront의 기본 대역폭은 150Gbps, 초당 요청 수가 25만 등 제한이 있다. 사용 중 정상적인 서비스 운영이 되지않아 확인 시 리퀘스트 요청 수가 25만 이상이 필요한 것이 확인됐다. 이때 어떻게 해결할 것인가?
- S3한국 리전의 이미지 파일을 cloudfront를 사용하여 미국에서 해당 정적이미지 파일을 빠르게 다운로드 할 수 있게되었다. 이 과정이나 원리를 자세히 설명
- cloudfront 적용 후에도 최종 클라이언트로부터 느리다는 답변을 받았다. 이때 어떻게 해결해줄 것인가?
(저에게 흥미로운 질문을 던져주신 존경하는 선배님의 블로그 입니다: https://manvscloud.com/?cat=118)
(1) 먼저 초기 이미지 확인 시 이미지 이름은 ttt10.png 입니다
하지만 해당 이미지가 마음에 들지 않아 다른 이미지로 변경을 하였고 이름은 같은 이름을 사용 하였습니다.
하지만 기존 CND에서 캐시를 가지고 있기 때문에 이전 이미지가 발생을 하였습니다
이런 경우 방법은 두 가지 입니다
첫번째는 캐시 무효화를 통하여 캐시를 초기화 하는 것입니다
ㄴ> 하지만 이방법은 일정 횟수가 넘어가면 과금이 발생함으로 다른 방법을 모색하는 것이 좋습니다.
먼저 첫번째 방법은 아래와 같이 캐시 무효화를 해주는 것입니다.
아래처럼 캐시 무효화 경로를 지정하고 무효화를 해주면 해당 캐시가 초기화가 되어 정상적으로 이미지가 출력이 됩니다.
두번째 방법은 TTL을 조절 하는 방식 입니다.
정책 생성을 눌러 주며, 아래의 캐시 키 및 원본 요청에서
Legacy cache settings 선택 후 Customize을 선택 하여 원하는 TTL을 정해주고 저장을 해줍니다.
그후 이미지를 다른 이미지를 변경후 15초가 지나면 해당 이미지가 변경 된것을 알수가 있습니다.
(2) aws 공식문서를 보면 더 높은 할당량을 원할 경우 “더 높은 할당량 요청” 을 통하여 가능 합니다.
위 의 이미지에서 하어퍼 링크를 클릭을 하면 아래 이미지 처럼 자동으로 서포트로 이동을 하게되며 Service Limit Increase 타입의 티켓을 열어 할당량을 높여줍니다.
3.
*CDN 정의: 전 세계에 전력적으로 배치된 대규모 서버 네트워크를 이용하여 지리적으로 가장 가까운 Edge로부터 Cnotents 를 전송
→ 필요 이유: 거리가 멀수록 혹은 테이터가 많을수록 트래픽은 전송 지연이 발생한다 → 서비스에 문제가 발생
*클라우드 프론트를 사용하면 아마존 쉴드 스텐다드가 기본으로 제공 됩니다.
사용자들이 캐시서버에 요청 → 처음 요청한 부분은 캐시 서버에 없기 때문에 캐시미스가 발생 → 캐시 서버에서는 원본 컨텐츠를 받아와서 저장을 합나다 → 저장한것을 다시 사용자한테 컨텐츠를 제공하여줍니다. → 두번째 사용자가 첫번째 사용자하고 동일한 컨텐츠를 요구 → 캐시서버에는 동일한 컨텐츠가 있기 때문에 캐시 히트가 발생 [원본(오리진) 까지 안가고 빠르게 컨텐츠 제공함]
정적 콘탠츠일 경우
ㄴ> 캐시를 이용함으로써 빠르고 안전하게 사용자한테 컨텐츠를 전달해 줄수 있음
동적 컨텐츠
ㄴ TTL 값을 0으로 함으로써 그때 마다 최신 컨텐츠를 전송 한다 ⇒ TTL 을 0 으로 함으로써 계속계속 최신 컨텐츠는 제공이 가능하지만 오리진에 직접 연결할때 와 동적 컨텐츠는 큰 속도로 차이가 없다
위와 같은 문제를 해결하기 위하여 전송 성능 향상을 이용한다. (Dynamic Contents)
- →이해를 하기위해서는 전체 응답 시간이 뭔지 알필요가 있습니다.
- 요청자가 Request를 합니다. → DNS 룩업이 일어나면서 TCP 3 핸드쉐이크 발생하면서 서버와 연결 → ttfb라는 최초 응답이 발생 → 컨텐츠 다운로드
위의 구간을 살펴보면
→ 요청자와 엣지간의 최적의 연결
→ 오리진과의 지속적인 열결 유지를 통하여 서버 연결에 드는 시간을 감소시킴
ㄴ> 일반적인 경우 TCP 3웨이 세이크를 통하여 연결 하는대 개당 100ms 할경우 => 400ms 든다
반면 클라우트 프론트 일 경우
ㄴ 첫번째 사용자는 동일하다 클라우드 프론트와 웹서버 간에도 통신이 이루어 집니다.
두번째 사용자가 클라우드 프론트와 연결할때는 동일한 방식을 사용합니다. 단, 클라우드 프론트와 웹서버의 연결은 Keep Alive Connection을 통하여 이미 첫번째 사용자 일때 연결이 된 상태이기때문에 3웨이 핸트세이크는 생략이 되고 바로 컨텐츠를 요청합니다.
ㄴ> 즉 시간이 단축 됩니다
→ 앳지와 리전과의 지속적인 모니터링을 통하여 최적화된 네트워크 제공
→ 데이터 전송시 Gzip 압축을 통하여 데이터의 사이즈를 줄어셔서 전송함으로써 전송 성능을 향상시킴
ㄴ모든 타입은 아니고 aws 에서 제공하는 list만 가능하다 (참고에 있습니다)
4.
첫번쩨: AWS Support에 문의를 합니다
두번째: 요청자와 지리적으로 더 가까운 오리진 서버를 설정해주고 Route53 에서 지연 시간 기반 라우팅에 다른 리전을 추가하여 줍니다.(가장 지연 시간이 적은 리소스로 Route53에서 DNS 쿼리에 응답 처리 합니다)
세번째: 만약 동적으로 클라우드 프론트를 사용한 경우 Gzip List에 속해져있는지 확인 후 고객사에 알려줍니다.
네번째: Cache-Control 헤더를 사용하는 경우 AWS 콘솔에서 설정한 부분과 일치 하는지 확인을 아여 줍니다 (ex) php에서 함수로 캐시를 설정할수 있는 함수가 있습니다.)
다섯번째: 객체 무효화를 너무 자주 사용하는지 확인 합니다
여섯번째: S3 전송 가속화를 사용 합니다.
일곱번째: 람다엣지를 사용하여 HTTP 호풀에 대한 맞춤형 컨텐츠를 빠르게 제공,
Amazon CloudFront Functions 을 통하여 람다 엣지의 1/6 비용으로 자바 스크립트를 통하여 캐실 및 헤더 조작을 권고드립니다.
참고 URL:
[AWS 심화 강좌]Amazon CloudFront (1)
진화하는 CloudFront 의 이해와 글로벌 서비스 활용 – 안수일 시니어 솔루션즈 아키텍트(GS NEOTEK)
TTFB(Time to First Byte)란 무엇인가?
TTFB 속도(time to first byte speed) – Economics|IT
CloudFront 배포 ‘-Cache:Miss from CloudFront’ 응답 문제 해결
Amazon CloudFront Functions – 더 짧은 지연 시간으로 엣지에서 코드 실행을 위한 신규 기능 | Amazon Web Services