1. 🚨 문제 상황: ClientClosedError: The client is closed
- Redis를 사용하여 Key값을 가져오는 중에 아래의 코드와 관련하여 에러가 발생했다.
const getAsync = util.promisify(client.get).bind(client);
- 접근(1): 로컬에 설치된 Redis와 node.js에 설치된 Redis의 버전 호환성 문제를 살펴봤다. → 자세히 보기위해선 console.log를 찍어봐야 알 수 있다. 결과적으론 얘가 정답인데, 왜 그런지는 아래에서 살펴보자.
- 접근(2): Redis를 연결하는 중에 Error가 발생한 것이라면 구체적으로 log를 확인하는 작업이 필요했다.
- 따라서, Redis 클라이언트의 에러 리스너는 클라이언트 인스턴스 생성 직후에 바로 등록하는 것이 일반적이기 때문에 아래와 같이 코드를 추가했다.
const redis = require('redis');
const client = redis.createClient();
client.on('error', function(err) {
logger.error('Redis Client Error', err);
});
const util = require('util');
- 실행 결과는 아래와 같다.
return Promise.reject(new errors_1.ClientClosedError());
^
ClientClosedError: The client is closed...(생략)
2. ☑️ 에러 원인: Redis 클라이언트가 명령을 보내려고 시도할 때, 그 클라이언트 인스턴스가 이미 닫혀 있기 때문이다.
3. 🪄 문제 해결: Redis버전을 3.1.2로 낮춰 호환성을 맞추는 것.
- v3은 Redis가 클라이언트와 자동으로 연결해주지만, v4는 Connect를 설정해주어야 한다.
- 따라서, 로컬 window버전으로 가장 최신 redis는 v3이기 때문에 node에서의 환경을 v3으로 맞추면 클라이언트와, Redis 서버가 자동으로 연결된다.
- result: 성공!