WSL2 개발 환경 실전 세팅 — 네이티브 Linux 성능 비교까지
회사에서 Mac 안 쓰고 Windows+WSL2로 버티는 이유를 설명해달라고 했다. 간단하다: "같은 성능에 훨씬 싸다."
WSL2가 진짜 충분한지 벤치마크와 설정 팁을 공유한다.
WSL2 vs 네이티브 Linux 벤치마크
같은 하드웨어에서 테스트했다:
- Intel Core i7-12700K (12 cores)
- 32GB RAM
- Samsung 990 Pro NVMe
작업 1: Node.js 빌드 (webpack 대용량 프로젝트)
| Windows CMD | WSL2 Ubuntu | 네이티브 Ubuntu | |
|---|---|---|---|
| 시간 | 45.2s | 32.1s | 31.8s |
| CPU 사용률 | - | 95% | 97% |
WSL2와 네이티브는 거의 같다. Windows CMD는 현저히 느리다.
작업 2: Rust 컴파일 (릴리스 빌드)
| Windows CMD | WSL2 | 네이티브 Ubuntu | |
|---|---|---|---|
| 시간 | 78.3s | 52.4s | 51.9s |
| 메모리 | - | 8.2GB | 8.1GB |
작업 3: Docker 이미지 빌드 (Node.js + 의존성)
| WSL2 + Docker Desktop | 네이티브 + Docker | ||
|---|---|---|---|
| 시간 | 24.1s | 21.3s |
결론: WSL2는 충분하다
네이티브와 비교해 1-10% 느리다. 하지만:
- 비용: Mac 3,500 vs Windows 1,200 (같은 성능 기준)
- 소프트웨어 호환성: Visual Studio, Office, Windows 전용 도구
- 게임, 영상 편집도 Windows가 낫다
10% 성능 차이는 무시할 만하다.
.wslconfig 최적화
기본 WSL2는 느릴 수 있다. .wslconfig 파일로 최적화하자.
위치: C:\Users\<YourUsername>\.wslconfig
[wsl2]
# CPU 코어 수 (기본: 모든 코어)
processors=8
# 메모리 제한 (기본: 80% of RAM)
memory=16GB
# 스왑 메모리 (기본: 25% of memory)
swap=2GB
# Windows 파일 시스템 성능
localhostForwarding=true
# IPv6 지원
ipv6=true
[interop]
# Windows에서 Linux 명령어 호출 가능 (기본: true)
enabled=true
# Windows PATH를 WSL에 추가 (기본: true, 성능 미향상이면 false)
appendWindowsPath=true
[boot]
# WSL 부팅 시간 제한 (기본: 무제한)
systemdLoginServices=lxss
권장 설정 (32GB RAM, i7-12700K 기준):
[wsl2]
processors=10
memory=24GB
swap=2GB
localhostForwarding=true
[interop]
enabled=true
appendWindowsPath=false # ← 성능 향상
VHD 크기 관리
WSL2는 VHD(Virtual Hard Disk)를 쓴다. 파일 저장소에서 우주 용량을 먹을 수 있다.
위치: C:\Users\<YourUsername>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_*/LocalState\ext4.vhdx
크기 확인:
wsl --list --verbose
VHD 크기 제한하기:
# .wslconfig에 추가
[wsl2]
swap=1GB # 스왑 줄이기
# 또는 수동으로
diskpart
select vdisk file="C:\Users\user\AppData\Local\Packages\...\ext4.vhdx"
detach vdisk
compact vdisk
자동 정리 (매주):
$vhdPath = "C:\Users\$env:USERNAME\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"
# WSL 종료
wsl --terminate Ubuntu
# 동적으로 resize
param ([int]$SizeGB = 256)
$vhdx = $vhdPath
diskpart | Out-Null
@"
select vdisk file="$vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
"@ | diskpart
Docker 성능 최적화
Docker for Desktop + WSL2 조합이 느릴 수 있다.
최적 설정 (Docker Desktop settings):
Resources:
- CPUs: 8
- Memory: 16GB
- Swap: 2GB
- Disk image size: 256GB
Advanced:
- Use VirtioFS for file sharing (✓)
또는 WSL2에 Docker를 직접 설치:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# 권한 설정
sudo usermod -aG docker $USER
# WSL 재시작 후
docker run hello-world
벤치마크 (Docker Desktop vs native Docker in WSL2):
| 작업 | Docker Desktop | WSL2 native Docker |
|---|---|---|
| 이미지 빌드 | 24.1s | 19.3s |
| 컨테이너 시작 | 2.1s | 0.8s |
WSL2 native Docker가 20% 더 빠르다.
파일 시스템 성능
Windows 파일 시스템에서 WSL 작업은 느리다.
나쁜 예:
# ❌ Windows 파일 시스템에서 빌드
cd /mnt/c/Users/user/projects/my-app
npm run build # 70s
좋은 예:
# ✅ WSL 파일 시스템에서 빌드
cd ~/projects/my-app # (WSL의 home: /home/user/)
npm run build # 32s
차이가 크다. WSL 내부 파일 시스템에서 작업하자.
IDE 설정: VS Code Remote + WSL
이건 필수다. VS Code Remote WSL 확장으로 WSL의 코드를 Windows VS Code에서 편집할 수 있다.
설치:
Extension: Remote - WSL (Microsoft 공식)
사용:
code /home/user/projects/my-app # WSL에서 실행
# 또는 VS Code에서
Ctrl+Shift+P -> Remote-WSL: Reopen Folder in WSL
이제 VS Code는 WSL의 터미널, 디버거, 터미널 모두를 사용한다. 성능은 WSL 수준이다.
패키지 관리자
WSL2 Ubuntu를 설치한 후 첫 번째:
sudo apt update
sudo apt upgrade -y
# 필수 도구
sudo apt install -y build-essential curl git wget
Node.js:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 18
nvm use 18
Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
결론
WSL2는 프로 개발자 환경으로 충분하다. 특히:
- 가성비가 좋다 (Mac의 1/3 비용)
- 성능은 거의 비슷 (1-10% 느림)
- Windows 도구를 여전히 쓸 수 있다
- VS Code Remote가 완벽하다
유일한 단점: 게임과 영상 편집은 Windows 네이티브가 낫다.
내 추천: Windows 전문가라면 WSL2를 쓰세요. 성능 차이는 무시할 만하고, 비용은 크게 줄어듭니다.