본문 바로가기
개발/프로젝트-식당 웨이팅 앱 FOOD LINE

230609 실전프로젝트10 [Node.js/Nest.js_redis 적용하기2]

by 코딩하는짱구 2023. 6. 9.
반응형

✅오늘학습 Keyword

2023.06.05 - [프로젝트] - 230607 실전프로젝트8 [Node.js/Nest.js_redis 적용하기]

 

230607 실전프로젝트8 [Node.js/Nest.js_redis 적용하기]

✅오늘학습 Keyword 2023.06.05 - [개념정리, 유용한팁] - Redis란 무엇인가? 윈도우에서 Redis 설치하기 Redis란 무엇인가? 윈도우에서 Redis 설치하기 ✅Redis를 써보고자 한 이유 2023.06.05 - [분류 전체보기] -

veritas-crystal.tistory.com

레디스를 어떻게 연동시켜야하는지까지 방법을 파악했고 db가 정상적으로 저장되는지 확인해야한다.

✅오늘 겪은 문제

1. import 할 CacheModule, CACHE_MANAGER가 version에 따라 다른 library에서 다른 이름으로 추출된다.

version에 맞게 수정해줬더니 해결되었다.

 

수정 전

 

수정 후 

 

2. db연결 문제.. 

redis-cli로 monitor하여 살펴보면 연결은 제대로 되고 있는데, 여전히 db가 실제로 저장되진 않는다. 

정말 많은 시도를 해봤지만 이 문제는 계속 해결하지 못하고있다 ..

모듈에서 redis 연결 부분에 useFactory를 빼보기도, 넣어보기도 하고 registerAsync로 했다가 지워보기도 하고 구글링해서 찾아본 모든 방법을 총 동원했으나 연결이 되지않고있다. cache-manager, cache-manager-redis-store 의 버전도 낮춰봤지만 안된다.

 

monitor를 켜놓고 애플리케이션에서 db를 지정해줬더니 아래와 같이 출력됐다.

확실히 연결은 되어 있는 것 같다!

 

 

✅오늘 알게된 점 및 추후 학습 계획

우선 redis 연결문제는 나 혼자서 도저히 해결이 안될 것 같단 생각이 들어서 팀원들과 본격적으로 논의해보고 찾아보기로 했다. 대체 왜 연결이 안될까 .. . 하지만 한편으론 이런 에러들을 겪으면서 redis 연결에 대해 좀 더 자세히 파악하게 된 것 같아서 좋다~~

 

1. nest.js에서 redis 연동과정

https://docs.nestjs.com/techniques/caching

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea

docs.nestjs.com

 

 

https://dev-scratch.tistory.com/136#--%--%EC%BA%--%EC%-B%-C%--%EB%A-%A-%EB%-B%--%EC%A-%---Cache%--Manager-

 

레디스를 애플리케이션에 통합하기 위해서, cache-manager-redis-store라는 패키지를 설치한다.

# npm i cache-manager-redis-store

 

레디스의 store를 지정해줌 (저장소의 호스트, 포트)

redisStore  from 'cache-manager-redis-store

 

Redis

  • 데이터의 원래 소스보다 더 빠르게 액세스할 수 있는 임시 데이터 저장소
  • 주로 변하지 않는 데이터, 반복적으로 액세스하는 같은 데이터를 캐시에 저장
  • 단순한 key-value 구조
  • In-memory 데이터 저장소
    • 서버 재시작 시 모든 데이터 유실
    • 복제 기능을 사용해도 실수 발생 시 데이터 복원 불가💀
    • Redis를 캐시 이외의 용도로 사용한다면 적절한 데이터 백업이 필요
  • 데이터를 영구 저장하는 방법
    • RDB
      • 바이너리 파일 형태로 저장된다.
      • 저장 당시 메모리에 있는 데이터 그대로를 사진 찍듯이 snapshot 방식으로 저장
      • 자동 👉 redis.conf 파일에서 SAVE 옵션(시간 기준)
      • 수동 👉 BGSAVE 커맨드를 이용해 cli 창에서 수동으로 RDB 파일 저장
        • SAVE 커맨드는 절대 사용 ❌
    • AOF(Append Only File)
      • 모든 명령어를 다 저장
      • Redis 프로토콜 형태로 저장된다.
      • 자동 👉 redis.conf 파일에서 auto-aof-rewrite-percentage 옵션(크기 기준)
      • 수동 👉 BGREWRITEAOF 커맨드를 이용해 CLI 창에서 수동으로 AOF 파일 재작성

https://pika-chu.tistory.com/1554

 

2. nest.js에서 Dto와 entity의 차이는?

DTO-데이터의 전송과 관련된 로직을 캡슐화하기 위해 사용된다. 주로 클라이언트와 서버간의 데이터교환에 사용되며, API 요청 및 응답에 대한 데이터를 정의하고 유효성 검사등의 데이터 변환 등을 처리한다. 

 

ENTITY-데이터베이스의 테이블이나 컬렉션과 관련된 모델을 나타낸다. 주로 데이터의 영구 저장 및 검색을 위해 사용된다.

 

즉 서로 다른 역할을 하는 것이며, 데이터의 전송과 관련된 로직은 DTO에, 데이터베이스와의 상호작용은 ENTITY에 집중된다.

 

 

반응형