server를 구동하고 mysql을 실행 한뒤 postman으로 post 요청을 보냈더니
이런 메시지가 나왔다. 그리고 vsc에서의 err는 아래의 이미지와 같이 나왔다.
다른 컴퓨터에서는 작동이 되는데 내 컴퓨터에서 안되는 것으로 보아 코드의 문제는 아닌 것 같았다.
mysql port 번호를 3306에서 3307로 변경 했다.
mysql의 기본 port 번호가 3306이긴하지만 port 번호의 오류로 연결이 안되는가 싶어서 port 번호를 바꿔 보았다. my.cnf 파일을 찾아서 port=3307이라고 입력하고 mysql을 재시작하면 port 번호가 3307로 변한다. mysql work brench도 3307로 port 번호를 바꿔 확인 했다. 하지만 같은 오류메시지를 계속 출력 했다. 3307로 바꿨는데도 오류메시지에는 port:3306이라고 나오니 멘붕이었지만 일단 다른 방법을 시도해보기로 했다.
이에러는 리눅스 에러로 'NO data available'을 뜻한다.
61에러의 원인과 해결 방법을 찾아 보았다.
이 오류는 함수가 호스팅되는 위치(이 경우 localhost)에 연결할 수 없음을 나타낸다고한다.
mysql2 패키지를 사용해서 user를 출력해보았는데
잘나온다 하지만 postman에서 요청하면 여전히 똑같은 오류가 발생한다.
::1 은 0.0.0.0.0.1 의 약어라고한다. IP4의 주소는
sudo vim /private/etc/hosts 를 입력하면 localhost를 변경할 수 있는데 ::1 이부분을 주석처리해서 해결 됐다는 글도 봤다.
::1 은 0.0.0.0.0.1 의 약어이다. 0.0.0.0.0.1은 알던 4자리의 ip주소와는 뭔가 다르다. 이는 IP6의 주소인데 IP4의 주소를 거의 다 써 IP6주소를 사용한다.
연결을 시도할때 host는 127.0.0.1로 설정을 했는데 address: ::1 오류가 났으니 localhost 지정에서 문제가 생겼을 수도 있다! 나의 local host를 확인해봤는데 ::1로 되어있다.
node 16버전으로 낮춰보라고 했다. 나의 node version은 19였다.
이런 과정을 거쳐서 16으로 낮추고 다시 실행해보니, 오류가 났지만 오류 내용이 바꼈다!!
node를 16버전으로 낮추고 시도한 결과인데, 위의 오류는 "ER_ACCESS_DENIED_ERROR"로 연결에 문제가 있는 거같아서 코드를 살펴보았더니
pool = createPool({
connectionLimit: dataSource.DB_CONNECTION_LIMIT,
host: dataSource.DB_HOST,
user: dataSource.DB_USER,
password: dataSource.DB_PASSWORD,
database: dataSource.DB_DATABASE,
});
env변수로 사용되었다는 것을 알게되었다. 깃허브에 ignore에 env가 있어서 올라가지 않았고 나는 그대로 clone 받아와서 내 컴퓨터에도 환경변수를 따로 설정해야 했던 것이다.
환경변수를 나의 로컬에서도 추가해보았다. 잘 실행된다.
내용을 보니 field list 중 isAdmin을 알 수 없다고 나오는데 이부분은 server에서 짠 db코드의 문제인 것 같아 일단 server와 이야기를 나눠 보기로 했다.
필드 이름 수정과 value type수정으로 해결 완료!
드디어 회원가입에 success 가 출력 되었다!!😊
문제는 노드 버전 그리고 env로 설정을 했던 것이 나의 폴더에는 env파일이 없었어서 연결이 db연결이 안됐던것 같다.
저번 도서프로젝트때도 배포 할때 env파일이 지정되지 않아서 api오류가 발생했는데, 이번에도 같은 문제였다. 🥲 협업시에는 env파일을 각자 가지고 있어야 한다는 것을 알게 되었고, 인터넷에 검색해보니 협업시에 slack같은 협업 도구로 env파일이 변경사항을 알리면서 작업한다고 한다.
해결에 참고한 블로그
https://stackoverflow.com/questions/66446807/node-js-mysql-connection-error-econnrefused
https://kong-dev.tistory.com/126