[project] db 연결 오류 해결 과정

didio·2023년 4월 12일
0

project

목록 보기
6/7

💦 문제상황

server를 구동하고 mysql을 실행 한뒤 postman으로 post 요청을 보냈더니

이런 메시지가 나왔다. 그리고 vsc에서의 err는 아래의 이미지와 같이 나왔다.

다른 컴퓨터에서는 작동이 되는데 내 컴퓨터에서 안되는 것으로 보아 코드의 문제는 아닌 것 같았다.

⚒️ 시도방법

1. port번호 변경

mysql port 번호를 3306에서 3307로 변경 했다.
mysql의 기본 port 번호가 3306이긴하지만 port 번호의 오류로 연결이 안되는가 싶어서 port 번호를 바꿔 보았다. my.cnf 파일을 찾아서 port=3307이라고 입력하고 mysql을 재시작하면 port 번호가 3307로 변한다. mysql work brench도 3307로 port 번호를 바꿔 확인 했다. 하지만 같은 오류메시지를 계속 출력 했다. 3307로 바꿨는데도 오류메시지에는 port:3306이라고 나오니 멘붕이었지만 일단 다른 방법을 시도해보기로 했다.

2.errno:-61

이에러는 리눅스 에러로 'NO data available'을 뜻한다.
61에러의 원인과 해결 방법을 찾아 보았다.

3. ECONNREFUSED

이 오류는 함수가 호스팅되는 위치(이 경우 localhost)에 연결할 수 없음을 나타낸다고한다.

mysql2 패키지를 사용해서 user를 출력해보았는데

잘나온다 하지만 postman에서 요청하면 여전히 똑같은 오류가 발생한다.

4. "address":"::1"

::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로 되어있다.

5. node 버전

node 16버전으로 낮춰보라고 했다. 나의 node version은 19였다.

이런 과정을 거쳐서 16으로 낮추고 다시 실행해보니, 오류가 났지만 오류 내용이 바꼈다!!

6. evn환경변수


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

profile
🌈프론트엔드 공부 기록

0개의 댓글