Amazon Web Services 한국 블로그
Amazon CloudFront 서버 타이밍 헤더를 통한 동작 및 성능 모니터링하기
Amazon CloudFront는 서버 타이밍 헤더(Server Timing Headers)라는 새로운 기능을 출시했습니다. 이 기능은 요청을 수신한 시점에 콘텐츠가 캐시로부터 제공되었는지, 그 요청이 어떻게 CloudFront 엣지 위치로 라우팅이 되었는지, 그리고 연결과 응답 과정의 각 단계 동안에 얼마만큼의 시간이 흘렀는지 등과 같은 자세한 성능 정보를 제공합니다.
서버 타이밍 헤더는 뷰어(viewer)의 응답에서 HTTP 헤더의 형태로 추가적인 메타 데이터를 제공하며, 클라이언트-측 애플리케이션 코드에서 이 헤더를 사용하거나 조사할 수 있습니다. 서버 타이밍 헤더를 사용하여 CloudFront의 성능 문제를 해결할 때 더 자세한 통찰력을 얻거나, CloudFront의 행동을 조사하거나, 사용자-요청 트랜잭션 (캐시 미스, 첫번째 바이트에 대한 지연 그리고 마지막 바이트에 대한 지연 등과 같은)에 대한 통계 수치를 수집하고 통합하는데 사용할 수 있습니다.
이 글을 통해, 서버 타이밍 헤더를 활성화하는 방법을 배우고 이 기능의 사용을 통해 사용자 경험 개선을 증진시킬 수 있는 일반적인 사례에 대해 더 많이 이해를 하실 수 있습니다.
Amazon CloudFront 서버 타이밍 헤더 활성화하기
여기에서는, AWS 관리 콘솔을 통해 CloudFront 배포 상의 서버 타이밍 헤더를 어떻게 활성화 하는지 살펴 보겠습니다. 우선, CloudFront > 정책> 응답 헤더에서 새로운 사용자 응답 헤더 정책을 생성하거나, 기존에 존재하는 것을 업데이트합니다. 응답 헤더 정책에서, 서버 타이밍 헤더 기능을 활성화할 수 있습니다. 아래의 두 그림은 기능을 활성화하는 방법과, 활성화가 되었을 때의 정책이 어떤 모습인가를 보여줍니다.
서버 타이밍 헤더는 중요한 메트릭을 포함할 수 있게 해주는데, 이 메트릭은 CloudFront를 통해 거쳐가는 요청에 대한 추가적인 성능 정보를 제공합니다. 이러한 헤더에 포함되어 있는 정보를 다양한 구현 과정에서 사용할 수 있습니다. 아래에는 고려해 볼 만한 몇 가지의 사례가 있습니다.
- 동적인 요청에 대해 요청/응답에 미치는 서버-측의 영향을 이해할 수 있습니다.
- 동적인 요청의 경우, CloudFront는 오리진과의 통신을 해야 합니다. 서버 타이밍 헤더는 이 통신이 얼마나 오래 걸리는지, 그리고 서버 통신이 전체 성능에 미치는 영향에 대한 정보를 제공할 수 있습니다.
- 어떤 서버-측 통신 메트릭은 DNS 취득 시간, TCP 연결, 그리고 첫번째 바이트 지연시간 (FBL 혹은 First Byte Latency)를 포함합니다. 이러한 지표는 워크로드의 성능을 개선하는 데 사용될 수 있습니다.
- 만약 DNS 취득 시간이 너무 오래 걸린다면, 이어지는 지연시간을 줄이기 위해 TTL (Time to Live)를 늘릴 수 있습니다.
- TCP 연결이 느린 경우, Route-Trip 시간을 줄이기 위해 Keep-Alive 타임아웃을 늘릴 수 있습니다.
- FBL이 높은 경우, 오리진은 더 빠른 응답을 제공하기 위해 추가적인 자원 할당이 필요할 수 있습니다.
- 캐싱이 된 콘텐츠에 대해 CloudFront 인프라스트럭쳐 내부에서 요청이 어떻게 라우팅되는지를 더 자세히 알 수 있습니다.
- 새로운 기능을 통해, 요청이 처리된 특정 레이어를 알 수 있는데, 엣지 지역 (Edge), 리전내 엣지 캐시 (REC 혹은 Regional Edge Cache) 또는 오리진 실드 (Origin Shield)중 어느 레이어인지 알 수 있습니다.
- 이 지표는 Origin Shield를 추가하는 것이 유용한 지를 이해하고 싶을 때, Refresh-Hits되는 컨텐츠에 대해 더 나은 서비스를 제공하기 위한 행위를 하고자 할 때, 그리고 요청이 어떻게 처리되는 지에 대한 전체적인 도식을 이해하고자 할 때 특히 도움이 됩니다.
서버 타이밍 헤더 상세분석
CloudFront에 의해 처리되는 HTTP 요청은 엣지 지역, 지역적 엣지 캐시 그리고 오리진 실드 또는 오리진 (캐시 미스 경우)와 같은 CloudFront의 여러 계층을 거쳐 오리진을 향해 상향 전달될 수 있습니다. 그리고나서, 응답은 같은 계층을 통해 사용자 (viewer)를 향해 하향으로 전달됩니다. CloudFront의 더 자세한 계층에 대해서는, AWS New York Summit 2019의 이 영상(YouTube)을 시청하십시오.
서버 타이밍 헤더는 상향 흐름으로부터 정보와 지표을 수집하고 그것을 특정 응답 헤더를 통해 반환을 할 것입니다. 다음 서버 타이밍 헤더 예제는 응답을 통해 반환되어집니다.
server-timing: cdn-cache-hit,cdn-pop;desc="IAD89-C1″,cdn-rid;desc=”qx0z2Nquy2s3jjH3leHZI7k10X9sN9t5ZmIsjNCqvnJ2uOCjZmyFbQ==”,cdn-hit-layer;desc=”EDGE”
이 정보를 통해, 요청이 IAD89-C1 PoP에 있는 엣지 계층, CloudFront 캐싱의 첫번째 계층 (cdn-hit-layer;desc=“EDGE”
) 에서 캐시히트 (cdn-cache-hit
)가 발생했다고 결정할 수 있습니다. 사실, cdn-hit-layer
지표는 세개중 하나의 값을 가질 수 있습니다: EDGE는 요청을 받은 엣지 지역을 나타내고, REC는 엣지 지역의 뒤에 있는 지역적 엣지 캐시를 나타내며, 오리진 실드는 CloudFront 배포에서 선택되어진 경우 오리진 실드 계층을 나타냅니다.
이제 캐시 미스가 발생해서 오리진 서버로 전달되어진 요청에 대해 생각해 봅시다.
server-timing: cdn-upstream-layer;desc="REC”,cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=195,cdn-upstream-fbl;dur=366,cdn-cache-miss,cdn-pop;desc=”IAD89-C3″,cdn-rid;desc=”bjEUzYyv7e3FyYoK93Tw0MNYhNV2zVTMbjFO8g-Tr5aEW108VkzM-w==”
이제 cdn-upstream 접두어를 가진 새로운 지표를 보게 된 것에 대해 주목을 하십시오. 이 접두어는 오리진에 연결된 CloudFront 계층을 설명합니다 (cdn-upstream-layer;desc=“REC”). 그리고, 요청의 다양한 부분의 성능을 설명합니다.
cdn-upstream-dns;dur=0
는 CloudFront가 오리진의 도메인 이름을 알아내는데 소요된 기간을 가리킵니다 (밀리세컨드 단위). 이 지표에 대해 0이라는 값은 DNS 결과가 캐시가 되었거나, 이미 수립된 연결이 재사용되었음을 의미합니다.cdn-upstream-connect;dur=195
는 오리진과 TCP 연결 및 TLS 세션을 수립하는데 걸린 시간을 밀리세컨드 단위로 나타냅니다. 이 지표에 대한 0이라는 값은 기존 연결이 재사용되었음을 의미합니다.cdn-upstream-fbl;dur=366
은 오리진 요청의 완성과 오리진으로부터의 응답에서 첫번째 바이트가 수신되는데 걸린 시간을 밀리세컨드로 나타냅니다. “FBL” 줄임말은 “First Byte Latency (첫번째 바이트 지연)”을 뜻합니다. 서버 타이밍 지표에 대한 완전한 목록에 대해서는 여기에 있는 문서를 참고하시기 바랍니다.
결론
이 글에서는 서버 타이밍 헤더라고하는 관찰가능성(observability) 기능을 소개드렸습니다. 이 기능은 CloudFront 리소스의 가용성과 성능을 진단하고 유지하는데 도움을 드립니다. 서버 타이밍 헤더는 CloudFront가 제공하는 추가 기능입니다. 해당 툴은 표준 그리고 실시간 로그, 경보 그리고 콘솔 리포트를 사용하여 CloudFront의 자원을 관측하는 것과, 잠재적인 이슈를 조사하는 데 사용이 됩니다. 자세한 사항에 대해서는 CloudFront Developer Guide 를 보시기 바랍니다.
서버 타이밍 헤더는 CloudFront 배포에서 즉각적인 사용이 가능합니다. CloudFront 콘솔이나 AWS SDK에서 서버 타이밍 헤더를 활성화할 수 있습니다. CloudFront 서버 타이밍 헤더를 사용하는데에 추가적인 비용은 들지 않습니다.
– Sangram Thorat, AWS Enterprise Support Lead
– Vinicius Pedroni, AWS Solutions Architect
이 글은 AWS Networking & Content Delivery의 Amazon CloudFront introduces Server Timing headers을 신동곤님(AWS Principal TAM)이 한국어로 번역하였습니다.