1. 필요한 패키지 설치
1 2 3 |
dotnet add package Microsoft.Extensions.Caching.Memory |
2. 메모리 캐시 사용하기
.NET Core에서 메모리 캐시를 사용하기 위해 IMemoryCache
인터페이스를 활용합니다. 이 인터페이스를 사용하려면 먼저 서비스 컨테이너에 등록해야 합니다. 이 작업은 주로 Startup.cs
파일의 ConfigureServices
메서드에서 이루어집니다.
1 2 3 4 5 6 7 |
public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache(); // 다른 서비스 구성 } |
3. 캐시에 데이터 저장 및 검색
캐시에 데이터를 저장하거나 검색하기 위해 IMemoryCache
인스턴스가 필요합니다. 이 인스턴스는 생성자 주입을 통해 얻을 수 있습니다.
다음은 간단한 컨트롤러 예시입니다. 여기서는 메모리 캐시를 사용하여 데이터를 저장하고 검색하는 방법을 보여줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; public class CacheSampleController : ControllerBase { private readonly IMemoryCache _memoryCache; public CacheSampleController(IMemoryCache memoryCache) { _memoryCache = memoryCache; } [HttpGet("get-from-cache")] public IActionResult GetFromCache() { // 캐시 키 string cacheKey = "my-sample-key"; // 캐시에서 데이터 검색 if (_memoryCache.TryGetValue(cacheKey, out string cachedData)) { return Ok(cachedData); } // 캐시에 데이터가 없는 경우, 데이터 생성 및 캐시에 저장 string newData = "This is my data to cache"; _memoryCache.Set(cacheKey, newData, TimeSpan.FromMinutes(5)); // 5분 동안 캐시 유지 return Ok(newData); } } |
CacheSampleController 클래스의 생성자에서 IMemoryCache 인터페이스를 주입받는 이유는 의존성 주입(Dependency Injection)을 통해 캐시를 관리하기 위함입니다.
의존성 주입은 클래스가 직접 필요한 객체를 생성하거나 관리하는 대신 외부에서 주입받아 사용할 수 있도록 하는 디자인 패턴입니다.
IMemoryCache 인터페이스는 ASP.NET Core에서 제공하는 메모리 기반 캐싱을 위한 인터페이스입니다.
이 인터페이스를 사용하면 캐시에 데이터를 저장하고 검색하는 기능을 손쉽게 구현할 수 있습니다.
생성자를 통해 IMemoryCache 인터페이스의 구현체를 주입받는 이유는 다음과 같습니다.
- 의존성 역전 원칙(Dependency Inversion Principle) 준수: 클래스가 직접 캐시를 생성하거나 관리하지 않고 외부에서 주입받아 사용함으로써 느슨한 결합을 유지할 수 있습니다.
이는 코드의 유연성과 테스트 용이성을 향상시킵니다. - 단일 책임 원칙(Single Responsibility Principle) 준수: CacheSampleController 클래스는 캐싱 로직에만 집중하고, 캐시 객체 자체를 생성하거나 관리하는 책임을 가지지 않습니다.
이는 클래스의 기능을 단순화하고 유지보수를 용이하게 합니다. - 테스트 용이성: 의존성 주입을 통해 캐시 객체를 주입받기 때문에 테스트에서 쉽게 모의(Mock) 객체를 주입하여 테스트할 수 있습니다. 이는 단위 테스트 작성을 용이하게 합니다.
- 재사용성: IMemoryCache 인터페이스를 주입받기 때문에 캐시 객체의 구체적인 구현에 종속되지 않습니다.
따라서 이 클래스는 다른 종류의 캐시 구현체로 쉽게 교체될 수 있습니다.
Dependency Injection”의 라틴어 어원은 다음과 같습니다:
“Dependency”는 “dependere”에서 유래되었으며, “의존”을 의미합니다.
“Injection”은 “injectio”에서 유래되었으며, “주입”을 의미합니다.
따라서 “Dependency Injection”은 “의존 주입”이라는 뜻입니다.