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 시간을 다르게 설정할 수 있다.
'개인공부 > NodeJs' 카테고리의 다른 글
Node.js가 작동하는 원리 (1) | 2021.07.11 |
---|---|
Node Sass version 6.0.1 is incompatible with ^4.0.0 || ^5.0.0. 에러 해결법 (1) | 2021.06.27 |
React가 작동하는 원리 (0) | 2021.06.25 |
댓글