Offcanvas

개발자 / 검색|인터넷 / 애플리케이션

ASP 닷넷 코어에서 응답 캐싱 미들웨어를 활용하는 방법

2018.04.18 Joydip Kanjilal  |  InfoWorld
마이크로소프트의 ASP 닷넷 코어(Core)는 윈도우, 리눅스, 맥OS에서 구동하는 현대적인 고성능 웹 애플리케이션을 개발하는 인기 툴이다.



고성능을 지원하는 방법 중 하나는 당연히 캐싱(Caching)이다. ASP 닷넷 코어에는 내장 캐시(Cache) 객체가 없지만 인메모리 캐싱, 분산형 캐싱, 응답 캐싱 등 다양한 유형의 캐싱을 지원한다. 여기서는 응답 캐싱의 의미와 그 장점을 살펴보고 ASP 닷넷 코어에서 제공하는 응답 캐싱 미들웨어를 활용하는 방법을 알아보자.

응답 캐싱이란
응답 캐싱은 HTTP 응답 객체에서 캐시 관련 헤더를 이용해 웹 서버 응답을 캐시 처리하는 기능이다. 이런 헤더가 모든 요청 또는 선택된 몇 개 요청에 대한 응답을 캐시 처리하는 방법을 지정한다. 출력 캐싱과 달리 ASP 닷넷 코어의 응답 캐싱은 웹 서버의 메모리에서 응답을 캐시 처리하지 않는다.

ASP 닷넷 코어의 응답 캐싱은 실제로 확장 가능한 향상된 형태의 출력 캐싱이다. HTTP 응답에서 캐시 관련 헤더를 지정해 웹 브라우저에 콘텐츠를 캐시 처리하도록 알리는 데 사용된다. 이로 인해 후속 요청을 클라이언트의 캐시에서 제공할 수 있으므로 클라이언트가 웹 서버에 전송하는 요청의 수를 크게 줄이고 지연 속도도 단축할 수 있다. 응답 캐싱은 기본적으로 메모리를 사용해 데이터를 캐시 처리하지만 필요에 따라 사용자 정의 저장소를 구성해 사용할 수도 있다.

ASP 닷넷 코어에서 응답 캐싱 미들웨어를 활용하고 구성하는 방법은 다음과 같다. 먼저 비주얼 스튜디오(Visual Studio)에서 ASP 코어를 생성하자. ASP 닷넷 코어 2.0이 시스템에 설치돼 있다고 가정하고 다음 단계에 따라 비주얼 스튜디오 2017에서 ASP 닷넷 코어 애플리케이션을 생성할 수 있다.

1. 비주얼 스튜디오를 열고 파일(File) > 새로 만들기(New) > 프로젝트(Project)를 클릭한다.
2. 표시된 템플릿 목록에서 "ASP.Net 코어 웹 애플리케이션 (.Net Core)"을 선택한다.
3. 프로젝트의 이름을 지정한다.
4. OK를 클릭해 저장한다.
5. “새 .Net 코어 웹 애플리케이션” 창에서 “웹 API”를 선택한다.
6. “도커 지원 활성화(Enable Docker Support)”가 선택 취소됐는지 확인한다.
7. (여기서는 사용하지 인증을 사용하지 않으므로) “무인증(No Authentication)”을 선택한다.
8. OK를 클릭한다.

그러면 RESTful HTTP 서비스를 구축하고 실행하는 예시 컨트롤러와 함께 새 ASP 닷넷 코어 프로젝트가 생성된다. 다음 단계는 응답 캐싱 미들웨어를 사용하기 위해 필요한 패키지를 포함하는 것이다. 이를 위해 솔루션 익스플로러 창에서 프로젝트를 선택하고 누겟 패키지 매니저(NuGet Package Manager)를 통해 Microsoft.AspNetCore.ResponseCaching 패키지에 대한 참조를 추가한다.

이제 ASP 닷넷 코어에서 응답 캐싱 미들웨어를 구성해 보자. 아래 코드와 같이 ConfigureServices 방법에서 IServicesCollection에 미들웨어를 추가한다.

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
services.AddMvc();
}


요청 처리 파이프라인에 미들웨어를 추가하기 위해 다음 코드와 같이 UseResponseCaching 확장 방법을 활용할 수 있다.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//Other code
app.UseResponseCaching();
}


ASP 닷넷 코어의 응답 캐싱 미들웨어는 응답 캐싱의 메커니즘을 제어하는 3가지 옵션을 제공한다. 각 옵션은 다음과 같다.

1. SizeLimit: 응답 캐시의 최대 크기를 지정하는 데 사용한다. 기본 값은 100MB이다.
2. UseCaseSensitivePaths: 응답이 대소문자를 구별하는 경로에서 캐시 처리되는지 지정하기 위해 사용한다.
3. MaximumBodySize: 응답 본문의 캐시 처리 가능한 최대 크기를 지정하기 위해 사용한다. 기본 값은 64MB이다.

다음 코드에 ConfigureServices 방법에 있는 상기 옵션 중 하나 이상을 사용해 응답 캐싱을 제어할 수 있는 방법이 표시된다.

public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching(options =>
{
options.UseCaseSensitivePaths = true;
options.MaximumBodySize = 1024;
});
services.AddMvc();
}


닷넷 컨트롤러에서 ResponseCache 속성 사용하기
이제 미들웨어가 구성됐으니 컨트롤러 방법에서 'ResponseCache' 속성을 사용해 응답을 캐시 처리하기 위한 적절한 HTTP 헤더를 설정할 수 있다. 이 속성에 대한 파라미터는 다음과 같다.

Duration: 응답을 캐시 처리해야 하는 최대 지속 시간(초 단위)을 지정하기 위해 사용한다.
Location: 응답을 캐시 처리해야 하는 위치를 지정하는 데 사용한다. Any, Client, None 중 하나의 값을 가질 수 있다. 기본 위치 값은 Any다.
NoStore: 데이터를 저장해야 하는지 여부를 지정하기 위해 사용한다.
CacheProfileName: 캐시 프로필의 이름을 지정하는 데 사용한다.
VaryByHeader: Vary 응답 헤더를 지정하기 위해 사용한다.
VaryByQueryKeys: 어떤 응답을 캐시 처리해야 하는지에 따라 쿼리 문자열(Query String) 파라미터를 지정하는 데 사용한다.

다음 코드는 컨트롤러의 동작에서 ResponseCache 속성을 사용할 수 있는 방법이다.

[ResponseCache(Duration = 30)]
public IActionResult HomePage()
{
ViewData["Message"] = "The current time is:" + DateTime.Now.ToString();
return View();
}


이제 애플리케이션을 실행하면 표시된 시스템의 현재 DateTime을 볼 수 있다. 응답은 ResponseCache 속성에 지정된 대로 30초 동안 캐시 처리된다. 응답 캐싱 미들웨어는 HTTP 상태(Status) 코드 200이 있는 서버 응답만을 캐시 처리한다. 오류와 오류 페이지를 포함한 기타 응답은 무시된다. ASP.Net 코어의 응답 캐싱 미들웨어에 관한 자세한 내용은 MSDN 웹사이트를 참조하면 된다. ciokr@idg.co.kr 
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
Sponsored
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.