ETC/IT Documentation

WSL vs. Virtual Marchin

NKUT 2023. 1. 30. 21:47

패스트 캠퍼스 "aws 데이터 인프라 구축 & 엔지니어링 정주행 KIT"강의에서  WSL에 대해 새롭게 접하게 되어

이에 대한 이해를 높이고자 해당 글을 정리함.

 

윈도우 운영체제에서 리눅스를 사용하기 위해 VM을 계속 사용했던 찰나, 처음 WSL에 대한 개념을 접하고 헷갈리는 부분이 많았다.

강의를 듣는 것에는 해당 개념이 크게 중요하지 않았지만, 결국에는 여러 글들을 찾아본 김에 정리하고자 한다.

 

WSLVirtual Machine 모두 윈도우 운영체제에서 리눅스 시스템이 필요할 때 로컬에서 사용할 수 있게 하는 프로그램이다.

 

WSL, Windows Subsystem for Linux (Linux용 Windows 하위 시스템)

Microsoft에서 공개한 WSL은 윈도우 운영체제에서 리눅스 명령어나 소프트웨어를 실행할 수 있는 환경을 제공한다.

가상머신과 달리 host machine의 리소스에 직접 접근하기에 추가적인 오버헤드가 없다.

 

윈도우에서 ELF64바이너리를 실행할 수 있도록 하는 기술로 윈도우에서 사용가능한 리눅스 환경을 제공하여 여러 리눅스 배포판을 지원한다.(Ubuntu, Debian, Alpine, Fedora...)


Binary : 좁은 의미로 '실행 가능한 형식의 데이터 파일' 
ELF(Executable and Linkable Format) : 리눅스 기반 시스템의 기본 바이너리 형식.
PE(Portable Execute)  : 윈도우에서 사용되는 파일들의 포맷 형식. 


 

WSL 버전1에서는 리눅스의 system call을 윈도루 API로 치환하는 방식으로 구현하였으나,

버전2에서는 리눅스 커널 그 자체를 구현하였다.

따라서 WSL 버전2에서는 거의 대부분의 리눅스 기능들을 지원한다. 

전체 가상 머신보다 적은 리소스(CPU, 메모리 및 스토리지)를 사용하며,

Windows 명령줄, 데스크톱 및 스토어 앱과 함께 Linux 명령줄 도구 및 앱을 실행하고 Linux 내에서 Windows 파일에 액세스할 수 있다. 이렇게 하면 원하는 경우 동일한 파일 세트에서 Windows 앱 및 Linux 명령줄 도구를 사용할 수 있다.

 

 

VM , Virtual Machine 

가상머신은 호스트 머신에서 가상 CPU, 메모리, 하드디스크, 네트워크 카드 등을 구현하여 가상 컴퓨터 장치 위에 OS를 올려 운영하는 방식이다.

호스트 머신과 완전히 분리된 환경을 구축할 수 있으며 서버 운영, 네트워크 환경 구축 등을 하는데 유리하다.

 

 

 

 

WSL과 VM의 차이점

 

1. systemd 
systemd는 컴퓨터를 부팅(부트스트래핑)하고 다른 모든 프로세스를 관리하는 시스템이다. PID 1번을 차지하며 모든 프로세스의 부모 프로세스이다. systemd 시스템의 유틸리티 도구로서 systemctl 명령어가 있다.

 

하지만, WSL은 systemd가 아니라 윈도우가 리눅스를 부팅시키기 때문에 systemd 프로세스가 존재하지 않는다.

따라서 systemctl 명령어를 사용할 수 없다.

 

WSL에서 systemctl 명령어를 사용해야 하는 경우, service와 같은 기능의 다른 명령어를 사용해야 한다.

예를 들어 'sudo systemctl start ssh' 대신 'sudo service ssh start'와 같이 사용해야 한다.

 

2. 네트워크

Virtual Box, VMware 등 가상머신 상용 소프트웨어를 이용하여 가상머신들을 구성한다면 네트워크 구조를 NAT, 브릿지, Host-only 등 필요에따라 설정할 수 있다.

하지만 WSL의 여러 배포(ubuntu, kali 등)를 동시에 실행해서 서로 통신하는 것이 불가능하다.

 

WSL의 배포판은 가상머신처럼 인스턴스로 실행되는 것이 아니라, NAT 네트워크 내에 구성된 하나의 NIC를 현재 실행중인 배포판들이 돌려쓰는 것으로 추측된다. 따라서 여러 장치간의 통신 환경을 위해서는 가상머신이 보다 유리하다.

 

 


NIC란?

NIC는 네트워크 인터페이스 카드라고 하며 네트워크 인터페이스 컨트롤러라고도 부른다.
네트워크 카드는 두 번째 링크 계층에서 작동하는 네트워크 구성요소이다.
일반적으로 네트워크에 연결하기 위해 컴퓨터에 설치된 회로 기판이며 컴퓨터에 사설 네트워크 연결을 제공한다.
네트워크 카드(어댑터)는 변환기 역할을 하여 데이터를 (서버 네트워크의 케이블이나 무선 라우터를 사용하여 통신하는) 디지털신호로 변환한다.
TCP/IP 계층의 인터페이스로서 NIC는 물리적 계층에서 신호를 전송하고 네트워크 계층에서 패킷을 전송할 수 있다.
또한, 계층과 관계없이 컴퓨터/서버와 데이터 네트워크 간의 중개자 역활을 한다. 사용자가 웹 페이지를 요청하면 LAN은 사용자의 장치에서 데이터를 가져와 네트워크 서버로 보낸 다음 사용자에게 표시하는 데 필요한 데이터를 받는다.


번외 - 가상머신과 WSL 동시에 사용하는 법

가끔 Hyper-v 기능이 켜져있을 때 Virtual Box나 VMware 등 가상머신이 동작하지 않는 경우가 있다.

이 경우 hyper-v와 가상머신 소프트웨어가 호환되지 않기 때문으로, hyper-v 기능을 잠시 꺼두면 되는 경우가 있다.

아래 명령어를 통해 사용가능하다. (터미널을 관리자 권한으로 실행 후 명령어를 실행하면 된다.)

# 상태 확인하는 법
bcdedit | find "hypervisorlaunchtype"

# VirtualBox 실행시
bcdedit /set hypervisorlaunchtype off

# docker, wsl 실행시
bcdedit /set hypervisorlaunchtype auto

 


Hyper-v

Microsoft Hyper-V는 window에서 기본적으로 제공하는 가상화 솔루션으로, 가상화 기술을 사용하여 가상화된 컴퓨팅 환경을 만들고 관리할 수 있는 인프라를 제공하는 소프트웨어이다.

WSL2(최신버전)은 Hyper-v 아키텍쳐를 사용하여 가상화를 지원한다.

Hyper-V를 사용 중인 경우 일부 타사 애플리케이션을 작동할 수 없다. 즉, VMware 및 VirtualBox의 경우 WSL 2를 사용하도록 Hyper-V가 설정된 경우에는 해당 애플리케이션이 실행되지 않는다.

그러나 최근에 VirtualBox와 VMware는 모두 Hyper-V 및 WSL2를 지원하는 버전을 릴리스했다고 한다.(다만, 안되는 경우, 위의 번외를 참조하여 Hyper-v를 끄고 reboot해야 된다.)

 


 

 

 

 

참고자료

패스트 캠퍼스 "aws 데이터 인프라 구축 & 엔지니어링 정주행 KIT" 강의 자료 

https://ohs-o.tistory.com/64

https://rond-o.tistory.com/303

https://primi.tistory.com/22

https://www.fibermall.com/ko/blog/network-adapter-nics-function-construction-classification.htm

https://learn.microsoft.com/ko-kr/windows/wsl/faq