[Sequelize-Error] Dialect needs to be explicitly supplied 해결방법

BE/Error 2023. 6. 15.

 

에러내용:

 

ERROR: Dialect needs to be explicitly supplied as of v4.0.0

 

 

 


문제 발생 과정

 

사건의 발달은 처음이지만 migrate를 해서 데이터베이스 관리를 해보고 싶은 마음에서 시작되었다.

그리고 이 에러는 migrate를 해서 table을 만드는 과정에서 생긴 에러이다.

 

  문제 발생 전

 

Typescript로 ~/config/config.ts 파일에 작성하고 컴파일링을 시도했다. 

근데 Error 메세지로 '너 경로에 파일 없는데? sequelize init은 했니?' 라고 한다. (아래 사진 참고)

구성 파일에서 입력을 찾을 수 없습니다: 에러메세지 확인 

 

일단 이 문제는 최종적으로 컴파일링의 문제였고, VSCODE를 껐다 키니까 해결되었다.

 

 

  문제 발생

 

위에 하나를 해결하니 본색을 들어냈다.

 

 

이 에러 메세지를 구글에 검색해봐도 "config.json에서 dialect를 잘 설정 했는지 확인해 보세요!" 라는 말만 보였고,

 

문제 발생 당시 나의 config 모습

아무리 봐도 내 config 파일의 상태는 지극히 정상이었다.

내 .env를 활용해서 만든 ts파일이 문제인가 싶어서 'config.db.dialect'를 지우고 'mysql'을 써보기도 했지만 똑같았다.

 

결국 한국어로는 해결이 불가능하겠다고 판단했고, 구글링을 하다가 Stack overflow의 글 하나를 보게되었다.

Stack overflow게시글

 

 

질문내용

      PostgreSQL 데이터베이스를 사용하여 Node.js 작업을 하고있었다. migrations 폴더와 config 파일을 세팅하고 migrate를 하려고했는데 에러가 났어. 에러 메세지: ERROR: Dialect needs to be explicitly supplied as of v4.0.0

 

 

대충 이런 느낌이었다.

사람들은 거의 비슷한 반응이었다. "config.json에서 dialect를 다시 확인해봐~" 라며.. 100번 확인한듯..

 

하지만 결국 그 아래 있는 존재감 없는 글 하나가 해결책이 되었다.

 

 

  글 내용

      나(글쓴이)도 이 에러가 발생했었다. 이 에러는 타입스크립트의 컴파일링 때문에 발생하는 것이다.

약간의 배경설명을 해보자면, 나는 타입스크립트에서 Sequelize로 작업을 하고있었다. 나의 .Sequelizerc 파일은 config.ts에서 컴파일링 된 config.js 파일을 가리키고 있었다. 컴파일링 된 config.js 파일을 확인해보니 다음과 같이(아래 코드 참고) 내보내기가 되어있었다.

module.exports.default = config

하지만 Sequelize는 module.exports를 기대하고 있기 때문에 안되는 것이다.

그래서 나는 마지막에 이 한 줄을 추가하는 것으로 문제를 해결하였다.

...
module.exports = config;

 

 

'Sequelize는 module.exports를 기대한다.' ?

 

왜? 라는 의문이 들었다. 굳이 저거여야하나..?

답을 찾아본 결과는 다음과 같다.

 

Sequelize와 같은 많은 Node.js의 라이브러리와 패키지는 CommonJS 모듈 시스템에 의존하므로 'module.exports'로 설정을 내보내야한다. 만약 export default를 사용하게 되면 ES6 모듈 시스템에서만 적용되며 이는 CommonJS 'require()'와 전혀 호환이 되지 않는다.

 

 

아직 초보 개발자이기에 Babel을 사용하고 있지 않아서 이런 문제가 발생한 것 같다.

듣기로는 Babel을 쓰면 이런 것들을 자동으로 해준단다..

 

덕분에 CommonJS에 대해서 조금 더 알고싶어졌다.

 

 


해결방법

 

config.ts에 있는 설정들을 export default 에서 module.exports = config;로 바꿔주면 해결된다.

 

다음과 같이

...
module.exports = config;

 

 

이유는 문제 발생 과정의 가장 아래에 있는 부분을 참고하면 좋을 것 같다.

'BE > Error' 카테고리의 다른 글

[TypeScrip-Error] 구성파일에서 입력을 찾을 수 없습니다.  (0) 2023.06.15