반응형
출력 캐싱은 .NET 7부터 도입된 새로운 기능입니다. 이를 통해 자체 IMemoryCache 구현 을 만드는 번거로움 없이 웹 API에 대한 응답 캐시를 쉽게 설정할 수 있습니다 .
이 문서에서는 ASP .NET Core Web API 프로젝트에서 출력 캐싱을 구현하는 방법을 설명합니다.
구성
먼저 Program.cs 파일 의 서비스 컨테이너에 OutputCache를 추가해야 합니다 .
builder.Services.AddOutputCache();
다음으로 OutputCache 미들웨어도 추가해야 합니다 .
app.UseOutputCache();
전체 Program.cs 파일은 다음과 같습니다.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOutputCache();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseOutputCache();
app.MapControllers();
app.Run();
구현
출력 캐싱을 활성화하려면 다음 속성으로 작업 메서드를 장식할 수 있습니다 [OutputCache].
[HttpGet]HttpGet ]
[ OutputCache ]
public async Task<IActionResult> Get ( CancellationToken ct )
{
// ...
}
기본적으로 캐시 기간은 60초입니다. 캐시 기간을 사용자 정의하기 위해 Duration 속성을 설정할 수 있습니다.
[HttpGet]HttpGet ]
[ OutputCache(Duration = 10) ] // 캐시 기간 10초
public async Task<IActionResult> Get ( CancellationToken ct )
{
// ...
}
위의 코드는 캐시 기간을 10초로 설정합니다.
10초 이내에 엔드포인트에 다시 도달하면 로직을 다시 실행하는 대신 캐시된 응답을 가져옵니다.
맞춤화
기본 만료 시간
DefaultExpirationTimeSpan 속성을 설정하여 기본 캐시 만료 시간을 사용자 정의할 수 있습니다 .
builder.Services.AddOutputCache(opt =>서비스 . AddOutputCache ( opt =>
{
opt. DefaultExpirationTimeSpan = TimeSpan . FromSeconds ( 30 );
});
정책
출력 캐싱을 사용자 지정하는 정책을 만들 수도 있습니다. 예를 들어, 마스터 데이터 엔드포인트에 대한 캐싱을 10초로 설정하고 보고서 엔드포인트에 대한 캐싱을 60초로 설정하려고 합니다 .
builder.Services.AddOutputCache(opt =>
{
opt.DefaultExpirationTimeSpan = TimeSpan.FromSeconds(30);30 );
opt.AddPolicy( "MasterData" , builder => builder.Expire(TimeSpan.FromSeconds( 10 )));
opt.AddPolicy( "보고서" , builder => builder.Expire(TimeSpan.FromSeconds( 60 )));
});
정책을 사용하려면 OutputCache 속성 에서 PolicyName 속성을 설정하면 됩니다 .
[HttpGet]HttpGet ]
[ OutputCache(PolicyName = "Reports" ) ]
public async Task<IActionResult> Get ( int year, int Month, CancellationToken ct )
{
// ...
}
[ HttpGet ]
[ OutputCache(PolicyName = "MasterData" ) ]
public async Task<IActionResult> Get ( CancellationToken ct )
{
// ...
}
반응형