J-한솔넷

WSL2를 쓰야하나!!! 본문

프로그래밍/PHP

WSL2를 쓰야하나!!!

jhansol 2023. 9. 14. 18:05

지난달에 WSL2 + Docker 개발환경이 너무 느리다고 글을 적었는데, 이번에는 다시 WSL2를 이용해야 하는지 고민되는 내용을 적습니다. 다름이 아니라 최근 Laravel의 자바스크립트 스타일시트 빌드를 위해 NodeJS를 설치하는데 문제가 생겼습니다. 예전에는 로컬에 NodeJS를 별도로 설치해서 사용하다가 최근에는 Docker 컨테이너에 포함시켜 이용하고 있습니다. 진행중인 프로젝트의 자바스크립트 패키지를 설치하던 중 아래와 같은 오류가 발생했습니다.

WSL2를 사용하지 않는 Docker 컨테이너

WSL2를 사용하지 않으면 Docker는 Hyper-V 기반에서 컨테이너를 실행되고, bind mount 형태로 공유된 폴더의 경우 심블릭 링크를 만들 수 없고, 리눅스 파일 시스템의 권한 문제에 영향을 받지 않습니다. 아래의 오류 원인은 심블릭 링크를 만들지 못해서 생기는 문제입니다.

# npm install
npm notice
npm notice New major version of npm available! 9.6.7 -> 10.1.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.1.0
npm notice Run npm install -g npm@10.1.0 to update!
npm notice
npm ERR! code EIO
npm ERR! syscall symlink
npm ERR! path ../autoprefixer/bin/autoprefixer
npm ERR! dest /DevHome/sites/the-linko-core/node_modules/.bin/autoprefixer
npm ERR! errno -5
npm ERR! EIO: i/o error, symlink '../autoprefixer/bin/autoprefixer' -> '/DevHome/sites/the-linko-core/node_modules/.bin/autoprefixer'

npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2023-09-14T07_57_37_831Z-debug-0.log
root@e9403db456f8:/DevHome/sites/the-linko-core# exit
exit

WSL2를 사용하는 Docker 컨테이너

Docker는 컨테이너를 리눅스를 위한 윈도우즈 하이 시스템을 이용하여 실행합니다. 이 경우 bind mount를 이용하여 연결한 폴더에서도 심블릭 링크를 생성할 수 있습니다. 반면에 리늑스 파일 시스템의 권한 부분도 그대로 적용됩니다. 그래서 간혹 저의 개발환경에서 파일을 생성할 수 없다(권한 없음)는 메시지가 출력되기도 합니다.
WSL2를 이용하면 아래와 같이 오류가 발생하지 않습니다. 심블릭 링크를 생성할 수 있기 때문일 것입니다.

# npm install

added 117 packages, and audited 118 packages in 8s

20 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

아래와 같이 심블릭 링크가 생성되어 있는 것을 확인할 수 있습니다.

# ls -al ./node_modules/.bin
total 0
drwxr-xr-x 1 root root 4096 Sep 14 17:29 .
drwxr-xr-x 1 root root 4096 Sep 14 17:29 ..
lrwxrwxrwx 1 root root   32 Sep 14 17:29 autoprefixer -> ../autoprefixer/bin/autoprefixer
lrwxrwxrwx 1 root root   22 Sep 14 17:29 browserslist -> ../browserslist/cli.js
lrwxrwxrwx 1 root root   20 Sep 14 17:29 cssesc -> ../cssesc/bin/cssesc
lrwxrwxrwx 1 root root   22 Sep 14 17:29 esbuild -> ../esbuild/bin/esbuild
lrwxrwxrwx 1 root root   19 Sep 14 17:29 jiti -> ../jiti/bin/jiti.js
lrwxrwxrwx 1 root root   27 Sep 14 17:29 mini-svg-data-uri -> ../mini-svg-data-uri/cli.js
lrwxrwxrwx 1 root root   24 Sep 14 17:29 nanoid -> ../nanoid/bin/nanoid.cjs
lrwxrwxrwx 1 root root   22 Sep 14 17:29 resolve -> ../resolve/bin/resolve
lrwxrwxrwx 1 root root   25 Sep 14 17:29 rollup -> ../rollup/dist/bin/rollup
lrwxrwxrwx 1 root root   22 Sep 14 17:29 sucrase -> ../sucrase/bin/sucrase
lrwxrwxrwx 1 root root   27 Sep 14 17:29 sucrase-node -> ../sucrase/bin/sucrase-node
lrwxrwxrwx 1 root root   25 Sep 14 17:29 tailwind -> ../tailwindcss/lib/cli.js
lrwxrwxrwx 1 root root   25 Sep 14 17:29 tailwindcss -> ../tailwindcss/lib/cli.js
lrwxrwxrwx 1 root root   32 Sep 14 17:29 update-browserslist-db -> ../update-browserslist-db/cli.js
lrwxrwxrwx 1 root root   19 Sep 14 17:29 vite -> ../vite/bin/vite.js

정리

WSL2를 사용하면 파일 입출력 문제로 느려진다는 이야기도 있고, 저도 느리다는 생각이 듧니다. 하지만 리눅스의 특성을 온전히 활용하려면 WSL2을 이용해야 할 듯 합니다. 좀더 편리하게 개발하기 위해 제가 만든 개발환경도 약간 수정을 해야 할 듯 합니다.

'프로그래밍 > PHP' 카테고리의 다른 글

삽질의 연속  (1) 2024.04.20
메모리 프로파일링?  (0) 2023.11.09
ChatGPT를 이용한 코딩?  (0) 2023.10.26
나의 API 문서화 전략  (0) 2023.09.11