cacheKey
캐시 시스템에서 특정 데이터를 식별하기 위해 사용되는 고유한 키로, 이를 통해 캐시에서 데이터를 검색하고 조회할 수 있다.
cacheData
cacheKey를 통해 캐시에서 조회한 실제 데이터를 의미한다. 이 데이터는 로그인 상태나 인증 정보 등 다양한 정보를 포함할 수 있다.
유효 기간 (TTL, Time-To-Live) 설정
캐시된 데이터에는 유효 기간(TTL, Time-To-Live)이 설정된다. 이 시간 동안 캐시된 데이터는 유효하게 사용될 수 있다. TTL이 만료되면, 해당 데이터는 자동으로 만료되고 더 이상 유효하지 않게 된다. 만료된 데이터는 캐시에서 undefined로 반환되어 사용할 수 없게 된다.
유효성 검사 절차
데이터를 캐시에서 조회할 때, cacheKey로 해당 데이터를 요청한다.
만약 cacheData가 undefined이면,
1) 캐시된 데이터가 존재하지 않음
2) 캐시된 데이터가 만료됨
이 경우, 캐시에서 데이터를 다시 계산하거나 데이터베이스에서 다시 조회하는 등의 처리가 필요하다.
유효성 검사 예시
캐시된 데이터가 유효한지 확인하려면 cacheData를 조회한 후 undefined인지 체크해야 한다.
ex) 캐시가 만료되었다면 새로운 데이터를 가져와야 할 수 있다.
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { CacheManagerService } from './cache-manager.service'; // 가상의 캐시 관리 서비스
@Injectable()
export class TelegramAuthService {
constructor(private readonly cacheManager: CacheManagerService) {}
// 로그인 요청 검증
async validateLogin(loginUniqueID: string) {
const cacheKey = `telegram-login-${loginUniqueID}`; // cacheKey 생성
const cacheData = await this.cacheManager.get(cacheKey); // 캐시에서 데이터 조회
if (!cacheData) {
throw new UnauthorizedException('Invalid login request'); // 캐시 데이터 없으면 예외 발생
}
return cacheData; // 로그인 유효성 검증 성공 시 데이터 반환
}
}
CacheManagerService
캐시 데이터를 관리하는 서비스로, get(), set(), del() 등의 메서드를 통해 데이터를 조회하고 저장한다.
import { Injectable } from '@nestjs/common';
import { Cache } from 'cache-manager'; // CacheManager 사용
@Injectable()
export class CacheManagerService {
private cache: Cache;
constructor() {
// 메모리 캐시 사용 (TTL: 300초 = 5분)
this.cache = require('cache-manager').caching({ store: 'memory', ttl: 300 });
}
// cacheKey로 데이터를 가져오는 메서드
async get(cacheKey: string): Promise<any> {
return await this.cache.get(cacheKey);
}
// cacheKey로 데이터를 저장하는 메서드
async set(cacheKey: string, value: any, ttl: number = 300): Promise<void> {
await this.cache.set(cacheKey, value, { ttl });
}
// 캐시에서 데이터를 삭제하는 메서드
async del(cacheKey: string): Promise<void> {
await this.cache.del(cacheKey);
}
}