Back/Node.js

[Nestjs, ElasticCache] Cluster, TypeError

여튼 이런저런 졀차로 여린백셩을 홀뺴히여겨

 

평소처럼 ElasticCache를 사용하려 했따.

 

매우 비싸지만 괜찮다. (진짜 짱비쌈)

 

적당히 활용하면, RDS 1개 추가하는 것보단 나은 효율을 보이니,

속도와 비용 모두 적절히 잡을 수 있기 때문이시다.


EC2에 왜 redis를 안까냐면..

 

둘다 해보았지만..

한달에 2~5만원 더 내는 것이,

1. 인건비 리소스도 아끼고(비용),

(** 항상 본인의 인건비도 리소스로 생각하는 훌륭한 개발자 될지어다 **)

2. 작업 리소스도(시간) 아끼고,

3. 확장성 있게 가고,

4. 여러 관리가 용이하다.

이런 이유로 유용하기 떄문일지어다.

Nestjs 공식문서에도 뭐 많을텐데

만약 당신이

이 글을 보고 있다면 이걸 봤겠지

 

"message": "Type 'typeof import(\"cache-test/node_modules/cache-manager-redis-store/dist/index\")' is not assignable to type '(string | CacheStoreFactory | CacheStore) & typeof import(\"/Users/kk/dev/nodejs/cache-test/node_modules/cache-manager-redis-store/dist/index\")'.\n  ...

하하 알고 있어 ㅋ

왜 이런 일이 생겼냐면

nest/core의 버전이 맞지 않아서 생기는 문제다.

(nest 이슈에 가보면 꽤 빈번하게 일어나고 있다^^...)

하지만 nest/core를 낮추거나 올리면, 다른 라이브러리에서 충돌이 생겼겠지.

그래서 하나하나 다 바꿔주다보면 갑자기 또 메소드 바뀌고,... 타입 바뀌고 난리가 되면서

주먹에 힘이 들어가고 막 그렇겠지? (내 이야기)

하하하하하하하하

본론

 

아마 공식문서를 봤다면

redis-store를 cache-manager에서 import했을 텐데

 

import * as redisStore from 'cache-manager-ioredis';

이렇게 바꿔주어라, 그럼 만사가 형통할 것이다.


모듈타고 뜯어보면 타입이 문제없는건 알게 될 지어다. (예전에도 ioredis로 직접 연결해서, 캐시클라를 사용했는데, 아주 좋구나)

사용하는 모듈에 임포트하여라

CacheModule.registerAsync({
useFactory: async () => ({
store: redisStore,
clusterConfig: cacheCustomOption.clusterConfig,
ttl: cacheCustomOption.ttl['900'],
}),
}),

 

속성 예시는 이렇다

 

컨피그에 있는 노드들은 들었다놨다 들었다놨다 들었다놨따~~할려면 나중에 모듈로 관리하면 될지어다.

const clusterConfig = {
  nodes: [
    {
      host: 'ㅁache.amazonaws.com',
      port: 63232379,
    },
    {
      host: 'roasd.o8eq1w.0001.apn2.cache.amazonaws.com',
      port: 632379,
    },
    {
      host: 'roasdasdpn2.cache.amazonaws.com',
      port: 631279,
    },
    {
      host: 'rasdasd2.cache.amazonaws.com',
      port: 623379,
    },
  ],
};

const ttl = {
  900: 900,
};

 

잘된다.

 

좋아써어