WSL 1과 WSL 2 비교Comparing WSL 1 and WSL 2

Linux용 Windows 하위 시스템을 새 버전으로 업데이트하는 기본 목표는 파일 시스템 성능을 향상시키고 전체 시스템 호출 호환성을 지원하는 것입니다.The primary goals of updating the Windows Subsystem for Linux to a new version are to increase file system performance and support full system call compatibility.

WSL 2는 가장 유용한 최신 가상화 기술을 사용하여 간단한 유틸리티 VM(가상 머신) 내에서 Linux 커널을 실행합니다.WSL 2 uses the latest and greatest in virtualization technology to run a Linux kernel inside of a lightweight utility virtual machine (VM). 그러나 WSL 2는 기존 VM 환경이 아닙니다.However, WSL 2 is not a traditional VM experience. WSL 2 아키텍처에 대해 자세히 알아보세요.Learn more about the WSL 2 architecture.

기능 비교Comparing features

기능Feature WSL 1WSL 1 WSL 2WSL 2
Windows와 Linux 통합Integration between Windows and Linux
빠른 부팅 시간Fast boot times
작은 리소스 공간Small resource foot print
현재 버전의 VMWare 및 VirtualBox로 실행Runs with current versions of VMWare and VirtualBox
관리 VMManaged VM
전체 Linux 커널Full Linux Kernel
전체 시스템 호출 호환성Full system call compatibility
OS 파일 시스템 간 성능Performance across OS file systems

WSL 1을 이미 사용하고 있으며 WSL 2로 업그레이드하려고 하나요?Already using WSL 1 and want to upgrade to WSL 2? 그러면 지침에 따라 WSL 2로 업데이트하세요!Follow the instructions to update to WSL 2!

WSL 2는 Windows 10, 버전 1903, 빌드 18362 이상에서만 사용할 수 있습니다.WSL 2 is only available in Windows 10, Version 1903, Build 18362 or higher. Windows 로고 키 + R을 선택하고 winver를 입력한 다음, 확인을 선택하여 Windows 버전을 확인합니다.Check your Windows version by selecting the Windows logo key + R, type winver, select OK. (또는 Windows 명령 프롬프트에서 ver 명령을 입력합니다.)(Or enter the ver command in Windows Command Prompt). 최신 Windows 버전을 업데이트해야 할 수도 있습니다.You may need to update to the latest Windows version. 18362보다 낮은 빌드의 경우 WSL은 전혀 지원되지 않습니다.For builds lower than 18362, WSL is not supported at all.

참고

WSL 2는 VMWare 15.5.5+VirtualBox 6+와 함께 작동합니다.WSL 2 will work with VMWare 15.5.5+ and VirtualBox 6+.

더 빠른 성능을 위해 Linux 파일 시스템 사용Use the Linux file system for faster performance

가장 빠른 성능 속도에 맞게 최적화하려면 프로젝트 파일을 Windows 파일 시스템이 아닌 Linux 파일 시스템에 저장해야 합니다.In order to optimize for the fastest performance speed, be sure to store your project files in the Linux file system (not the Windows file system).

예를 들어 WSL 프로젝트 파일을 저장하는 경우 다음과 같습니다.For example, when storing your WSL project files:

  • Linux 파일 시스템 루트 디렉터리(\\wsl$\Ubuntu-18.04\home\<user name>\Project)를 사용합니다.Use the Linux file system root directory: \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Windows 파일 시스템 루트 디렉터리(C:\Users\<user name>\Project)가 아닙니다.Not the Windows file system root directory: C:\Users\<user name>\Project

더 빠른 파일 시스템 액세스를 활용하려면 WSL 배포(예: Ubuntu)를 사용하여 작업하는 프로젝트 파일이 Linux 루트 파일 시스템에 있어야 합니다.Project files that you are working with using a WSL distribution (like Ubuntu) must be in the Linux root file system to take advantage of faster file system access.

Windows 앱 및 도구(예: 파일 탐색기)를 사용하여 Linux 루트 파일 시스템에 액세스할 수 있습니다.You can access your Linux root file system with Windows apps and tools like File Explorer. Linux 배포(예: Ubuntu)를 열어 보고, cd ~ 명령을 입력하여 Linux 홈 디렉터리에 있는지 확인합니다.Try opening a Linux distribution (like Ubuntu), be sure that you are in the Linux home directory by entering this command: cd ~. 그런 다음, explorer.exe . (끝에 있는 마침표를 잊지 마세요) 를 입력하여 파일 탐색기에서 Linux 파일 시스템을 엽니다.Then open your Linux file system in File Explorer by entering (don't forget the period at the end): explorer.exe .

WSL 2가 아닌 WSL 1의 사용에 대한 예외Exceptions for using WSL 1 rather than WSL 2

더 빠른 성능과 100% 시스템 호출 호환성을 제공하는 WSL 2를 사용하는 것이 좋습니다.We recommend that you use WSL 2 as it offers faster performance and 100% system call compatibility. 그러나 WSL 1을 사용하는 것이 더 나을 수 있는 몇 가지 특정 시나리오가 있습니다.However, there are a few specific scenarios where you might prefer using WSL 1. 다음과 같은 경우 WSL 1을 사용하는 것이 좋습니다.Consider using WSL 1 if:

  • 프로젝트 파일을 Windows 파일 시스템에 저장해야 합니다.Your project files must be stored in the Windows file system.
    • WSL Linux 배포를 사용하여 Windows 파일 시스템의 프로젝트 파일에 액세스하고 이러한 파일을 Linux 파일 시스템에 저장할 수 없는 경우 WSL 1을 사용하여 OS 파일 시스템에서 더 빠른 성능을 얻을 수 있습니다.If you will be using your WSL Linux distribution to access project files on the Windows file system, and these files cannot be stored on the Linux file system, you will achieve faster performance across the OS files systems by using WSL 1.
  • Windows 및 Linux 도구를 모두 동일한 파일에 사용하여 크로스 컴파일해야 하는 프로젝트입니다.A project which requires cross-compilation using both Windows and Linux tools on the same files.
    • Windows 및 Linux 운영 체제 전체의 파일 성능은 WSL 2보다 WSL 1에서 더 빠르므로 Windows 애플리케이션을 사용하여 Linux 파일에 액세스하는 경우 현재 WSL 1에서 더 빠른 성능을 얻을 수 있습니다.File performance across the Windows and Linux operating systems is faster in WSL 1 than WSL 2, so if you are using Windows applications to access Linux files, you will currently achieve faster performance with WSL 1.

참고

VS Code 원격 WSL 확장에서 Linux 명령줄 도구를 사용하여 프로젝트 파일을 Linux 파일 시스템에 저장하도록 시도하는 것을 고려할 수 있지만, Linux 및 Windows 간의 작업과 관련된 성능을 저하시키지 않고 Windows에서 VS Code를 사용하여 인터넷 브라우저에서 프로젝트를 작성, 편집, 디버그 또는 실행할 수도 있습니다.Consider trying the VS Code Remote WSL Extension to enable you to store your project files on the Linux file system, using Linux command line tools, but also using VS Code on Windows to author, edit, debug, or run your project in an internet browser without any of the performance slow-downs associated with working across the Linux and Windows file systems. 자세한 정보를 알아보세요.Learn more.

WSL 2 아키텍처WSL 2 architecture

기존 VM 환경은 부팅 속도가 느리며, 격리되어 있고, 많은 리소스를 소비하며, 별도로 관리해야 합니다.A traditional VM experience can be slow to boot up, is isolated, consumes lots of resources, and requires your time to manage it. WSL 2는 이러한 단점이 없습니다.WSL 2 does not have these attributes.

WSL 2는 Windows와 Linux 간의 원활한 통합, 빠른 부팅 시간, 작은 리소스 설치 공간을 포함하여 WSL 1의 이점을 제공하며 VM을 구성하거나 관리할 필요가 없습니다.WSL 2 provides the benefits of WSL 1, including seamless integration between Windows and Linux, fast boot times, a small resource footprint, and requires no VM configuration or management. WSL 2는 VM을 사용하지만 WSL 1과 동일한 사용자 환경을 유지하면서 백그라운드에서 관리되고 실행됩니다.While WSL 2 does use a VM, it is managed and run behind the scenes, leaving you with the same user experience as WSL 1.

전체 Linux 커널Full Linux kernel

WSL 2의 Linux 커널은 kernel.org에서 제공되는 원본을 기반으로 하여 Microsoft를 통해 안정적인 최신 분기에서 구축되었습니다. 이 커널은 WSL 2에 맞게 특별히 튜닝되어 크기와 성능을 최적화하여 Windows에서 놀라운 Linux 환경을 제공합니다.The Linux kernel in WSL 2 is built by Microsoft from the latest stable branch, based on the source available at kernel.org. This kernel has been specially tuned for WSL 2, optimizing for size and performance to provide an amazing Linux experience on Windows. 커널은 Windows 업데이트를 통해 서비스를 제공하므로 직접 관리할 필요 없이 최신 보안 수정과 향상된 커널 기능을 얻을 수 있습니다.The kernel will be serviced by Windows updates, which means you will get the latest security fixes and kernel improvements without needing to manage it yourself.

WSL 2 Linux 커널은 오픈 소스입니다.The WSL 2 Linux kernel is open source. 자세히 알아보려면 구축한 팀에서 작성한 Windows를 사용하여 Linux 커널 전달 블로그 게시물을 확인하세요.If you'd like to learn more, check out the blog post Shipping a Linux Kernel with Windows written by the team that built it.

파일 IO 성능 향상Increased file IO performance

git clone, npm install, apt update, apt upgrade 등과 같은 파일 집약적 작업은 모두 WSL 2를 통해 훨씬 더 빠르게 수행됩니다.File intensive operations like git clone, npm install, apt update, apt upgrade, and more are all noticeably faster with WSL 2.

실제 속도 증가는 실행되는 앱과 이 앱에서 파일 시스템과 상호 작용하는 방법에 따라 달라집니다.The actual speed increase will depend on which app you're running and how it is interacting with the file system. 압축된 tarball의 압축을 푸는 경우 WSL 2의 초기 버전은 WSL 1보다 최대 20배 더 빠르게 실행되며, 다양한 프로젝트에서 git clone, npm install 및 cmake를 사용하는 경우 약 2~5배 더 빠르게 실행됩니다.Initial versions of WSL 2 run up to 20x faster compared to WSL 1 when unpacking a zipped tarball, and around 2-5x faster when using git clone, npm install and cmake on various projects.

전체 시스템 호출 호환성Full system call compatibility

Linux 이진 파일은 시스템 호출을 사용하여 파일 액세스, 메모리 요청, 프로세스 만들기 등의 함수를 수행합니다.Linux binaries use system calls to perform functions such as accessing files, requesting memory, creating processes, and more. WSL 1은 WSL 팀에서 개발한 번역 계층을 사용했지만 WSL 2에는 전체 시스템 호출 호환성을 지원하는 자체 Linux 커널이 포함되어 있습니다.Whereas WSL 1 used a translation layer that was built by the WSL team, WSL 2 includes its own Linux kernel with full system call compatibility. 이점은 다음과 같습니다.Benefits include:

  • Docker 등과 같이 WSL 내에서 실행할 수 있는 새로운 앱의 전체 세트입니다.A whole new set of apps that you can run inside of WSL, such as Docker and more.

  • Linux 커널에 대한 모든 업데이트를 즉시 사용할 수 있습니다.Any updates to the Linux kernel are immediately ready for use. (WSL 팀에서 업데이트를 구현하고 변경 내용을 추가할 때까지 기다릴 필요가 없습니다.)(You don't have to wait for the WSL team to implement updates and add the changes).

시작 시 더 적은 양의 메모리를 사용하는 WSL 2WSL 2 uses a smaller amount of memory on startup

WSL 2는 메모리 공간이 작은 실제 Linux 커널에서 간단한 유틸리티 VM을 사용합니다.WSL 2 uses a lightweight utility VM on a real Linux kernel with a small memory footprint. 유틸리티는 시작 시 가상 주소 지원 메모리를 할당합니다.The utility will allocate Virtual Address backed memory on startup. 이는 WSL 1에 필요했던 총 메모리 중 더 적은 비율로 시작하도록 구성되어 있습니다.It is configured to start with a smaller proportion of your total memory that what was required for WSL 1.

네트워크 애플리케이션 액세스Accessing network applications

Windows에서 Linux 네트워킹 앱에 액세스(localhost)Accessing Linux networking apps from Windows (localhost)

네트워킹 앱(예: NodeJS 또는 SQL 서버에서 실행되는 앱)을 Linux 배포에 구축하는 경우 localhost를 사용하여 Windows 앱(예: Edge 또는 Chrome 인터넷 브라우저)에서 이 앱에 액세스할 수 있습니다(일반적인 방법과 동일함).If you are building a networking app (for example an app running on a NodeJS or SQL server) in your Linux distribution, you can access it from a Windows app (like your Edge or Chrome internet browser) using localhost (just like you normally would).

그러나 이전 버전의 Windows(빌드 18945 이하)를 실행하는 경우 Linux 호스트 VM의 IP 주소를 가져와야 합니다(또는 최신 Windows 버전으로 업데이트).However, if you are running an older version of Windows (Build 18945 or less), you will need to get the IP address of the Linux host VM (or update to the latest Windows version).

Linux 배포를 작동하는 가상 머신의 IP 주소를 찾으려면 다음을 수행합니다.To find the IP address of the virtual machine powering your Linux distribution:

  • WSL 배포(즉, Ubuntu)에서 ip addr 명령을 실행합니다.From your WSL distribution (ie Ubuntu), run the command: ip addr
  • eth0 인터페이스의 inet 값 아래에서 주소를 찾아 복사합니다.Find and copy the address under the inet value of the eth0 interface.
  • grep 도구가 설치되어 있는 경우 ip addr | grep eth0 명령을 사용하여 출력을 필터링하여 더 쉽게 찾을 수 있습니다.If you have the grep tool installed, find this more easily by filtering the output with the command: ip addr | grep eth0
  • 이 IP 주소를 사용하여 Linux 서버에 연결합니다.Connect to your Linux server using this IP address.

아래 그림은 Edge 브라우저를 통해 Node.js 서버에 연결하여 이에 대한 예를 보여줍니다.The picture below shows an example of this by connecting to a Node.js server using the Edge browser.

Windows에서 Linux 네트워크 애플리케이션에 액세스

Linux에서 Windows 네트워킹 앱에 액세스(호스트 IP)Accessing Windows networking apps from Linux (host IP)

Linux 배포(즉, Ubuntu)에서 Windows에서 실행되는 네트워킹 앱(예: NodeJS 또는 SQL 서버에서 실행되는 앱)에 액세스하려면 호스트 머신의 IP 주소를 사용해야 합니다.If you want to access a networking app running on Windows (for example an app running on a NodeJS or SQL server) from your Linux distribution (ie Ubuntu), then you need to use the IP address of your host machine. 일반적인 시나리오는 아니지만 다음 단계에 따라 작업을 수행할 수 있습니다.While this is not a common scenario, you can follow these steps to make it work. - Linux 배포에서 cat /etc/resolv.conf 명령을 실행하여 호스트 머신의 IP 주소를 가져옵니다.Obtain the IP address of your host machine by running this command from your Linux distribution: cat /etc/resolv.conf - IP 주소를 nameserver라는 용어 뒤에 복사합니다.Copy the IP address following the term: nameserver. - 복사한 IP 주소를 사용하여 Windows Server에 연결합니다.Connect to any Windows server using the copied IP address.

아래 그림은 curl을 통해 Windows에서 실행 중인 Node.js 서버에 연결하여 이에 대한 예를 보여줍니다.The picture below shows an example of this by connecting to a Node.js server running in Windows via curl.

Windows에서 Linux 네트워크 애플리케이션에 액세스

추가 네트워킹 고려 사항Additional networking considerations

원격 IP 주소를 통해 연결Connecting via remote IP addresses

원격 IP 주소를 사용하여 애플리케이션에 연결하는 경우 LAN(Local Area Network)에서 들어오는 연결로 취급됩니다.When using remote IP addresses to connect to your applications, they will be treated as connections from the Local Area Network (LAN). 즉 애플리케이션에서 LAN 연결을 허용할 수 있는지 확인해야 합니다.This means that you will need to make sure your application can accept LAN connections.

예를 들어 애플리케이션을 127.0.0.1 대신 0.0.0.0에 바인딩해야 할 수 있습니다.For example, you may need to bind your application to 0.0.0.0 instead of 127.0.0.1. Flask를 사용하는 Python 앱의 예제에서는 app.run(host='0.0.0.0') 명령을 사용하여 이 작업을 수행할 수 있습니다.In the example of a Python app using Flask, this can be done with the command: app.run(host='0.0.0.0'). 이러한 변경을 수행하는 경우 LAN으로부터의 연결이 허용되므로 보안에 유의하세요.Please keep security in mind when making these changes as this will allow connections from your LAN.

LAN(Local Area Network)에서 WSL 2 배포에 액세스Accessing a WSL 2 distribution from your local area network (LAN)

WSL 1 배포를 사용할 때 LAN에서 컴퓨터에 액세스하도록 설정된 경우 WSL에서 실행되는 애플리케이션도 LAN에서 액세스할 수 있습니다.When using a WSL 1 distribution, if your computer was set up to be accessed by your LAN, then applications run in WSL could be accessed on your LAN as well.

이는 WSL 2의 기본 사례가 아닙니다.This isn't the default case in WSL 2. WSL 2에는 고유한 IP 주소가 있는 가상화된 이더넷 어댑터가 있습니다.WSL 2 has a virtualized ethernet adapter with its own unique IP address. 현재 이 워크플로를 사용하도록 설정하려면 일반 가상 머신과 동일한 단계를 진행해야 합니다.Currently, to enable this workflow you will need to go through the same steps as you would for a regular virtual machine. (이 환경을 개선할 수 있는 방법을 찾고 있습니다.)(We are looking into ways to improve this experience.)

다음은 호스트의 포트 4000에서 수신 대기하고 포트 4000을 통해 IP 주소가 192.168.101.100인 WSL 2 VM에 연결하는 포트 프록시를 추가하는 PowerShell 명령의 예입니다.Here's an example PowerShell command to add a port proxy that listens on port 4000 on the host and connects it to port 4000 to the WSL 2 VM with IP address 192.168.101.100.

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

IPv6 액세스IPv6 access

WSL 2 배포는 현재 IPv6 전용 주소에 연결할 수 없습니다.WSL 2 distributions currently cannot reach IPv6-only addresses. 이 기능을 추가하기 위한 작업이 진행 중입니다.We are working on adding this feature.

WSL 2 가상 하드웨어 디스크의 크기 확장Expanding the size of your WSL 2 Virtual Hardware Disk

WSL 2는 VHD(가상 하드웨어 디스크)를 사용하여 Linux 파일을 저장합니다.WSL 2 uses a Virtual Hardware Disk (VHD) to store your Linux files. 최대 크기에 도달하면 확장해야 할 수도 있습니다.If you reach its max size you may need to expand it.

WSL 2 VHD는 ext4 파일 시스템을 사용합니다.The WSL 2 VHD uses the ext4 file system. 이 VHD는 스토리지 요구 사항에 맞게 크기가 자동으로 조정되며 초기 최대 크기는 256GB입니다.This VHD automatically resizes to meet your storage needs and has an initial maximum size of 256GB. 배포의 크기가 256GB보다 큰 경우 디스크 공간이 부족하다는 오류가 표시됩니다.If your distribution grows in size to be greater than 256GB, you will see errors stating that you've run out of disk space. 이 오류는 VHD 크기를 확장하여 해결할 수 있습니다.You can fix this error by expanding the VHD size.

최대 VHD 크기를 256GB 이상으로 확장하려면 다음을 수행합니다.To expand your maximum VHD size beyond 256GB:

  1. wsl --shutdown 명령을 사용하여 모든 WSL 인스턴스를 종료합니다.Terminate all WSL instances using the command: wsl --shutdown

  2. 배포 설치 패키지 이름('PackageFamilyName')을 찾습니다.Find your distribution installation package name ('PackageFamilyName')

    • PowerShell을 사용하여 다음 명령을 입력합니다(여기서 'distro'는 배포 이름임).Using PowerShell (where 'distro' is your distribution name) enter the command:
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
  3. WSL 2 설치에 사용된 VHD 파일 fullpath를 찾습니다. 이 경로는 pathToVHD가 됩니다.Locate the VHD file fullpath used by your WSL 2 installation, this will be your pathToVHD:

    • %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
  4. 다음 명령을 완료하여 WSL 2 VHD의 크기를 조정합니다.Resize your WSL 2 VHD by completing the following commands:

    • 관리자 권한으로 Windows 명령 프롬프트를 열고 다음을 입력합니다.Open Windows Command Prompt with admin privileges and enter:
      • diskpart
      • Select vdisk file="<pathToVHD>"
      • expand vdisk maximum="<sizeInMegaBytes>"
  5. WSL 배포(예: Ubuntu)를 시작합니다.Launch your WSL distribution (Ubuntu, for example).

  6. Linux 배포 명령줄에서 다음 명령을 실행하여 WSL에서 파일 시스템의 크기를 확장할 수 있음을 알려줍니다.Make WSL aware that it can expand its file system's size by running these commands from your Linux distribution command line:

    • sudo mount -t devtmpfs none /dev
    • mount | grep ext4
    • /dev/sdXX와 같은 이 항목의 이름을 복사합니다(여기서 X는 다른 문자를 나타냄).Copy the name of this entry, which will look like: /dev/sdXX (with the X representing any other character)
    • sudo resize2fs /dev/sdXX
    • 이전에 복사한 값을 사용합니다.Use the value you copied earlier. resize2fs를 설치해야 할 수도 있습니다(apt install resize2fs).You may also need to install resize2fs: apt install resize2fs

참고

일반적으로 Windows 도구 또는 편집기를 사용하여 AppData 폴더 내에 있는 WSL 관련 파일을 수정하거나 이동하거나 액세스해서는 안 됩니다.In general do not modify, move, or access the WSL related files located inside of your AppData folder using Windows tools or editors. 이렇게 하면 Linux 배포가 손상될 수 있습니다.Doing so could cause your Linux distribution to become corrupted.