문제점
pool에서 connection을 가져오지 못해 발생한 에러
내 경우엔 DB 연결이 제대로 되지 않아 발생
실제 db연결 시간의 문제가 아닌 dotenv의 설정 파일인 .env파일의 경로 지정이 잘못되어 db에 연결하지 못한 문제(dotenv를 제대로 알아보지 않고 사용한 문제)
이 문제가 발생했다면 DB 서버와 잘 연결되고 있는지(제대로 된 DB정보를 입력해서 연결하고 있는지) 먼저 확인 필요
해결방법
이 해결방법은 dotenv를 제대로 쓰지 못해 발생한 문제를 해결하는 방법을 얘기하므로 다른 경우라면 도움이 되지 않는다.
두 방법 중 하나로 해결 가능하다.
1. 서버를 종료하고 다시 실행할 때 .env파일 위치에서 실행
2. 아래와 같이 dotenv를 불러오는 부분을 수정
require('dotenv').config(
{path: '/path/to/.env'}
);
require('dotenv').config() 로 불러오면 path 옵션을 지정하지 않았으므로 default로 path: path.resolve(process.cwd(), '.env') 가 들어가게 되는데 process.cwd()의 결과값은 서버 파일을 시작시킨 경로로 반환하게 되어 path는 {서버를 시작한 경로}/.env가 된다.
process.cwd() 반환값의 예시는 아래와 같다.
/app에 app.js라는 서버를 시작시키는 파일이 있다고 가정한다.
이 때 / 위치에서 node /app/app.js 로 실행하면 process.cwd() 는 / 경로를 반환한다.
/app 위치에서 node app.js 로 실행하면 process.cwd()는 /app/ 경로를 반환한다.
참고
이 글의 내용과는 별개로 왜 10004ms(약 10초) 이후로 시간이 만료된건지 알아보니 mariadb.createPool을 실행할 때 option 중 acquireTimeout의 값을 바꾸지 않았으면 default로 10000(10000ms이므로 10초)이 들어가 있어 이 값대로 약 10초 동안 연결되지 않아 연결 시간이 만료되었기 때문에 나온 것이다.
connectTimeout이란 옵션도 있는데 이것은 pool에서 커넥션을 가져오는 시간 + queue대기 시간을 얘기하고 acquireTimeout은 풀에서 커넥션을 가져오는 시간을 얘기한다.
정확한 이유는 모르겠지만 문서에서 acquireTimeout값이 connectTimeout값보다 무조건 커야한다고 한다.
MariaDB connect option 참고
'개발 > DB' 카테고리의 다른 글
[MariaDB] 컬럼 이름 변경 (0) | 2022.06.27 |
---|---|
[MariaDB] 테이블 이름 변경 (0) | 2022.06.27 |
[MariaDB] 제약조건 확인 (0) | 2022.05.27 |
[MariaDB] auto_increment 값 초기화 (0) | 2022.05.27 |
[MariaDB] safe update mode 해제 (0) | 2022.05.27 |