
이전 장에서 우리는 WSL2를 외부 네트워크에 직접 연결하려다 실패했다. 외부 Hyper-V 가상 스위치를 이용하는 설정은 다음과 같은 형태로 알려져 있다.
[wsl2] networkingMode=bridged vmSwitch=외부용가상스위치이름
이 내용은 사용자 폴더의 .wslconfig에 넣는다. 키 이름은 networkMode가 아니라 networkingMode다. 다만 bridged 모드는 WSL 버전과 Windows 빌드에 따라 지원 여부가 달랐고 현재는 사용 중단 방향으로 가고 있다. Windows 10 Pro에서 오류가 발생한다면 비공식 우회법을 억지로 적용하기보다 Windows와 WSL 버전, Hyper-V 지원 여부를 먼저 확인해야 한다. 최신 Windows 11에서는 mirrored 네트워킹이 더 일반적인 선택이다.
오늘의 이야기는 네트워크 설정 말고도 WSL이 가진 장점이 많다는 것이다.
Windows에서 Linux 셸 시작하기
먼저 명령 프롬프트 창을 하나 열고 다음 명령을 입력한다.
wsl
과거 WSL 설치 환경에서는 bash 명령으로도 기본 Linux 배포판을 실행할 수 있었다. Windows는 Linux가 아니므로 원래 bash는 Windows 기본 명령이 아니다. 이 명령이 실행되는 것은 WSL 실행기가 설치되어 Linux 배포판으로 연결해 주기 때문이다. 현재는 동작이 더 명확한 wsl 명령을 사용하는 편이 좋다.
WSL을 실행했더니 시작 위치가 다음과 같이 나타날 수 있다.
/mnt/c/Users/사용자명
이 경로가 의미하는 바는 크다. WSL은 기본 설정에서 Windows의 C 드라이브를 /mnt/c 아래에 자동으로 마운트한다. 따라서 Linux 명령으로 Windows 파일을 읽고 수정할 수 있다. 다만 대량의 Linux 개발 파일은 /mnt/c보다 WSL의 Linux 파일시스템 안에 두는 편이 성능과 파일 권한 처리에서 유리하다.
WSL에서 Windows 프로그램 실행하기
WSL 터미널에서 다음처럼 실행해 보자.
notepad.exe
그러면 Windows 메모장이 실행된다. 작업 표시줄에서 펭귄 표시가 함께 보일 수 있지만, 메모장 자체는 Linux 앱이 아니라 Windows 프로세스다. WSL의 상호 운용 기능이 Linux 셸에서 Windows 실행 파일을 찾아 실행하고 인수를 전달한 것이다.
반대 방향도 가능하다. Windows에서 wsl ls, wsl grep 같은 형태로 Linux 명령을 호출할 수 있다. 파이프를 이용하면 Linux에서 가공한 결과를 Windows 클립보드로 보낼 수도 있다.
printf 'WSL에서 만든 문자열' | clip.exe
Linux GUI 앱과 WSLg
WSLg를 지원하는 환경이라면 xclock 같은 Linux GUI 프로그램도 실행할 수 있다.
xclock
별도의 X 서버를 직접 설정하던 과거와 달리 WSLg는 Wayland, X11, PulseAudio 연동과 창 표시를 통합해 제공한다. 지원되지 않는 오래된 Windows 또는 WSL 환경에서는 별도의 X 서버 설정이 필요할 수 있다.
Microsoft 문서를 읽어 보면 WSL이 단순한 터미널 기능을 넘어 Linux GUI 애플리케이션, 오디오, GPU 가속과 Windows 상호 운용까지 준비하고 있다는 것을 알 수 있다. 우리는 WSL의 Ubuntu 환경에 CUDA 도구를 설치해 프로그램을 실행하기도 한다. 이때도 Linux가 Windows와 하나의 공통 커널을 쓰는 것은 아니다. WSL2는 경량 유틸리티 가상머신 안에서 실제 Linux 커널을 실행하고 Windows는 NT 커널을 사용한다. 두 환경 사이를 WSLg, 파일 공유, 네트워크, GPU 가상화와 실행 파일 상호 운용 기능이 연결한다.
PATH와 두 운영체제의 협업
WSL을 본격적으로 사용하다 보면 PATH 문제를 만난다. Windows PATH가 WSL에 전달될 수 있고 Linux PATH는 셸 설정 파일에서 관리된다. 같은 이름의 명령이 양쪽에 있거나 경로에 공백과 특수문자가 포함되면 예상과 다른 프로그램이 실행될 수 있다.
모든 PATH를 무조건 양쪽에서 중복 수정하기보다 명령이 어느 운영체제에서 실행되는지 먼저 구분하는 것이 중요하다. Windows 프로그램은 .exe 확장자로 명확하게 호출하고, Linux 도구는 Linux 파일시스템과 셸 환경에서 관리하는 편이 안전하다.
WSL은 Ubuntu와 Windows의 경계를 없앤 것이 아니라 두 운영체제를 편리하게 연결한다. Windows의 편집기와 데스크톱 프로그램, Linux의 셸과 개발 도구를 한 작업 흐름에서 조합할 수 있다는 점이 가장 큰 장점이다. 컨테이너와 Kubernetes 개발 환경으로 이어지는 기반이라는 생각도 든다. 그렇다면 한 번쯤 이 흐름에 기꺼이 올라타 보는 것도 나쁘지 않을 것 같다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
등록된 댓글이 없습니다.