CDN 지침

Azure Storage
Azure Blob Storage

CDN(콘텐츠 배달 네트워크)은 사용자에게 웹 콘텐츠를 효율적으로 제공할 수 있는 서버의 분산 네트워크입니다. CDN은 최종 사용자에게 가까운 Edge 서버에 캐시된 콘텐츠를 저장하여 대기 시간을 최소화합니다.

CDN은 일반적으로 이미지, 스타일 시트, 문서, 클라이언트쪽 스크립트 및 HTML 페이지와 같은 정적 콘텐츠를 제공하기 위해 사용됩니다. CDN을 사용하는 주요 이점은 대기 시간이 짧고 애플리케이션이 호스팅되는 데이터 센터와 관련하여 지리적 위치에 관계 없이 사용자에게 콘텐츠를 빠르게 제공할 수 있다는 점입니다. 또한 CDN을 사용하면 웹 애플리케이션이 CDN에 호스트되는 콘텐츠에 대한 요청을 처리할 필요가 없으므로 애플리케이션에 대한 부하를 줄이는 데 도움이 될 수 있습니다.

CDN 다이어그램

Azure에서 Azure CDN(콘텐츠 배달 네트워크)은 Azure 또는 다른 위치에서 호스팅되는 고대역폭 콘텐츠를 제공하는 글로벌 CDN 솔루션입니다. Azure CDN을 사용하여 Azure BLOB 스토리지, 웹 애플리케이션, 가상 머신 및 공개적으로 액세스되는 웹 서버에서 로드된 공개적으로 사용 가능한 개체를 캐시할 수 있습니다.

이 항목에서는 CDN을 사용할 때의 몇 가지 일반적인 모범 사례 및 고려 사항을 설명합니다. 자세한 내용은 Azure CDN을 참조하세요.

CDN 사용 방법 및 사용 이유

일반적인 CDN의 용도는 다음과 같습니다.

  • 웹 사이트에서 종종 클라이언트 애플리케이션에 대한 정적 리소스를 제공합니다. 이미지, 스타일 시트, 문서, 파일, 클라이언트쪽 스크립트, HTML 페이지, HTML 조각 또는 서버가 각 요청에 대해 수정할 필요가 없는 기타 콘텐츠 등이 이러한 리소스에 해당할 수 있습니다. 애플리케이션이 런타임 시 항목을 만들고 CDN에서 사용할 수 있게 만들 수 있지만(현재 뉴스 헤드라인 목록 작성을 통해) 각 요청에 대해서는 그렇게 할 수 없습니다.

  • 휴대폰 및 태블릿 컴퓨터와 같은 디바이스에 공용 정적 및 공유 콘텐츠를 전달합니다. 애플리케이션 자체는 다양한 디바이스에서 실행되는 클라이언트에 API를 제공하는 웹 서비스입니다. 또한 클라이언트가 CDN 클라이언트 UI를 생성하는 데 사용할 정적 데이터 세트를 (웹 서비스를 통해) 제공할 수 있습니다. 예를 들어, CDN은 JSON 또는 XML 문서를 배포하는 데 사용할 수 있습니다.

  • 어떠한 전용 컴퓨팅 리소스 필요 없이 공용 정적 콘텐츠만으로 구성된 전체 웹 사이트를 클라이언트에 제공합니다.

  • 주문 시 비디오 파일을 클라이언트에 스트리밍합니다. 비디오는 CDN 연결을 제공하는 전역적으로 위치한 데이터 센터에서 짧은 대기 시간 및 안정적인 연결 이점을 얻을 수 있습니다. Microsoft AMS(Azure Media Services)는 Azure CDN에 통합되어 향후 배포를 위해 CDN에 직접 콘텐츠를 배달합니다. 자세한 내용은 스트리밍 엔드포인트 개요를 참조하세요.

  • 일반적으로 사용자, 특히 애플리케이션을 호스팅하는 데이터 센터에서 멀리 떨어진 사용자의 환경을 개선합니다. 이러한 사용자는 대기 시간이 길어지는 문제가 생길 수 있습니다. 웹 애플리케이션에 있는 콘텐츠의 총 크기에서 상당 부분이 정적으로, 여러 데이터 센터에 애플리케이션을 배포하기 위한 요구 사항을 제거하면서 성능 및 전반적인 사용자 환경을 유지 관리하는 데 CDN 사용이 도움이 됩니다. Azure CDN 노드 위치 목록을 보려면 Azure CDN POP 위치를 참조하세요.

  • IoT(사물 인터넷) 솔루션 지원. 각 디바이스에 직접 펌웨어 업데이트를 배포해야 한다면 IoT 솔루션에 포함되는 방대한 수의 디바이스 및 어플라이언스 때문에 애플리케이션에 쉽게 과부하가 걸릴 수 있을 것입니다.

  • 애플리케이션 크기를 조정할 필요 없이 필요 시 최대치 및 급격한 증가에 대처하여 그에 따른 실행 비용의 증가를 방지합니다. 예를 들어 특정 라우터 모델과 같은 하드웨어 디바이스 또는 스마트 TV와 같은 소비자 디바이스에 대한 운영 체제 업데이트를 릴리스할 때는 짧은 기간 동안 수백만 명의 사용자 및 디바이스가 이를 다운로드하므로 최고치의 수요가 발생하게 됩니다.

과제

CDN을 사용하려는 경우 고려해야 할 몇 가지 과제가 있습니다.

  • 배포. CDN이 콘텐츠를 가져올 원본 위치 및 둘 이상의 스토리지 시스템에 콘텐츠를 배포해야 하는지 여부를 결정합니다. 정적 콘텐츠 및 리소스의 배포 프로세스를 고려해야 합니다. 예를 들어 Azure Blob Storage에 콘텐츠를 로드하는 별도의 단계를 구현해야 할 수 있습니다.

  • 버전 관리 및 캐시 제어. 정적 콘텐츠를 업데이트하고 새 버전을 배포하는 방법을 고려합니다. CDN이 캐싱 및 TTL(Time to Live)을 수행하는 방식을 이해합니다. Azure CDN에 대한 내용은 캐싱 작동 방식을 참조하세요.

  • 테스트. 로컬로 또는 스테이징 환경에서 애플리케이션을 개발하고 테스트를 수행할 때 CDN 설정의 로컬 테스트를 수행하는 것은 어려울 수 있습니다.

  • SEO(검색 엔진 최적화). CDN을 사용하는 경우 이미지 및 문서와 같은 콘텐츠는 다른 도메인에서 제공됩니다. 이 콘텐츠에 대한 SEO에 영향을 미칠 수 있습니다.

  • 콘텐츠 보안. 모든 CDN이 콘텐츠에 대한 모든 형태의 액세스를 제공하는 것은 아닙니다. Azure CDN를 비롯한 일부 CDN 서비스는 CDN 콘텐츠를 보호하기 위해 토큰 기반 인증을 지원합니다. 자세한 내용은 토큰 인증을 사용하여 Azure Content Delivery Network 자산 보안 유지를 참조하세요.

  • 클라이언트 보안. 클라이언트가 CDN의 리소스에 대한 액세스를 허용하지 않는 환경에서 연결될 수 있습니다. 알려진 원본 집합만 액세스하도록 제한되거나, 페이지 원본 이외의 위치에서는 리소스를 로드할 수 없는 제한된 보안 환경일 수 있습니다. 이러한 경우를 처리하는 데 대체 구현이 필요합니다.

  • 복원력. CDN은 애플리케이션에 대한 단일 오류 지점이 될 수 있습니다.

다음과 같은 시나리오에서는 CDN이 그다지 유용하지 않을 수 있습니다.

  • 콘텐츠에 적중률이 낮으면 유효한 동안 몇 번만 액세스될 수 있습니다(TTL(Time-To-Live) 설정에 따라 결정됨).

  • 대기업 또는 공급망 에코시스템 등과 같이 데이터가 비공개인 경우입니다.

일반적인 지침과 모범 사례

CDN 사용은 애플리케이션에 대한 부하를 최소화하고 가용성과 성능을 극대화하는 좋은 방법입니다. 따라서 애플리케이션이 사용하는 모든 적절한 콘텐츠 및 리소스에서 이 전략을 채택할지를 고려합니다. CDN을 사용하는 전략을 설계할 때 다음 섹션에 있는 요소를 고려합니다.

배포

정적 콘텐츠가 애플리케이션 배포 패키지 또는 프로세스에 포함되지 않은 경우 애플리케이션과 별도로 프로비전 및 배포해야 할 수 있습니다. 따라서 이 작업이 애플리케이션 구성 요소와 정적 리소스 콘텐츠를 관리하는 데 사용할 버전 관리 방법에 어떤 영향을 주게 될지 고려해야 합니다.

묶음 및 축소 기술을 사용하여 클라이언트의 로드 시간을 줄이는 것을 고려합니다. 번들링은 여러 개의 파일을 단일 파일로 결합합니다. 축소는 기능은 변경하지 않으면서 스크립트 및 CSS 파일에서 불필요한 문자를 제거합니다.

추가적인 위치에 콘텐츠를 배포해야 하는 경우, 이 작업이 배포 프로세스의 추가 단계가 됩니다. 일정한 간격으로 또는 이벤트에 대한 응답으로 애플리케이션이 CDN에 대해 콘텐츠를 업데이트하는 경우 CDN의 엔드포인트를 비롯한 추가적인 위치에 업데이트된 콘텐츠를 저장해야 합니다.

일부 정적 콘텐츠가 CDN에서 제공될 예정인 경우 로컬 개발 및 테스트를 처리하는 방법을 고려합니다. 예를 들어, 빌드 스크립트의 일부로 CDN에 콘텐츠를 미리 배포할 수 있습니다. 또는 컴파일 지시문이나 플래그를 사용하여 애플리케이션이 리소스를 로드하는 방식을 제어합니다. 예를 들어, 디버그 모드에서 애플리케이션은 로컬 폴더에서 정적 리소스를 로드할 수 있습니다. 릴리스 모드에서 애플리케이션은 CDN을 사용합니다.

gzip(GNU zip)과 같은 파일 압축 옵션을 고려합니다. 호스트하는 웹 애플리케이션이 원본 서버에서 또는 CDN이 Edge 서버에서 직접 압축을 수행할 수 있습니다. 자세한 내용은 Azure CDN에서 파일을 압축하여 성능 향상을 참조하세요.

라우팅 및 버전 관리

다양한 시간에 여러 CDN 인스턴스를 사용해야 합니다. 예를 들어 애플리케이션의 새 버전을 배포할 때 새 CDN을 사용하고 이전 버전에 대한 이전 CDN(이전 형식의 콘텐츠 포함)를 유지하려 할 수 있습니다. Azure Blob Storage를 콘텐츠 원본으로 사용하는 경우 별도의 스토리지 계정 또는 컨테이너를 만들고 CDN 엔드포인트가 이를 가리키도록 할 수 있습니다.

Azure Blob Storage에서 콘텐츠를 검색할 때 쿼리 문자열이 리소스 이름(Blob 이름)의 일부이므로 CDN의 리소스에 대한 링크에서 애플리케이션의 서로 다른 버전을 표시하기 위해 쿼리 문자열을 사용하지 않습니다. 이 방법은 클라이언트가 리소스를 캐시하는 방법에도 영향을 줄 수 있습니다.

CDN에 이전 리소스가 캐시된 경우에는 애플리케이션을 업데이트할 때 정적 콘텐츠의 새 버전을 배포하는 것이 어려울 수 있습니다. 자세한 내용은 아래에서 캐시 제어에 대한 섹션을 참조하세요.

국가/지역별로 CDN 콘텐츠 액세스를 제한하는 것이 좋습니다. Azure CDN을 사용하면 원본의 국가 또는 지역에 따라 요청을 필터링하고 전달되는 내용을 제한할 수 있습니다. 자세한 내용은 국가/지역별로 콘텐츠 액세스 제한을 참조하세요.

캐시 제어

시스템 내에서 캐싱을 관리하는 방법을 고려합니다. 예를 들어, Azure CDN에서 전역 캐싱 규칙을 설정한 후 특정 원래 엔드포인트에 대해 사용자 지정 캐싱을 설정할 수 있습니다. 원본의 캐시 지시문 헤더를 전송하여 CDN에서 캐싱이 수행되는 방식을 제어할 수도 있습니다.

자세한 내용은 캐싱 작동 방식을 참조하세요.

개체를 CDN에서 사용할 수 없도록 하려면 원본에서 삭제하거나 CDN 엔드포인트를 제거 또는 삭제하거나, Blob Storage인 경우 컨테이너 또는 Blob를 프라이빗으로 만들 수 있습니다. 그러나 TTL(Time to Live)가 만료될 때까지 CDN에서 항목이 제거되지 않습니다. 수동으로 CDN 엔드포인트를 삭제할 수도 있습니다.

보안

CDN은 CDN에서 제공하는 인증서를 사용하여 HTTPS(SSL)를 통해서 뿐만 아니라 HTTP를 통해서도 콘텐츠를 배달할 수 있습니다. 혼합 콘텐츠에 대한 브라우저 경고를 방지하려면 HTTPS를 사용하여 HTTPS를 통해 로드된 페이지에 표시되는 정적 콘텐츠를 요청해야 할 수 있습니다.

CDN을 사용하여 글꼴 파일 같은 정적 자산을 배달하는 경우 XMLHttpRequest 호출을 사용하여 다른 도메인에서 이러한 리소스를 요청할 때 동일 원본 정책 문제가 발생할 수 있습니다. 적절한 응답 헤더를 설정하도록 웹 서버를 구성하지 않으면 많은 웹 브라우저에서 크로스-원본 자원 공유(CORS)를 차단합니다. 다음 방법 중 하나를 사용하여 CORS를 지원하도록 CDN을 구성할 수 있습니다.

CDN 대체

애플리케이션이 CDN의 오류 또는 일시적인 중단에 대처하는 방법을 고려합니다. 클라이언트 애플리케이션은 이전 요청 중에 로컬로 캐시(클라이언트에)된 리소스의 복사본을 사용하거나, CDN을 사용할 수 없는 경우 오류를 감지하고 대신 원본(리소스가 있는 애플리케이션 폴더 또는 Azure Blob 컨테이너)의 리소스를 요청하는 코드를 포함할 수 있습니다.