다음을 통해 공유


Azure App Service의 로컬 캐시

팁 (조언)

Azure에서 Microsoft Copilot에 다음과 같은 질문을 할 수도 있습니다.

  • Azure App Service에서 로컬 캐시는 어떻게 작동하나요?
  • Azure App Service에서 로컬 캐시를 사용하면 어떤 이점이 있나요?
  • Azure App Service에서 로컬 캐시를 사용할 때의 제한 사항은 무엇입니까?

Azure에서 Copilot을 찾으려면 Azure Portal 도구 모음에서 Copilot을 선택합니다.

Azure App Service 콘텐츠는 Azure Storage에 저장되며 지속성 콘텐츠 공유로 노출됩니다. 이 디자인은 다양한 앱에서 작동하며 다음과 같은 속성이 있습니다.

  • 콘텐츠는 앱의 여러 VM(가상 머신) 인스턴스에서 공유됩니다.
  • 콘텐츠는 지속성이 있으며 실행 중인 앱으로 수정할 수 있습니다.
  • 로그 파일 및 진단 데이터 파일은 동일한 공유 콘텐츠 폴더에서 사용할 수 있습니다.
  • 새 콘텐츠를 게시하면 콘텐츠 폴더가 직접 업데이트됩니다. SCM(소스 제어 관리자, Kudu라고도 함) 웹 사이트 및 실행 중인 앱을 통해 동일한 콘텐츠를 즉시 볼 수 있습니다. 그러나 일부 기술(예: ASP.NET)은 최신 콘텐츠를 로드하기 위해 특정 파일 변경 시 앱 다시 시작을 시작할 수 있습니다.

많은 앱에서 이러한 기능 중 하나 이상을 사용하지만 일부 앱에는 고가용성으로 실행할 수 있는 고성능 읽기 전용 콘텐츠 스토어가 필요합니다. 이러한 앱은 VM 인스턴스의 로컬 캐시에 대해 실행하는 것이 좋습니다.

Azure App Service의 로컬 캐시 기능은 콘텐츠의 웹 역할 보기를 제공합니다. 이 콘텐츠는 사이트 시작 시 비동기적으로 만들어지는 스토리지 콘텐츠의 쓰기 하지만 폐기 캐시입니다. 캐시가 준비되면 사이트가 캐시된 콘텐츠에 대해 실행되도록 전환됩니다.

로컬 캐시로 실행되는 앱은 다음과 같은 이점을 제공합니다.

  • Azure Storage의 콘텐츠 액세스와 관련된 대기 시간에 영향을 받지 않습니다.
  • 스토리지 연결과 관련된 문제는 읽기 전용 복사본이 로컬로 캐시되기 때문에 영향을 주지 않습니다.
  • 스토리지 공유의 변경으로 인한 앱 다시 시작이 줄어듭니다.

비고

로컬 캐시 기능은 함수 앱 또는 컨테이너화된 App Service 앱(예: Windows 컨테이너 또는 기본 제공 또는 사용자 지정 Linux 컨테이너)에서 지원되지 않습니다. 이러한 앱 유형에 사용할 수 있는 기능 버전은 앱 캐시입니다.

로컬 캐시 기능은 App Service의 F1 및 D1 가격 책정 계층에서도 지원되지 않습니다.

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

로컬 캐시를 구성하면 다음과 같은 변경이 발생합니다.

  • D:\home 이제 앱이 시작될 때 VM 인스턴스에 생성되는 로컬 캐시를 가리킵니다. D:\local 은 계속해서 임시 VM 관련 스토리지를 가리킵니다.

  • 로컬 캐시에는 공유 콘텐츠 저장소의 및 /site 폴더의 일회성 복사본 /siteextensions 이 포함되어 있습니다. 이러한 폴더는 각각 및 D:\home\site에 있습니다D:\home\siteextensions. 이러한 파일은 앱 시작 시 로컬 캐시에 복사됩니다.

    이 두 폴더의 크기는 기본적으로 1GB로 제한되지만 2GB까지 늘릴 수 있습니다. 캐시 크기가 증가하면 캐시를 로드하는 데 시간이 더 오래 걸립니다. 로컬 캐시 제한을 2GB로 늘리고 복사된 파일이 이 최대 크기를 초과하는 경우 App Service는 로컬 캐시를 자동으로 무시하고 원격 파일 공유에서 읽습니다.

    중요합니다

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

  • 로컬 캐시는 읽기/쓰기가 가능합니다. 그러나 앱이 VM 간에 이동하거나 다시 시작될 때 수정 사항은 삭제됩니다. 미션 크리티컬 데이터를 저장하는 데 로컬 캐시를 사용하지 마세요.

  • D:\home\LogFiles 로그 D:\home\Data 파일 및 앱 데이터를 포함합니다. 이러한 폴더는 VM 인스턴스에 로컬로 저장되며 공유 콘텐츠 저장소에 주기적으로 복사됩니다. 앱은 이러한 폴더에 기록하여 로그 파일 및 데이터를 유지할 수 있지만 복사 프로세스는 최선의 노력입니다. VM 인스턴스가 갑자기 응답을 중지하는 경우 로그 파일 및 데이터가 손실될 수 있습니다.

  • 최상의 복사는 로그 스트리밍에 영향을 줍니다. 스트리밍된 로그에서 최대 1분 지연을 관찰할 수 있습니다.

  • 공유 콘텐츠 저장소에서 로컬 캐시를 사용하는 앱의 폴더 구조 LogFilesData 변경 내용. 이제 고유 식별자와 타임스탬프로 구성된 이름을 가진 하위 폴더가 있습니다. 각 하위 폴더는 앱이 있거나 실행 중인 VM 인스턴스에 해당합니다.

  • D:\home 다른 폴더는 로컬 캐시에 남아 있으며 공유 콘텐츠 스토어에 복사되지 않습니다.

  • 지원되는 방법을 통한 앱 배포는 지속성 공유 콘텐츠 저장소에 직접 게시됩니다. 로컬 캐시의 및 D:\home\site 폴더를 새로 고치 D:\home\siteextensions 려면 앱을 다시 시작해야 합니다. 원활한 수명 주기에 대해서는 이 문서의 뒷부분에 있는 모범 사례에 대한 섹션을 참조하십시오.

  • SCM 사이트의 기본 콘텐츠 보기는 공유 콘텐츠 저장소를 계속 반영합니다.

비고

Java(Java SE, Tomcat 또는 JBoss EAP)를 사용하는 경우 기본적으로 Java 아티팩트(.jar, .war 및 .ear 파일)가 작업자에 로컬로 복사됩니다. Java 응용 프로그램이 추가 파일에 대한 읽기 전용 액세스에 의존하는 경우 해당 파일도 복사되도록 로 JAVA_COPY_ALL 설정합니다true. 로컬 캐시가 활성화된 경우 이 Java 특정 동작보다 우선합니다.

로컬 캐시를 사용하도록 설정하는 방법

로컬 캐시는 예약된 앱 설정의 조합을 사용하여 구성합니다. 다음 방법 중 하나를 사용하여 이러한 앱 설정을 지정할 수 있습니다.

Azure Portal을 사용하여 로컬 캐시 구성

웹 앱별로 로컬 캐시를 사용하도록 설정하려면 다음 앱 설정을 추가합니다. WEBSITE_LOCAL_CACHE_OPTION = Always

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입니다. 이 크기에는 Content Store에서 복사된 및 /site 폴더가 포함됩니다/siteextensions. 또한 로컬에서 생성된 로그 및 데이터 폴더도 포함됩니다.

이 한도를 늘리려면 앱 설정 WEBSITE_LOCAL_CACHE_SIZEINMB을 사용합니다. 앱당 최대 2GB(2,000MB)까지 크기를 늘릴 수 있습니다. 캐시 크기가 클수록 캐시를 로드하는 시간이 늘어납니다.

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

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

다음 프로세스는 로컬 캐시 사용에 대한 모범 사례를 나타냅니다.

  1. 값이 있는 고정 앱 설정을 WEBSITE_LOCAL_CACHE_OPTIONAlways 슬롯에 추가합니다. 를 사용하는 WEBSITE_LOCAL_CACHE_SIZEINMB경우 해당 설정을 프로덕션 슬롯에 대한 고정 설정으로 표시하십시오.

  2. 스테이징 슬롯을 만들고 게시합니다. 일반적으로 로컬 캐시를 사용하도록 스테이징 슬롯을 설정하지 않으며, 이는 원활한 빌드/배포/테스트 수명 주기를 가능하게 하는 동시에 프로덕션 슬롯에 로컬 캐시 이점을 제공하는 데 도움이 됩니다.

  3. 스테이징 슬롯에서 사이트를 테스트합니다.

  4. 준비가 되면 스테이징 슬롯과 프로덕션 슬롯 간에 스왑 작업을 수행합니다.

고정 설정은 슬롯에 연결되어 있습니다. 스테이징 슬롯이 프로덕션으로 교환되면 로컬 캐시의 앱 설정을 상속합니다. 새로 스왑된 프로덕션 슬롯은 몇 분 후에 로컬 캐시에 대해 실행되며 슬롯 워밍업 중에 워밍업됩니다. 스왑이 완료되면 프로덕션 슬롯이 로컬 캐시에 대해 실행됩니다.

자주 묻는 질문

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

복사된 파일이 로컬 캐시의 크기 제한을 초과하면 앱은 원격 공유에서 읽기로 되돌아갑니다. 다음 표에서는 세부 정보를 보여 줍니다.

로컬 캐시 크기 복사된 파일 결과
≤ 2GB 로컬 캐시 크기 ≤ 로컬 캐시에서 읽습니다.
≤ 2GB > 로컬 캐시 크기 원격 공유에서 읽습니다.

배포 및 스왑 작업이 오류와 함께 실패할 수 있습니다.

내 앱이 로컬 캐시의 이점을 누릴 수 있는지 어떻게 알 수 있나요?

로컬 캐시는 다음 모든 조건이 적용되는 경우 적합합니다.

  • 앱에는 고성능의 신뢰할 수 있는 콘텐츠 스토어가 필요합니다.
  • 앱은 런타임에 중요한 데이터를 쓰기 위해 콘텐츠 저장소를 사용하지 않습니다.
  • 총 크기는 2GB 미만입니다.

및 폴더의 총 크기를 /site 확인하려면 사이트 확장 /siteextensions 사용할 수 있습니다.

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

스테이징 환경에서 로컬 캐시를 사용하는 경우 로컬 캐시가 워밍업될 때까지 스왑 작업이 완료되지 않습니다. 사이트가 로컬 캐시에 대해 실행 중인지 확인하려면 작업자 프로세스 환경 변수를 WEBSITE_LOCALCACHE_READY확인하십시오. 여러 인스턴스에서 이 변수를 검사하려면 작업자 프로세스 환경 변수에 대한 Kudu 지침을 참조하세요.

내 앱에 새로 게시된 변경 내용이 반영되지 않는 이유는 무엇인가요?

앱에서 로컬 캐시를 사용하는 경우 사이트를 다시 시작하여 최신 변경 내용을 로드해야 합니다. 변경 내용을 프로덕션 사이트에 직접 게시하지 않으려면 모범 사례에 대한 이전 섹션에서 설명한 대로 배포 슬롯을 사용하는 것이 좋습니다.

비고

run from package 배포 옵션은 로컬 캐시 기능과 호환되지 않습니다.

내 로그는 어디에 있습니까?

로컬 캐시를 사용하는 경우 로그 및 데이터 폴더의 구조가 약간 변경됩니다. 이제 하위 폴더는 고유한 VM 식별자와 타임스탬프를 사용하여 이름이 지정된 폴더 아래에 중첩됩니다. 이러한 각 폴더는 앱이 있거나 실행 중인 VM 인스턴스에 해당합니다.

로컬 캐시를 사용하도록 설정된 상태에서 내 앱이 계속 다시 시작되는 이유는 무엇인가요?

로컬 캐시는 스토리지 관련 앱이 다시 시작되는 것을 방지하는 데 도움이 됩니다. 그러나 VM에서 계획된 인프라 업그레이드 중에 앱이 계속 시작될 수 있습니다. 전반적으로 로컬 캐시를 사용하도록 설정된 상태에서 다시 시작하는 횟수가 더 적어야 합니다.

로컬 캐시는 더 빠른 로컬 드라이브로 복사되는 디렉토리를 제외합니까?

복사 프로세스 중에 이름이 지정된 repository 모든 폴더가 제외됩니다. 이 동작은 사이트 콘텐츠에 일상적인 작업에 필요하지 않은 소스 제어 리포지토리가 포함된 시나리오에서 유용합니다.

사이트 관리 작업 후 로컬 캐시 로그를 플러시하려면 어떻게 해야 합니까?

로컬 캐시 로그를 플러시하려면 앱을 중지했다가 다시 시작합니다. 이 작업은 이전 캐시를 지웁니다.

로컬 캐시를 사용할 때 다시 시작한 후 App Service에 이전에 배포된 파일이 표시되는 이유는 무엇인가요?

다시 시작한 후 이전에 배포된 파일이 다시 나타나면 앱 설정이 WEBSITE_DISABLE_SCM_SEPARATION=true있는지 확인합니다. 이 설정을 추가하면 Kudu를 통한 배포가 영구 스토리지 대신 로컬 VM에 쓰게 됩니다. 이러한 상황을 방지하려면 앞에서 언급한 모범 사례를 따르고 로컬 캐시를 사용하도록 설정하지 않은 스테이징 슬롯에 배포를 수행합니다.