프로젝트를 하다가 정보를 띄워주는 페이지에서 속도가 느려지는 현상이 있었다.
그 현상을 해결하기 위해서 캐시를 공부하고 사용해보았기에 그 내용을 포스팅하려한다.
캐시(cache)
캐시란 컴퓨터 내부의 임시 저장공간이라고 할 수 있다.
인터넷에서 사이트에 방문했을 때 다운로드한 파일들이 캐시에 저장되는데 캐시를 사용하면 다음에 같은 사이트를 방문할 때 시스템이 모든 정보를 다시 로드하지 않아도 된다. 데이터를 미리 복사해 놓았기 때문에 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있어 브라우저가 사이트를 더 빠르게 로드할 수 있다.
캐시에 원하는 데이터가 존재할 경우 해당 데이터를 반환하며 이 상황을 Cache Hit라고 하며 원하는 데이터가 캐시에 존재하지 않을 경우에는 DBMS 또는 서버에 요청을 해야하는데 이를 Cache Miss라고 한다.
캐시는 저장공간이 작기 때문에 사용할 때 신중해야한다.
따라서 사람들이 많이 요청하면서도 데이터의 변화가 적은 부분을 캐시로 처리하는게 좋다.
NestJS에서의 캐시 사용
프로젝트에서 술의 정보나 칵테일 정보를 띄워주는 페이지가 있는데 데이터베이스의 변화는 그리 잦지 않다.(관리자가 데이터를 추가 할 때에만 바뀐다.) 또 웹의 주 목적이 사용자에게 술 정보와 칵테일 정보 및 레시피를 알려주는 것이기 때문에 캐시로 처리하면 훨씬 효울성이 증가할 거라고 판단하고 캐시로 처리를 해보았다.
먼저 node-cache 라이브러리를 npm을 통해서 설치해준다.
캐시를 적용하고 싶은 router가 있는 controller에 선언하고 cache를 NodeCache로 초기화한다.
캐시 키를 미리 선언해놓고 해당 키를 기준으로 캐시에 있는 정보를 확인한다. 만약 캐시에 data가 있다면 data가 적용되고 없으면 undefined가 된다. 만약 캐시가 undefined인 경우 service에서 함수를 호출하여 새로 데이터를 불러오고 키와 만료시간과 함께 캐시에 저장한다. 따라서 다음 요청이 올 때에는 데이터베이스에 다녀오지 않고도 캐시에 있는 데이터를 통해 더 빠르게 응답할 수 있다.
테스트
캐시를 적용하고 난 뒤 Talend API Tester로 얼마나 빠른지 확인을 해 보았다.
캐시 적용이 되어있지 않을 때엔 40ms가 걸렸는데 캐시적용이 되면 10ms로 응답속도가 향상되었다.
추가)
최근 회사에서 백만건이 넘는 데이터를 모니터링하는 웹을 개발을 했다. 데이터가 많다보니 응답시간이 상당히 오래 걸렸는데 캐시 처리를 하니까 780ms에서 10ms 이하로 응답속도를 향상시킬 수 있었다. 해당 프로젝트에 관해서는 추후 포스팅할 예정이다
'backend > NestJS' 카테고리의 다른 글
[NestJS] VSCode nest cli 명령어 오류 (0) | 2023.03.10 |
---|---|
[NestJS] .env를 사용해서 MySQL 연동하기 (0) | 2023.03.09 |
[TypeORM] insert와 save (0) | 2023.01.31 |
[NestJS]NestJS에서 Transaction(트랜잭션) 활용 (0) | 2023.01.27 |
[NestJS] NestJS란? (0) | 2023.01.16 |