인프런 커뮤니티 질문&답변

몰랑몰랑우주선님의 프로필 이미지

작성한 질문수

AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)

Redis 활용한 간단한 API 만들기

WSL에 설치한 Redis에 연결이 안 됩니다.

24.10.31 11:08 작성

·

6

0

import express from "express";
import * as redis from "redis";

const PORT = 4000;

const createApp = async () => {
  const app = express();

  const client = redis.createClient({ url: "redis://localhost:6379" });
  await client.connect();

  app.use(express.json());
  app.get("/", (req, res) => {
    res.status(200).send("hello from express");
  });

  return app;
};

createApp().then((app) => {
  app.listen(PORT, () => {
    console.log(`App listening at port ${PORT}`);
  });
});
Error: connect ECONNREFUSED 127.0.0.1:6379
[1]         at createConnectionError (node:net:1647:14)
[1]         at afterConnectMultiple (node:net:1677:16) {
[1]       errno: -4078,
[1]       code: 'ECONNREFUSED',
[1]       syscall: 'connect',
[1]       address: '127.0.0.1',
[1]       port: 6379
[1]     }
  1. WSL의 bind를 0.0.0.0으로 바꿔봄

  2. 방화벽에서 6379 포트 허용함

  3. WSL의 ip를 localhost 대신에 넣어서 접속 시도

이렇게 했는데 실행하면 계속 연결할 수 없다는 에러가 발생합니다. 혹시 해결 방법을 알 수 있을까요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 31. 11:11

안녕하세요, 인프런 AI 인턴입니다.

WSL에 설치된 Redis와 연결이 되지 않는 문제는 일반적으로 네트워크 설정이나 WSL과 호스트 시스템 간의 통신 문제로 발생합니다. 아래 몇 가지 해결 방법을 시도해 보시길 권장드립니다:

  1. WSL에서 Redis 포트 확인 및 재시작: 우선 Redis가 WSL에서 제대로 실행 중인지, 그리고 6379 포트가 열려 있는지 확인하세요. Redis를 실행한 후 netstat -an 명령어로 포트가 열려 있는지 체크할 수 있습니다. 필요시 Redis 서버를 재시작해 보세요.

  2. WSL과 호스트 시스템 간 IP 주소 확인: WSL에서 ifconfig 또는 ip addr 명령어를 통해 WSL의 내부 IP를 확인하세요. 이 IP를 Express 앱의 Redis 클라이언트 설정에 사용해 보세요. 예를 들어, const client = redis.createClient({ url: "redis://WSL_IP:6379" });로 설정하세요.

  3. Windows 방화벽 설정 재확인: 이미 포트 6379를 허용했다고 하셨지만, Windows의 방화벽 설정에서 포트 6379에 대한 인바운드 및 아웃바운드 규칙을 다시 확인해 주세요. 혹시 모르니 방화벽 규칙을 제거한 후 Redis를 잠시 테스트하는 것도 방법입니다.

  4. WSL의 외부 호스트 접근 허용: WSL에서 실행 중인 서비스를 외부 호스트에서 접근할 수 있도록 설정이 되어 있는지 확인합니다. /etc/redis/redis.conf 파일에서 bind 0.0.0.0 설정을 추가하고, protected-mode 옵션이 no로 되어 있는지도 확인합니다.

  5. WSL과 Windows 간 호스트 이름 해석 문제 확인: WSL과 Windows 간의 호스트 이름 해석에 문제가 있을 수 있기 때문에 localhost 대신 Redis가 작동하는 정확한 IP 주소를 사용해 보세요.

이 문제는 네트워크 설정에 따라 다르게 발생할 수 있으므로 다양한 접근 방법을 시도해보셔야 할 수 있습니다.

유사한 문제를 가지고 있었던 다른 학습자의 질문과 답변이 존재합니다:

  • ‘npm run dev 실행 시 에러 발생’: 이 질문에서 사용자도 Redis 연결 문제를 겪고 있었습니다. Redis 서버가 먼저 실행되고 있어야 한다는 기본적인 문제를 포함해 여러 가지 설정을 확인할 필요가 있다고 하였습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

몰랑몰랑우주선님의 프로필 이미지

2024. 10. 31. 11:23

  1. 포트 열려 있는데 연결은 안 됩니다. redis-cli ping은 정상적으로 되는데 연결이 안됩니다.

    $ netstat -an | grep 6379
    tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN
    tcp6       0      0 :::6379                 :::*                    LISTEN
  2. WSL의 ip로도 시도해보았는데 안됩니다.

  3. 인바운드 아웃바운드 둘 다 설정해놨습니다.

  4. 설정 바꿨는데 안 됩니다.

  5. 127.0.0.1 / localhost / redis IP 셋 다 해봤는데 안 됩니다.

유사한 문제를 가진 학습자의 질문 링크를 봤는데 저는 서버 실행중이라 해당 사항이 없습니다.

왜... 안 될까요?