오늘 재밌는걸 발견했다.
누군가는 그냥 지나갔을 수 있지만, 누군가는 나처럼 이게 뭐지? 싶을 수 있다고 생각하여 기록에 남긴다.
WSL2상의 폴더를 VSCode로 여는 방법은 총 3가지가 있다.
$ code .
- Ubuntu와 같은 리눅스 환경에서 직접 code . 명령어를 통해 여는 방법
- VSCode 상의 콘솔에서 code . 을 통해 여는 방법
- 파일탐색기에서 무식하게 네트워크 주소를 통해 접근한 뒤 원하는 폴더나 파일을 우클릭하여 VSCode로 여는 방법
각각의 경우에 따라 VSCode는 서로 다르게 인식한다.
작업표시줄에서 VSCode를 우클릭했을때 나오는 창이다.
여기서 고정됨으로 고정시켜둔 monitor 폴더 위로 마우스를 가져가면 경로가 아래와 같이 나온다.
vscode-remote://wsl%2Bubuntn-20.04/home/<username>/monitor
이는 1번 방식으로 폴더를 열었을 때다. 즉 WSL 환경에서 현재의 엑세스 디렉토리를 VSCode로 실행시킨 경우이며, vscode-remote 로 경로는 시작된다.
반면 최근 폴더에 남아 있는 monitor 폴더 위로 마우스를 가져가면 경로가 아래와 같이 나온다.
~/monitor [WSL: Ubuntu-20.04]
2번 방식으로 폴더를 열었을 때다. 리눅스스러운 경로표현과 함께 대괄호로 WSL 상의 환경에 존재하는 경로임을 알려주고 있다.
근데 사실 정확히는 'WSL에서 실행된 VSCode상의 콘솔로 열었을 때'라고 표현해야 한다.
만약 'WSL에서 실행된 VSCode상의 콘솔'이 아닌,' Windows에서 실행된 VSCode 상의 콘솔'에서 폴더를 연다면 1번 방식과 본질적으로 100% 동일한 방식이므로, 당연히 결과도 같다.
한편, 3번 방식으로 폴더를 여는 경우에는 아래와 같이 경로가 나온다.
\\wsl$\Ubuntu-20.04\home\<username>\monitor
위 경로는 Windows 환경에서 강제로 WSL로 접근할 때 주로 쓰는 경로인데, WSL을 통한 접근과 달리 여전히 Windows 환경에서 접근한다는 점이 문제를 낳는다.
WSL환경에서 VSCode로 폴더를 연다면, VSCode가 이를 인지하고 자동으로 VSCode도 WSL상에서 실행시켜준다.
하지만, 위와 같은 경로로 접근하여 VSCode로 폴더를 연다면, VSCode는 Windows 환경에서 실행된다.
사실 어찌보면 당연하다. 다시 말하지만, 위 경로로 접근하는 것은 여전히 사용자가 Windows 환경에 있다는 뜻이다.
따라서 위 경로로 VSCode를 실행시켰다면, 좌측 하단의 원격 창 버튼을 클릭하여 'WSL에서 폴더 다시 열기'와 같은 방법으로 WSL환경으로의 전환을 해줘야한다.
왜냐하면 WSL에서 Windows의 파일을 건드리는 것은 괜찮지만, Windows에서 WSL상의 파일을 건드리는 것은 치명적인 에러나 오류를 발생시킬 위험이 있기 때문이다. (이름만 놓고 보더라도 Windows Subsystem for Linux이다. 윈도우즈 하위시스템이다. 더 low한 곳에서 더 high한 곳으로 접근하는 것은 괜찮지만 high에서 low로는 위험하다.)
뭐 치명적이라고 해봐야 WSL이 통째로 날아가서 거기 있는 모든 데이터가 사라지는 것 뿐이므로, 어차피 Github에 코드가 다 올라가 있으니 난 상관없어! 하는 분은 맘대로 해도 된다......
하지만 그게 아니라면, WSL상의 파일을 편집할 때는 반드시 VSCode도 WSL에서 실행시켜야 한다는 점을 잊지말자.
대부분의 경우 별 신경을 쓰지 않아도 WSL상에서 VSCode가 구동되므로 이 내용을 모르더라도 별 문제가 없을 수 있지만, 혹시라도 3번과 같은 방식으로 접근한다거나, 꼭 3번이 아니더라도 WSL의 파일을 Windows상에서 편집하다가는 나중에 피눈물 날 수도 있다.
주의. 또 주의하자.
'Learning-Log > Computer Science' 카테고리의 다른 글
[WSL] WSL 기본 명령어 (0) | 2022.06.19 |
---|---|
[Windows11] 결국 BitLocker 해제했습니다. (+ 삼성전자 공식답변) (0) | 2022.06.19 |
[Git] 주니어 개발자가 되기 위해 알아야 할 Git의 모든 것 - (1) (0) | 2022.06.13 |
[JS/Array] 배열 Method 및 배열 고차 함수 정리 (0) | 2022.06.13 |
[JS/반복문] 반복문 및 반복문을 대체할 수 있는 기능 6가지 총 정리 : for 문, while 문, do ... while 문, forEach 메서드, for ... in 문, for ... of 문 (0) | 2022.06.13 |