본문 바로가기
경일/nodejs

[nodejs]mySQL connect Error: connect ECONNREFUSED ::1:3306 이슈 해결

by dev_kong 2022. 2. 3.
728x90
728x90

https://kong-dev.tistory.com/125

 

[nodejs] node에서 mySQL 연결(Error: connect ECONNREFUSED ::1:3306)

매우 간단하다. 우선 npm 을 통해 mysql 라이브러리를 다운 받아주자. $ npm init -y $ npm install mysql 다운 받은 라이브러리를 require를 통해 땡겨오고, const mysql = require('mysql') 이제 연결설정을 만..

kong-dev.tistory.com

여기서 발생한 이슈를 한참의 검색을 통해서 해결할 수 있었다.

 

에러내용은 다음과 같았다.

우선 이 이슈를 해결 하기 위해 

사용한 임시방편의 수단이

const db = mysql.createConnection({
  host: '127.0.0.1',
  user: 'root',
  password: '비밀번호',
  database: 'todo_db',
});

위와 같이 host를 localhost 가 아닌 127.0.0.1로 입력하는 거였는데,

내가 알기로는 localhost와 127.0.0.1은 같은거였는데,

왜 저걸 localhost 대신 127.0.0.1 을 입력하는 걸로 해결이 되는 걸까 가 의문이었다.

 

우선 저 이슈를 해결 하기 위해 에러코드를 복사해서 구글링을 했었다.

근데 정말정말 신기하게도

connect Error: connect ECONNREFUSED ::1:3306

에 대한 결과는 없었고,

connect Error: connect ECONNREFUSED 127.0.0.1:3306 에 대한 내용이었다.

 

::1 이 대체 뭔데?

 

::1

::1 은 0.0.0.0.0.1 의 약어이다.

0.0.0.0.0.1은 내가 알던 4자리의 ip주소와는 뭔가 다르다.

총 6자리의 숫자를 가지는 이 ip 주소는

IPv6 형태의 IP 주소 라고 한다.

기존의 표기방식(IPv4) 는 2의 32승 의 IP 주소를 표기할 수 있었는데,

이걸 거의 다썼단다.

그래서 새로 표준으로 정의된게 IPv6임

그럼 0.0.0.0.0.1 얘는 뭐하는 애냐

얘는 IPv4의 127.0.0.1 과 같은 애다.

즉 IPv6로 표기된 IP address의 localhost 는 0.0.0.0.0.1 이고,

이걸 짧게 편하게 쓰기 위해서 ::1 로 쓴다는 거임

 

그럼 위의 에러 코드를 다시 찬찬히 보자

econnrefused ::1:3306

저 연결된 영단어를 뜯어보면

e conn refused로 뜯어낼수 있다.

e 는 모르겠고

conn은 connect를 말하는거 같다.

refused는 거절 됐다는 거니까

::1:3306 통한 연결이 거절됐다 정도로 해석이된다.

::1 은 localhost 고 3306은 mySQL port number 니까

느낌에 내가 host에다가 localhost를 입력하면  ::1 로 해석을 하는데,

얘가 host로 받고 싶어하는 값은 127.0.0.1 이다.

(그러니까 host 127.0.0.1 로 입력을 하면 에러가 안나겠지)

여기 까지 도달했을 때 머릿속을 스친 생각은

그럼 내가 만약 localhost의 지정 값을 ::1 이 아니라 127.0.0.1로 지정해준다면 해결되지 않을까..?

였다

 

locahost 변경

localhost를 변경해주는 건 생각보다 쉬운일이었다.

$ sudo vim /private/etc/hosts

 

이걸 입력하면 

 

이런게 나오는데

::1 앞에 # 붙여서 주석처리 해버림..ㅎ

그리고 저장하고 다시 코드를 돌려보니까.

 

와;; 이게 되네;;

 

일단 되서 기분은 좋다만 뭔가 찜찜하다.

뭔가 이렇게 해결을 하면 안될것 같은 기분이다.

 

 

728x90
728x90

댓글