[Node.JS]Troubleshooting issue: ClientClosedError: The client is closed

박두팔이·2024년 3월 29일
0

Node.JS

목록 보기
17/20

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(); // Redis 클라이언트 설정
      
      // Redis 클라이언트 에러 리스너 등록
      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: 성공!
profile
기억을 위한 기록 :>

0개의 댓글