본문 바로가기
개인공부/NodeJs

ETIMEDOUT 에러 원인 및 해결방법

by BuyAndPray 2020. 11. 11.
반응형

NodeJs 프로젝트를 진행하다가 Sequelize를 활용해서 remote MySQL server에 연결을 진행하려고 했었는데 Error: connect ETIMEDOUT 에러가 나왔다. 

 

에러코드 그대로 연결이 timeout 되었다는 말인데, 이 에러는 주로 서버와 연결을 시도할 때 제한시간 안에 연결이 진행되지 않으면 나오는 에러다.

 

ETIMEDOUT 에러 원인 및 해결방법

인터넷이 잘 연결되어 있는 상태에서 제한시간 안에 서버와 연결이 진행되지 않는 경우는 보통 아래와 같다.

 

1. 서버의 정보를 잘못 기입한 경우

대부분은 이 경우에 해당할 것이다. DB와 연결하는 경우 host, name, password, port number 같은 정보를 잘못 입력하면 해당 서버와 연결이 되지 않기 때문에 ETIMEDOUT 에러가 생길 수 있다. 이 경우에는 간단히 본인이 입력한 정보를 다시 확인함으로써 에러를 해결할 수 있다. MySQL 같은 경우 3306번 포트와 연결을 시도했는지 확인해주는 것이 좋다. 

 

추가적으로 연결하려는 서버가 방화벽에 의해 블락이 되는 경우도 에러가 나오기 때문에 이 경우도 확인해주는 것이 좋다.

 

2. 권한이 없는 경우

만일 내가 서버의 정보를 제대로 기입하였더라도 그 서버에 접근할 권한이 존재하지 않으면 애플리케이션과 서버가 연결될 수 없다. 나 같은 경우도 이 케이스였는데 주소는 제대로 입력했지만 원격 DB에서 내 IP에 권한을 부여해주지 않았기 때문에 서버에 연결할 수 없었다.

 

이런 경우는 서버에서 내 IP를 허용하였는지 혹은 내 계정이 내가 수행하고 싶은 작업의 권한을 가지고 있는지 확인해보면 된다.

 

3. 요청 시간이 부족한 경우

보통의 경우 기본으로 세팅된 제한시간 안에 거의 모든 연결이 이루어지지만 가끔 그 이외의 시간을 필요로 할 때도 있다. 그런 경우 애플리케이션 자체에서 제한시간을 유동적으로 설정할 수 있는데 Sequelize 같은 경우는 아래와 같이 수정할 수 있다.

 

const sequelize = new Sequelize(database, username, password, {
    host: "host",
    user: "user",
    password: "password",
    dialect: "mysql",
    dialectOptions: {
      options: {
        requestTimeout: 3000
      }
    }
  });

Sequelize 객체를 생성할 때 dialectOptions의 requestTimeout 옵션을 통해서 sequelize 자체의 timeout 시간을 다르게 설정할 수 있다.

반응형

댓글