✔️ WSL (Windows Subsystem for Linux) 이란 ?
- Hyper-V 기반의 경량화된 가상화 기술을 사용하여 실제 리눅스 커널을 탑재해 Windows 운영체제에서 Linux 운영체제를 구동할 수 있도록 해주는 기술이다.
- Linux의 호환과 Bash도 사용가능하고 바이너리를 컴파일 없이 설치하고 실행할 수 있다.
- WSL은 Windows에서 GNU/Linux 계열의 실행 파일 표준인 ELF(Executable and Linkable Format) binary 파일들을 실행할 수 있게 해 준다.
✔️ WSL1과 WSL2 비교
기능 | WSL1 | WSL2 |
Windows와 Linux 통합 | ✅ | ✅ |
빠른 부팅 시간 | ✅ | ✅ |
작은 리소스 공간 | ✅ | ✅ |
관리 VM | ❌ | ✅ |
전체 Linux 커널 | ❌ | ✅ |
전체 시스템 호출 호환성 | ❌ | ✅ |
현재 버전의 VMWare 및 VirtualBox로 실행 | ✅ | ❌ |
OS 파일 시스템 간 성능 | ✅ | ❌ |
WSL2는 기존과 다른 VM 환경을 가지고 있다. WSL1에서는 Linux의 System Call을 Windows API로 변환하는 구조였다고 하면, WSL2에서는 윈도우즈에 리눅스 커널을 아예 올려버렸다.
WSL1이 윈도우의 api를 이용하기 위하여 변환과정을 거쳤기 때문에, 속도적인 측면에서 불리하였고 일부 api는 변환이 불가능하였으나 WSL2는 linux 커널을 포함하고 있기 때문에, linux의 모든 api를 지원한다.
좀 더 자세히...
WSL1에서는 Windows에서 Linux 시스템을 WSL이 Emulating하여 처리하는 방식이었다. 모든 사용자의 명령은 Windows NT Kernel이 WSL을 통해 Linux-compatible kernel interface와 통신 후 Linux interface는 다시 결과를 WSL을 통해 윈도우 시스템 명령으로 번역해서 돌려준 후 사용자들에게 결과를 보여주는 방식이었다. 이 때문에 WSL1에서는 모든 Linux의 명령을 처리하는 데에 한계가 존재했으며, 실행되는 명령들도 처리 속도가 느렸다. 즉, 이 경우에는 실제 Linux를 사용한다기 보다 Linux를 가상화하여 결과를 보여주는 방식이었고, 동시에 Linux Kernel에 특화된 명령들은 WSL1에서는 실행할 수 없었다.
그에 비해 WSL2에는 실제 Linux Kernel이 탑재되어 있다. 이 의미인 즉, Windows10 내에서 모든 Linux의 시스템 명령을 처리할 수 있게 되었다는 의미이다. 위 그림을 보면 Windows 사용자가 「경량화된 Linux VM 도구(Light-Weight Linux Utility Virtual Machine」에 명령 신호를 보내면, 이 Linux VM 내부에 EFL 64 Linux Binary를 구동하기 위한 아키텍처를 가지고 있어 Linux UserMode에서 Linux Kernel로 신호를 보내 작동하도록 되어 있다. 같은 Hyper-V를 이용하더라도 Windows UserMode와 Linux UserMode를 병렬로 사용할 수 있기 때문에 인터페이스의 이슈가 줄어들고 처리 속도가 향상된다.
WSL2는 기본적으로 WSL1의 단점들을 개선하는 측면에서 발전이 있었다.
추가로, 실제 개발 환경을 꾸려 사용하는 프로그래머의 입장에서 WSL1과 WSL2의 가장 큰 차이 2개는 ① Linux 시스템 명령의 실행 속도, 그리고 ② Docker의 지원이다.
가상 시스템 속도의 향상은 WSL1에서의 WSL NE-Linux 가상화와 달리, WSL2에서는 Windows UserMode에서 WSL을 호출하여 직접 Linux Bash Shell에서 UserMode를 활용할 수 있게 되었고, 탑재된 Linux Kernel을 병렬로 사용할 수 있어서 가능했다. 이런 아키텍쳐 변화는 Windows에서 Hpyer-V를 활용하여 Linux 시스템을 가상화할 때 CPU와 Memory 등 리소스 사용을 적게 하는 장점도 있다. 리소스 사용량이 적어지니 속도는 당연히 개선된다.
Windows Docker는 과거부터 존재했었지만 속도가 느리고 무거운 단점이 있었으며, Docker는 Windows 기반으로 설계된 애플리케이션이 아니다보니 추가로 설정해야 하는 내용들이 많아 불편했다. WSL2에서 Docker를 정식 지원함으로 인해 속도가 개선되고 훨씬 편리하게 사용할 수 있게 되었다. WSL2와 Docker에 관련한 이야기는 이후 Docker에 대한 개요 설명 시 진행할까 한다.
WSL2에도 단점은 있는데 WSL1에서는 Windows와 Linux간 Interface 역할을 직접 하기 때문에 NTFS(NT File System) 내의 파일을 Linux에서 빠르게 mount하고 사용이 가능했지만, WSL2에서는 Hyper-V를 통해 파일 시스템의 내용을 공유하게 되므로 SSD를 사용해도 Linux의 mount 및 활용 속도가 느려진다. (그래서 필자는 WSL1과 WSL2를 동시에 사용한다.) 또한, WSL2 사용 시에는 해당 컴퓨터에서 ‘VM Ware’나 ‘Virtual Box’를 함께 사용할 수 없다. 이런 가상화 프로그램들은 Hyper-V 가상화 아키텍처를 사용하기 때문에 WSL2와 동시 사용할 수 없다.
✔️ WSL 사용의 이유
- 리눅스 커맨드라인을 윈도우에서 사용가능
- bash shell에서 윈도우 파일에 쉽게 접근하고 실행시킬수 있음
- bash script를 윈도우 드라이브에서 실행할 수 있음
- 윈도우에서 vscode로 작업하면서 리눅스에서 돌아가는 백엔드 앱을 디버깅할 수 있음
- AF unit socket을 사용하면 윈도우 프로세스와 리눅스 프로세스 사이의 연계가 가능
- 맥북, 아이맥 구입시 램 하나 추가할때도 수십만원의 돈을 써야 했던것에 비하면 5950x, 보드, 파워, 저렴한 그래픽카드 이렇게 구성하면 200만원 이하로 맥프로급의 성능을 낼수 있다.
✔️ WSL2 설치하기
1. Windows Terminal 설치하기
윈도우 cmd는 UI나 사용이 다소 불편하나 Micro Store에서 Windows terminal을 제공한다.
Micro Store에서 설치해준다.
2. 원하는 Linux 버전을 설치하기
- Ubuntu 16.04 LTS
- Ubuntu 18.04 LTS
- Ubuntu 20.04 LTS
- openSUSE Leap 15.1
- SUSE Linux Enterprise Server 12 SP5
- SUSE Linux Enterprise Server 15 SP1
- Kali Linux
- Debian GNU/Linux
- Fedora Remix for WSL
- Pengwin
- Pengwin Enterprise
- Alpine WSL
많은 버전을 지원하고 있다. 사용하기 원하는 버전을 선택해 설치한다. (Ubuntu 20.04 LTS 버전을 선택했다.)
설치가 완료됐다면 위와 같이 Ubuntu 항목이 나타나게 된다.
3. wsl2 활성화 명령어 실행
Windows terminal을 "관리자 권한"으로 열고 명령을 실행한다.
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
4. wsl2로 변환하기
1) 설치한 Linux 배포에 할당된 WSL 버전 확인
wsl --list-verbose
2) 해당 버전을 WSL2로 만들어주기 위한 작업 수행
wsl --set-version Ubuntu 2
3) WSL2를 기본 버전으로 설정
wsl --set-default-version 2
4) 변경 완료 메세지가 뜨면 확인
wsl --list --verbose
🔗 참고
'Study > Study' 카테고리의 다른 글
JumpHost (특정 서버를 경유해 SSH 사용하기) (0) | 2022.04.05 |
---|---|
Prometheus란 ? (0) | 2022.03.23 |
Serverless 란? (Server + Less) (0) | 2022.03.23 |
SELinux가 MariaDB를 안전한 방식으로 실행하는 방법 (0) | 2022.03.20 |
Flask란 ? (0) | 2022.03.04 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!