Azure App Service 로컬 캐시 개요

참고 항목

로컬 캐시는 Windows 컨테이너 또는 App Service on Linux 등의 컨테이너화된 App Service 앱이나 함수 앱에서 지원되지 않습니다. 이러한 앱 유형에 사용할 수 있는 로컬 캐시 버전은 앱 캐시입니다.

Azure App Service의 콘텐츠는 Azure Storage에 저장되며 영구적인 방식의 콘텐츠 공유로 표시됩니다. 이 디자인은 다양한 앱으로 작업하기 위한 것이며, 다음과 같은 특성을 가집니다.

  • 콘텐츠는 앱의 여러 VM(가상 머신) 인스턴스 간에 공유됩니다.
  • 콘텐츠는 영구적이며 앱을 실행하여 수정할 수 있습니다.
  • 동일한 공유 콘텐츠 폴더 아래에서 로그 파일 및 진단 데이터 파일을 사용할 수 있습니다.
  • 새 콘텐츠를 직접 게시하면 콘텐츠 폴더가 업데이트됩니다. SCM 웹 사이트 및 실행 중인 앱을 통해 동일한 콘텐츠를 즉시 볼 수 있습니다. 일반적으로 ASP.NET과 같은 일부 기술은 몇 가지 파일 변경 내용에 대해 앱을 다시 시작하여 최신 콘텐츠를 가져옵니다.

많은 앱에서 이러한 기능 중 하나 또는 모두를 사용하지만 일부 앱에서는 고가용성으로 실행할 수 있는 읽기 전용 콘텐츠 저장소 성능만 뛰어나면 됩니다. 이러한 앱은 특정 로컬 캐시의 VM 인스턴스 이점을 활용할 수 있습니다.

Azure App Service 로컬 캐시 기능은 콘텐츠의 웹 역할 보기를 제공합니다. 이 콘텐츠는 사이트 시작 시 비동기적으로 만들어지는 스토리지 콘텐츠의 쓰기-삭제(write-but-discard) 캐시입니다. 캐시가 준비되면 캐시된 콘텐츠에 대해 실행되도록 사이트가 전환됩니다. 로컬 캐시에서 실행되는 앱은 다음과 같은 이점이 있습니다.

  • Azure Storage의 콘텐츠에 액세스할 때 발생하는 대기 시간의 영향을 받지 않습니다.
  • 읽기 전용 복사본이 작업자에 캐시되므로 스토리지에 대한 연결 문제의 영향을 받지 않습니다.
  • 스토리지 공유 변경으로 인해 다시 시작되는 앱이 더 적습니다.

참고 항목

Java(Java SE, Tomcat 또는 JBoss EAP)를 사용하는 경우 기본적으로 Java 아티팩트(.jar, .war 및 .ear 파일)가 작업자에게 로컬로 복사됩니다. Java 애플리케이션이 다른 파일에 대한 읽기 전용 액세스에 의존하는 경우 해당 파일도 복사되도록 JAVA_COPY_ALLtrue로 설정합니다. 로컬 캐시를 사용하도록 설정하는 경우 이 항목이 이 Java 관련 개선 사항보다 우선합니다.

로컬 캐시가 App Service 동작을 변경하는 방식

  • D:\home은 앱이 시작될 때 VM 인스턴스에서 만들어진 로컬 캐시를 가리킵니다. D:\local은 임시 VM 관련 스토리지를 계속 가리킵니다.
  • 로컬 캐시는 각각 D:\home\siteD:\home\siteextensions에 공유 콘텐츠 저장소의 /site/siteextensions 폴더에 대한 일회성 복사본을 포함합니다. 파일은 앱이 시작될 때 로컬 캐시에 복사됩니다. 각 앱에서 두 폴더의 크기는 기본적으로 1GB로 제한되지만 최대 2GB로 증가될 수 있습니다. 캐시 크기가 늘어나면 캐시를 로드하는 시간이 더 오래 걸립니다. 로컬 캐시 제한을 2GB로 늘렸으며 복사된 파일이 최대 크기인 2GB를 초과하는 경우 App Service는 자동으로 로컬 캐시를 무시하고 원격 파일 공유에서 읽습니다.

Important

복사된 파일이 정의된 로컬 캐시 크기 제한을 초과하거나 제한이 정의되지 않은 경우 배포 및 교환 작업이 오류와 함께 실패할 수 있습니다. 자세한 내용은 FAQ를 참조하세요.

  • 로컬 캐시는 읽기/쓰기가 가능합니다. 그러나 앱이 가상 머신을 이동하거나 다시 시작된 경우 모든 수정 내용이 삭제됩니다. 중요 업무용 데이터를 콘텐츠 저장소에 저장하는 앱에 로컬 캐시를 사용해서는 안 됩니다.
  • D:\home\LogFilesD:\home\Data에는 로그 파일 및 앱 데이터가 포함됩니다. 두 개의 하위 폴더가 VM 인스턴스에 로컬로 저장되고 공유 콘텐츠 저장소에 주기적으로 복사됩니다. 앱은 로그 파일 및 데이터를 이러한 폴더에 써서 유지할 수 있습니다. 그러나 공유 콘텐츠 저장소로의 복사는 최상의 노력 방식을 따르므로 VM 인스턴스의 갑작스러운 작동 중단으로 인해 로그 파일 및 데이터가 손실될 수 있습니다.
  • 로그 스트리밍은 최상의 노력 복사의 영향을 받습니다. 스트리밍된 로그에서 최대 1분의 지연을 확인할 수 있습니다.
  • 공유 콘텐츠 저장소에서 로컬 캐시를 사용하는 앱의 경우 LogFilesData 폴더의 폴더 구조가 변경되었습니다. 이제 "고유 식별자" + 타임스탬프 명명 패턴을 따르는 하위 폴더가 있습니다. 각 하위 폴더는 앱을 실행 중이거나 실행한 VM 인스턴스에 해당합니다.
  • D:\home의 다른 폴더가 로컬 캐시에 남아 있으며 공유 콘텐츠 저장소에 복사되지 않습니다.
  • 지원되는 메서드를 통한 앱 배포는 지속 가능한 공유 콘텐츠 저장소로 직접 게시됩니다. 로컬 캐시에서 D:\home\siteD:\home\siteextensions 폴더를 새로 고치려면 앱을 다시 시작해야 합니다. 수명 주기를 원활하게 하려면 이 문서의 뒷부분에 나오는 정보를 참조하세요.
  • SCM 사이트의 기본 콘텐츠 보기는 공유 콘텐츠 저장소의 기본 콘텐츠 보기로 유지됩니다.

App Service에서 로컬 캐시 사용

참고 항목

로컬 캐시는 F1 또는 D1 계층에서 지원되지 않습니다.

로컬 캐시는 예약된 앱 설정 조합을 사용하여 구성됩니다. 다음과 같은 방법으로 이러한 앱 설정을 구성할 수 있습니다.

방법: Azure 포털을 사용하여 로컬 캐시 구성

앱 설정 WEBSITE_LOCAL_CACHE_OPTION = Always

Azure portal app settings: Local Cache

방법: Azure Resource Manager를 사용하여 로컬 캐시 구성

...

{
    "apiVersion": "2015-08-01",
    "type": "config",
    "name": "appsettings",
    "dependsOn": [
        "[resourceId('Microsoft.Web/sites/', variables('siteName'))]"
    ],

    "properties": {
        "WEBSITE_LOCAL_CACHE_OPTION": "Always",
        "WEBSITE_LOCAL_CACHE_SIZEINMB": "1000"
    }
}

...

로컬 캐시에서 크기 설정 변경

기본적으로 로컬 캐시 크기는 1GB입니다. 여기에는 Site 폴더, 콘텐츠 저장소에서 복사된 SiteExtensions 폴더, 로컬로 만든 모든 로그 및 데이터 폴더가 포함됩니다. 이 한도를 늘리려면 앱 설정 WEBSITE_LOCAL_CACHE_SIZEINMB를 사용합니다. 앱당 최대 2GB(2000MB)로 늘릴 수 있습니다. 크기를 늘리면 로컬 캐시를 로드하는 시간이 더 오래 걸립니다.

App Service 로컬 캐시 사용에 대한 모범 사례

로컬 캐시는 스테이징 환경 기능과 함께 사용하는 것이 좋습니다.

  • 값이 Always고정 앱 설정 WEBSITE_LOCAL_CACHE_OPTION프로덕션 슬롯에 추가합니다. WEBSITE_LOCAL_CACHE_SIZEINMB를 사용하는 경우 이것도 프로덕션 슬롯에 고정 설정으로 추가합니다.
  • 스테이징 슬롯을 만들고 사용자의 스테이징 슬롯에 게시합니다. 스테이징 슬롯은 프로덕션 슬롯에 대한 로컬 캐시의 이점을 활용하지만 일반적으로 스테이징 중 원활한 빌드-배포-테스트 수명 주기를 지원하기 위해 로컬 캐시를 사용하지는 않습니다.
  • 스테이징 슬롯에 대해 사이트를 테스트합니다.
  • 준비가 되면 스테이징 슬롯과 프로덕션 슬롯 간의 교환 작업을 실행합니다.
  • 고정 설정은 이름 순이며, 슬롯에 고정됩니다. 스테이징 슬롯이 프로덕션으로 교환되면 로컬 캐시 앱 설정을 상속합니다. 새로 교환된 프로덕션 슬롯은 몇 분 후 로컬 캐시에 대해 실행되며, 교환 후 슬롯 준비의 일부로 준비됩니다. 따라서 슬롯 교환이 완료되면 프로덕션 슬롯이 로컬 캐시에 대해 실행됩니다.

질문과 대답(FAQ)

로컬 캐시 크기 제한을 초과하면 어떻게 됩니까?

복사된 파일이 로컬 캐시 크기 제한을 초과하면 앱이 원격 공유에서 읽습니다. 그러나 배포 및 교환 작업은 오류와 함께 실패할 수 있습니다. 크기 제한 및 결과는 아래 표를 참조하세요.

 로컬 캐시 크기 복사된 파일 결과
≤ 2GB ≤ 로컬 캐시 크기 로컬 캐시에서 읽습니다.
≤ 2GB > 로컬 캐시 크기 원격 공유에서 읽습니다.
참고: 배포 및 교환 작업은 오류와 함께 실패할 수 있습니다.

내 앱에 로컬 캐시가 적용되는지 어떻게 알 수 있나요?

앱에 높은 성능의 안정적인 콘텐츠 저장소가 필요하지만 콘텐츠 저장소를 사용하여 런타임에 중요한 데이터를 기록하지 않고 총 크기가 2GB 미만인 경우에는 적용할 수 있습니다. /site 및 /siteextensions 폴더의 총 크기를 확인하려면 사이트 확장 "Azure Web Apps 디스크 사용량"을 사용하면 됩니다.

사이트가 로컬 캐시를 사용하도록 전환되었는지 어떻게 알 수 있나요?

스테이징 환경에서 로컬 캐시 기능을 사용하는 경우 로컬 캐시가 준비될 때까지 교환 작업이 완료되지 않습니다. 사이트가 로컬 캐시에 대해 실행되고 있는지 알아보려면 작업자 프로세스 환경 변수 WEBSITE_LOCALCACHE_READY를 확인하세요. 작업자 프로세스 환경 변수 페이지의 지침을 사용하여 여러 인스턴스에서 작업자 프로세스 환경 변수에 액세스할 수 있습니다.

방금 새 변경 내용을 게시했지만 앱에 없는 것 같습니다. 이유는 무엇입니까?

앱에서 로컬 캐시를 사용하는 경우 최신 변경 내용을 가져오려면 사이트를 다시 시작해야 합니다. 프로덕션 사이트에 변경 내용을 게시하고 싶지 않으신가요? 이전 모범 사례 섹션에서 슬롯 옵션을 참조하세요.

참고 항목

패키지에서 실행 배포 옵션은 로컬 캐시와 호환되지 않습니다.

내 로그는 어디에 있나요?

로컬 캐시를 사용하는 경우 로그 폴더와 데이터 폴더가 서로 약간 다르게 표시됩니다. 그러나 하위 폴더의 구조는 하위 폴더가 "고유한 VM 식별자" + 타임스탬프 형식의 하위 폴더 아래에 중첩된다는 점을 제외하고는 동일하게 유지됩니다.

로컬 캐시를 사용하도록 설정했지만 앱이 여전히 다시 시작됩니다. 왜 그럴까요? 로컬 캐시는 빈번한 앱 다시 시작에 도움이 된다고 생각했습니다.

로컬 캐시는 스토리지 관련 앱 다시 시작을 방지하는 데 도움이 됩니다. 그러나 VM의 계획된 인프라 업그레이드 중에는 앱이 여전히 다시 시작될 수 있습니다. 로컬 캐시를 사용하는 경우에 발생하는 전체 앱 다시 시작은 횟수가 줄어야 합니다.

로컬 캐시는 더 빠른 로컬 드라이브로 복사할 대상에서 디렉터리를 제외합니까?

스토리지 콘텐츠를 복사하는 단계의 일부로 리포지토리로 이름이 지정된 모든 폴더가 제외됩니다. 이는 사용자 사이트 콘텐츠에 앱의 일상적인 작업에 불필요할 수도 있는 소스 제어 리포지토리가 포함될 수 있는 시나리오에 유용합니다.

사이트 관리 작업 후에 로컬 캐시 로그를 플러시하는 방법은 무엇인가요?

로컬 캐시 로그를 플러시하려면 앱을 중지한 후 다시 시작합니다. 이 작업을 수행하면 이전 캐시가 지워집니다.

로컬 캐시를 사용하도록 설정한 경우 다시 시작한 후 App Service에서 이전에 배포된 파일을 표시하기 시작하는 이유는 무엇인가요?

App Service가 다시 시작 시 이전에 배포된 파일을 표시하기 시작하는 경우 앱 설정에 ‘WEBSITE_DISABLE_SCM_SEPARATION=true’가 있는지 확인합니다. 이 설정을 추가한 후 KUDU를 통한 모든 배포는 영구 스토리지 대신 로컬 VM에 쓰기 시작합니다. 이 문서에서 위에서 언급한 모범 사례를 활용해야 합니다. 즉, 로컬 캐시를 사용하도록 설정하지 않은 스테이징 슬롯에 배포를 항상 수행해야 합니다.

추가 리소스

환경 변수 및 앱 설정 참조