ASP.NET Core MVC의 캐시 태그 도우미Cache Tag Helper in ASP.NET Core MVC

작성자: Peter KellnerBy Peter Kellner

캐시 태그 도우미는 콘텐츠를 내부 ASP.NET Core 캐시 공급자에 캐시하여 ASP.NET Core 앱 성능을 획기적으로 개선하는 기능을 제공합니다.The Cache Tag Helper provides the ability to dramatically improve the performance of your ASP.NET Core app by caching its content to the internal ASP.NET Core cache provider.

Razor 보기 엔진은 기본 expires-after를 20분으로 설정합니다.The Razor View Engine sets the default expires-after to twenty minutes.

다음 Razor 태그는 날짜/시간을 캐시합니다.The following Razor markup caches the date/time:

<cache>@DateTime.Now</cache>

CacheTagHelper를 포함하는 페이지에 대한 첫 번째 요청은 현재 날짜/시간을 표시합니다.The first request to the page that contains CacheTagHelper will display the current date/time. 추가 요청은 캐시가 만료될 때까지(기본값 20분) 또는 메모리 압력에 의해 제거될 때까지 캐시된 값을 표시합니다.Additional requests will show the cached value until the cache expires (default 20 minutes) or is evicted by memory pressure.

다음 특성을 사용하여 캐시 기간을 설정할 수 있습니다.You can set the cache duration with the following attributes:

캐시 태그 도우미 특성Cache Tag Helper Attributes


사용enabled

특성 유형Attribute Type 유효한 값Valid Values
booleanboolean "true"(기본값)"true" (default)
"false""false"

캐시 태그 도우미로 묶인 콘텐츠가 캐시되었는지 확인합니다.Determines whether the content enclosed by the Cache Tag Helper is cached. 기본값은 true입니다.The default is true. false로 설정되면 이 캐시 태그 도우미는 렌더링된 출력에 캐싱 효과를 적용하지 않습니다.If set to false this Cache Tag Helper will have no caching effect on the rendered output.

예제:Example:

<cache enabled="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-onexpires-on

특성 유형Attribute Type 예제 값Example Value
DateTimeOffsetDateTimeOffset "@new DateTime(2025,1,29,17,02,0)""@new DateTime(2025,1,29,17,02,0)"

절대 만료 날짜를 설정합니다.Sets an absolute expiration date. 다음 예제는 2025년 1월 29일 오후 5시 2분이 될 때까지 캐시 태그 도우미의 콘텐츠를 캐시합니다.The following example will cache the contents of the Cache Tag Helper until 5:02 PM on January 29, 2025.

예제:Example:

<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-afterexpires-after

특성 유형Attribute Type 예제 값Example Value
TimeSpanTimeSpan "@TimeSpan.FromSeconds(120)""@TimeSpan.FromSeconds(120)"

콘텐츠를 캐시할 첫 번째 요청 시간부터 시간 길이를 설정합니다.Sets the length of time from the first request time to cache the contents.

예제:Example:

<cache expires-after="@TimeSpan.FromSeconds(120)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-slidingexpires-sliding

특성 유형Attribute Type 예제 값Example Value
TimeSpanTimeSpan "@TimeSpan.FromSeconds(60)""@TimeSpan.FromSeconds(60)"

캐시 항목이 액세스되지 않는 경우 캐시 항목을 제거해야 하는 시간을 설정합니다.Sets the time that a cache entry should be evicted if it has not been accessed.

예제:Example:

<cache expires-sliding="@TimeSpan.FromSeconds(60)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-headervary-by-header

특성 유형Attribute Type 예제 값Example Values
문자열String "User-Agent""User-Agent"
"User-Agent,content-encoding""User-Agent,content-encoding"

값이 변경되면 캐시 새로 고침을 트리거하는 단일 헤더 값 또는 쉼표로 구분된 헤더 값 목록을 허용합니다.Accepts a single header value or a comma-separated list of header values that trigger a cache refresh when they change. 다음 예제에서는 헤더 값 User-Agent를 모니터링합니다.The following example monitors the header value User-Agent. 이 예제는 웹 서버에 제공된 모든 User-Agent에 대한 콘텐츠를 캐시합니다.The example will cache the content for every different User-Agent presented to the web server.

예제:Example:

<cache vary-by-header="User-Agent">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-queryvary-by-query

특성 유형Attribute Type 예제 값Example Values
문자열String "Make""Make"
"Make,Model""Make,Model"

헤더 값이 변경되면 캐시 새로 고침을 트리거하는 단일 헤더 값 또는 쉼표로 구분된 헤더 값 목록을 허용합니다.Accepts a single header value or a comma-separated list of header values that trigger a cache refresh when the header value changes. 다음 예제에서는 MakeModel 값을 살펴봅니다.The following example looks at the values of Make and Model.

예제:Example:

<cache vary-by-query="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-routevary-by-route

특성 유형Attribute Type 예제 값Example Values
문자열String "Make""Make"
"Make,Model""Make,Model"

경로 데이터 매개 변수 값이 변경되면 캐시 새로 고침을 트리거하는 단일 헤더 값 또는 쉼표로 구분된 헤더 값 목록을 허용합니다.Accepts a single header value or a comma-separated list of header values that trigger a cache refresh when the route data parameter value(s) change. 예제:Example:

Startup.csStartup.cs

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");

Index.cshtmlIndex.cshtml

<cache vary-by-route="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

특성 유형Attribute Type 예제 값Example Values
문자열String ".AspNetCore.Identity.Application"".AspNetCore.Identity.Application"
".AspNetCore.Identity.Application,HairColor"".AspNetCore.Identity.Application,HairColor"

헤더 값이 변경되면 캐시 새로 고침을 트리거하는 단일 헤더 값 또는 쉼표로 구분된 헤더 값 목록을 허용합니다.Accepts a single header value or a comma-separated list of header values that trigger a cache refresh when the header values(s) change. 다음 예제에서는 ASP.NET Core ID와 연결된 쿠키를 살펴봅니다.The following example looks at the cookie associated with ASP.NET Core Identity. 사용자가 인증되면 캐시 새로 고침을 트리거하는 요청 쿠키를 설정해야 합니다.When a user is authenticated the request cookie to be set which triggers a cache refresh.

예제:Example:

<cache vary-by-cookie=".AspNetCore.Identity.Application">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-uservary-by-user

특성 유형Attribute Type 예제 값Example Values
부울Boolean "true""true"
"false"(기본값)"false" (default)

로그인한 사용자(또는 컨텍스트 보안 주체)가 변경되면 캐시를 다시 설정해야 하는지 여부를 지정합니다.Specifies whether or not the cache should reset when the logged-in user (or Context Principal) changes. 현재 사용자를 요청 컨텍스트 보안 주체라고도 하며 @User.Identity.Name을 참조하여 Razor 보기에서 볼 수 있습니다.The current user is also known as the Request Context Principal and can be viewed in a Razor view by referencing @User.Identity.Name.

다음 예제는 현재 로그인한 사용자를 살펴봅니다.The following example looks at the current logged in user.

예제:Example:

<cache vary-by-user="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

이 특성을 사용하면 로그인 및 로그아웃 주기 동안 콘텐츠가 캐시에 유지됩니다.Using this attribute maintains the contents in cache through a log-in and log-out cycle. vary-by-user="true"를 사용하면 로그인 및 로그아웃 작업에서 인증된 사용자에 대한 캐시를 무효화합니다.When using vary-by-user="true", a log-in and log-out action invalidates the cache for the authenticated user. 로그인 시 새로운 고유 쿠키 값이 생성되므로 캐시가 무효화됩니다.The cache is invalidated because a new unique cookie value is generated on login. 쿠키가 없거나 만료된 경우 캐시는 익명 상태로 유지됩니다.Cache is maintained for the anonymous state when no cookie is present or has expired. 즉, 로그인한 사용자가 없으면 캐시가 유지됩니다.This means if no user is logged in, the cache will be maintained.


vary-byvary-by

특성 유형Attribute Type 예제 값Example Values
문자열String "@Model""@Model"

캐시되는 데이터의 사용자 지정을 허용합니다.Allows for customization of what data gets cached. 특성의 문자열 값에서 참조하는 개체가 변경되면 캐시 태그 도우미의 콘텐츠가 업데이트됩니다.When the object referenced by the attribute's string value changes, the content of the Cache Tag Helper is updated. 종종 모델 값의 문자열 연결이 이 특성에 할당됩니다.Often a string-concatenation of model values are assigned to this attribute. 연결된 값을 업데이트하면 캐시가 무효화된다는 의미입니다.Effectively, that means an update to any of the concatenated values invalidates the cache.

다음 예제에서는 보기를 렌더링하는 컨트롤러 메서드가 두 경로 매개 변수 myParam1myParam2의 정수 값을 합산하고, 그 값을 단일 모델 속성으로 반환합니다.The following example assumes the controller method rendering the view sums the integer value of the two route parameters, myParam1 and myParam2, and returns that as the single model property. 이 합계가 변경되면 캐시 태그 도우미의 콘텐츠가 다시 렌더링 및 캐시됩니다.When this sum changes, the content of the Cache Tag Helper is rendered and cached again.

예제:Example:

작업:Action:

public IActionResult Index(string myParam1,string myParam2,string myParam3)
{
    int num1;
    int num2;
    int.TryParse(myParam1, out num1);
    int.TryParse(myParam2, out num2);
    return View(viewName, num1 + num2);
}

Index.cshtmlIndex.cshtml

<cache vary-by="@Model"">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

prioritypriority

특성 유형Attribute Type 예제 값Example Values
CacheItemPriorityCacheItemPriority "High""High"
"Low""Low"
"NeverRemove""NeverRemove"
"Normal""Normal"

기본 제공 캐시 공급자에게 캐시 제거 지침을 제공합니다.Provides cache eviction guidance to the built-in cache provider. 웹 서버는 메모리가 부족할 경우 가장 먼저 Low 캐시 항목을 제거합니다.The web server will evict Low cache entries first when it's under memory pressure.

예제:Example:

<cache priority="High">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

priority 특성은 특정 수준의 캐시 보존을 보장하지 않습니다.The priority attribute doesn't guarantee a specific level of cache retention. CacheItemPriority는 권장 사항일 뿐입니다.CacheItemPriority is only a suggestion. 이 특성을 NeverRemove로 설정해도 캐시가 항상 보존된다는 보장은 없습니다.Setting this attribute to NeverRemove doesn't guarantee that the cache will always be retained. 자세한 내용은 추가 리소스를 참조하세요.See Additional Resources for more information.

캐시 태그 도우미는 메모리 캐시 서비스에 따라 달라집니다.The Cache Tag Helper is dependent on the memory cache service. 서비스가 추가되지 않은 경우 캐시 태그 도우미가 서비스를 추가합니다.The Cache Tag Helper adds the service if it has not been added.

추가 자료Additional resources