그동안 npm만 사용하다가 입사 후 처음으로 yarn을 사용하게 되었다.
yarn 전역 설치 명령어
npm install -g yarn
프론트 서버에서는 yarn dev
로 하니 정상적으로 실행되었는데 백엔드 서버에서는 다음과 같은 에러가 발생했다.
에러 메시지
node:internal/modules/cjs/loader:936
Error: Cannot find module 'C:\Users\?⑸?二?AppData\Roaming\npm\node_modules\yarn\bin\yarn.js'
Cannot find module
은 평소에도 노드에서 흔하게 볼 수 있는 에러인데, (모듈을 찾지 못한다 == 경로를 찾지 못한다는 것)이다. 에러 메시지를 보니 한글로 된 폴더명이 깨져 있었다. 이게 원인일 것 같아서 우선 yarn의 설치 경로를 확인해봤다.
yarn의 설치 경로를 확인하는 명령어 (Windows)
> where yarn
C:\Users\<폴더명>\AppData\Roaming\npm\node_modules\yarn\bin'
한글명으로 된 폴더를 제대로 인식하도록 만들어야 해결될 것 같았다.
가장 간단한 방법은 한글이 아닌 영어로 폴더명을 변경하는 것이라고 생각했다. 하지만 회사에서 관리하는 폴더이기 때문에 임의로 한글로 바꿀 수가 없었다. 그래서 영어로 새로운 폴더를 만들고 설치 경로를 변경하려고 했다.
yarn은 설치 시 경로를 지정할 수 없기 때문에 후에 변경해줘야 한다.
yarn 설치 경로 변경 명령어
yarn config set prefix <폴더명>
yarn 설치 경로 확인 명령어
yarn config get prefix
문제는 설치 경로를 다시 확인해봐도 계속 기존의 한글 폴더로만 확인된다는 것이었다.
에러를 해결하면서 하나 더 생긴 의문은 프론트 코드에서는 문제가 안 생기는데 왜 백엔드 코드에서만 문제가 생길까 하는 것이었다. 결국 yarn의 설치 경로는 문제가 아닌 것 같아서 윈도우 한글 깨짐 현상을 해결해보기로 했다.
시스템 로캘(locale)은 프로그램을 언어와 국가에 최적화하기 위해 서 사용하는 지역/언어 정보다. 제어판 > 국가 또는 지역 > 관리자 옵션 > 시스템 로캘 변경을 클릭한다. 현재 시스템 로캘을 영어로 변경하고 Beta: 세계 언어 지원을 위해 Unicode UTF-8로 변경한다. 설정 완료 후 컴퓨터를 재부팅한다.
시스템 로캘을 설정하니 백엔드 코드가 정상적으로 실행되었다!
그런데 여기서 간과한 게 있었으니...
시스템 로캘 설정을 변경해서 실행이 됐다고 생각했는데 한 가지 더 변경한 게 있었다. 노드 버전이다.
맨 처음에 문제가 있었을 때 git clone을 받았을 때는 노드가 이미 14.X 버전으로 설치가 되어 있었다. 이후에 16.X 버전으로 설정해야 된다고 해서 nvm을 설치하고 16.X 버전으로 변경했다.
그런 후에 프론트 서버를 실행해보니 Node Sass found bindings for the following environments
에러가 발생했다. node-sass는 노드에서 sass(scss)를 사용할 수 있게 해주는 라이브러리다. 이 문제 때문에 14.X 버전으로 다시 변경하니 프론트 서버가 제대로 돌아갔다.
이후 백엔드 서버를 실행할 때 node:internal/modules/cjs/loader:936
에러를 겪고 나서 14.X 버전으로 다시 실행하니 일단 프론트 서버는 다시 구동됐다. 그래서 14.X 버전으로 진행하고 있었던 것이다.
마지막으로 문제가 해결됐을 때는 16.X 버전으로 변경을 한 후 git clone을 다시 받았다. 그리고 백엔드 서버를 실행했을 때 해결이 되었다.
결론적으로 시스템 로캘의 설정보다는 노드 버전 때문이 아니었나 생각이 든다.
(왜냐하면 시스템 로캘에 문제가 있었다면 다른 프로그램에서도 깨짐 현상이 발생했을 것으로 예상 + 대체로 블로그에서 '한국어'로 설정하고 Beta 설정을 체크하지 말라고 하는데 나는 '영어'로 설정하고 Beta를 체크했는데도 정상적으로 작동됐다.)