ASP.NET Core 8.0의 출력 캐싱을 통한 성능 향상

반응형

출력 캐싱은 .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 )
 { 
    // ...
 }
 

 

전체 소스 - https://github.com/juldhais/OutputCachingExample

반응형