TechFeedTechFeed
개발자 작업환경

WSL2로 Windows를 개발 메인 환경으로 쓴 1년 — macOS를 포기한 백엔드 개발자의 실제 기록

맥북 대신 Windows + WSL2를 메인 개발 환경으로 전환한 백엔드 개발자의 1년 경험을 3인칭으로 정리했다. .wslconfig 설정, Docker 성능, 파일시스템 함정, 실제 결론까지.

한 줄 요약: 맥북 대신 Windows + WSL2를 메인 개발 환경으로 전환한 백엔드 개발자가 1년간 겪은 실제 경험 — 뭐가 됐고, 뭐가 안 됐고, 지금은 어떻게 쓰고 있는지.

이 글이 필요한 사람
  • macOS 가격이 부담스러워서 Windows 전환을 고민 중인 백엔드 개발자
  • WSL2가 실제로 쓸 만한지 직접 경험담이 궁금한 분
  • Docker, Python, Node.js 등 Unix 기반 툴체인을 Windows에서 구성하려는 분

※ 이 글은 Node.js + PostgreSQL 기반 SaaS를 개발하는 백엔드 개발자 이씨(가명)의 1년간 경험을 3인칭으로 재구성한 케이스 스터디다. 2025년 초 전환 시작, 2026년 2월 기준 작성.

전환의 발단 — macOS를 떠난 이유

이씨는 5년간 맥북 프로를 메인 개발 머신으로 써왔다. 2024년 말, 맥북 M3 Pro 가격을 보고 멈칫했다. 동등 스펙 기준 윈도우 노트북 대비 약 1.5배 차이. 게다가 이씨의 주된 사이드 프로젝트는 게임이었다. macOS는 게이밍 플랫폼으로 사실상 비어 있다.

결정적인 계기는 회사 정책 변경이었다. 팀 전체가 지급 노트북을 Windows 기기로 통일했고, 이씨는 "집에서도 같은 환경"을 써보기로 했다. 개인 맥북을 팔고, Lenovo ThinkPad X1 Carbon(2024) + WSL2 조합으로 전환했다. 예산 절감 40만 원, 무게 1.12kg, 배터리 22시간이라는 계산이 맞았다.

그가 가장 걱정한 건 두 가지였다. Docker 성능과 Unix 툴체인의 완성도. 맥북에서 brew install 한 줄로 되던 것들이 Windows에서는 얼마나 복잡해질지 알 수 없었다.

WSL2 초기 세팅 — 첫 3일간 한 일

이씨는 WSL2 설치에서 첫 번째 장벽을 만났다. Windows 11 Home 에디션에서 기본 설치 명령은 동작했지만, 설치 후 Ubuntu를 실행하면 "WslRegisterDistribution failed" 오류가 났다. 원인은 BIOS에서 Virtualization 옵션이 꺼져 있던 것이었다. BIOS 진입 후 "Intel VT-x" 활성화로 해결했다.

초기 환경 구성에는 약 3일이 걸렸다. Ubuntu 22.04 LTS를 기본 distro로 선택하고, dotfiles 레포를 클론해서 zsh, Neovim, tmux 설정을 옮겼다. Node.js는 nvm으로, Python은 pyenv로 관리했다. VS Code의 "Remote - WSL" 확장을 설치하면 WSL2 파일시스템에서 직접 편집이 가능해졌다.

WSL2 설치 및 Ubuntu 배포판 구성
# PowerShell (관리자 모드) wsl --install wsl --install -d Ubuntu-22.04 # 설치 후 Ubuntu 터미널에서 sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential curl git zsh # oh-my-zsh 설치 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # Node.js — nvm 방식 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash nvm install --lts nvm use --lts # Python — pyenv 방식 curl https://pyenv.run | bash pyenv install 3.12.3 pyenv global 3.12.3

Docker는 Docker Desktop for Windows를 설치하고 "Use the WSL 2 based engine" 옵션을 켰다. WSL2 통합 설정에서 Ubuntu-22.04를 활성화하면 WSL2 터미널에서 docker 명령을 바로 쓸 수 있었다. 이씨는 이 과정에서 "생각보다 macOS랑 비슷하다"는 인상을 받았다고 한다.

WSL2 Ubuntu 터미널과 Windows Terminal에서 zsh 환경 구성 완료 화면
Windows Terminal에 WSL2 Ubuntu를 연결하면 macOS 터미널과 사실상 동일한 UX가 구현된다

3개월 차 — 실제로 잘 됐던 것들

3개월간 이씨가 가장 만족한 건 VS Code Remote WSL 경험이었다. WSL2 파일시스템 안에서 직접 코드를 열면 linting, TypeScript 타입 검사, 터미널 명령 모두 Linux 환경 그대로 동작한다. macOS에서 개발할 때와 사실상 동일한 DX였다.

Node.js 기반 프로젝트의 npm install과 빌드 속도는 macOS M2와 비교해 큰 차이를 느끼지 못했다. Docker 컨테이너 기동 시간은 오히려 빨라진 케이스도 있었다. 이씨가 주로 쓰는 PostgreSQL + Redis 컨테이너 스택은 docker compose up 기준 평균 4초 이내로 올라왔다.

또 하나의 장점은 리소스 분리였다. macOS에서는 브라우저, 슬랙, Docker가 모두 같은 커널을 공유했지만, WSL2는 VM 위에 격리되어 있어서 메모리 사용 패턴이 더 예측 가능했다. 이씨는 WSL2에 8GB를 고정 할당하고 Windows 측에 나머지를 배분했다.

VS Code Remote WSL에서 Node.js 프로젝트를 열고 통합 터미널로 npm 명령을 실행하는 화면
VS Code Remote WSL: Windows GUI + Linux 실행 환경 조합, 체감상 macOS 개발과 거의 동일

6개월 차 — 예상 못한 장벽들

6개월 차에 이씨는 WSL2의 파일시스템 경계 문제를 처음으로 심각하게 겪었다. Windows 드라이브(/mnt/c/)에 있는 파일을 WSL2에서 접근하면 I/O 속도가 수십 배 느려진다. 이씨는 초반에 OneDrive 폴더 안에 프로젝트를 넣었다가 npm install에 4분이 걸리는 상황을 겪었다.

해결책은 명확했다. 모든 프로젝트 파일을 WSL2 내부 파일시스템(~/projects/)으로 옮기는 것이다. Windows 측에서 파일을 건드릴 일이 없으면 I/O 병목은 사라진다. 그러나 이 경계선을 처음 셋업 때 명확히 인지하지 못하면 "WSL2 느리다"는 오해를 하게 된다.

두 번째 장벽은 Docker Desktop 메모리 누수였다. 하루 종일 작업하면 Docker Desktop 프로세스가 Windows 측에서 6~8GB를 점유하는 현상이 반복됐다. 이 문제는 2025년 중반 Docker Desktop 업데이트로 개선됐지만, 이씨가 처음 전환했던 당시에는 하루에 한 번 재시작이 필요했다.

WSL2 실사용에서 자주 발생하는 3가지 함정
  • 파일 위치: 프로젝트를 /mnt/c/에 두면 I/O가 10~50배 느려진다. 반드시 WSL2 홈 디렉토리(~/) 안에 넣을 것
  • 메모리 미제한: 기본값으로 두면 WSL2가 물리 메모리의 50%까지 점유한다. .wslconfig로 상한을 지정할 것
  • 포트 충돌: Hyper-V 가상 스위치와 WSL2 네트워킹이 충돌하면 localhost 접근이 끊길 수 있다. mirrored 네트워크 모드(Windows 11 22H2+) 적용으로 해결

뒤늦게 찾은 핵심 설정 — 이걸 먼저 했더라면

이씨가 6개월 시점에 .wslconfig 파일을 제대로 설정하면서 체감 품질이 크게 달라졌다고 한다. 이 파일은 Windows 사용자 홈 디렉토리(C:\Users\username\.wslconfig)에 위치하며, WSL2 VM 전체의 리소스 상한과 네트워크 모드를 제어한다.

.wslconfig — WSL2 VM 리소스 최적화 설정 (Windows 11 22H2+)
# C:\Users\{username}\.wslconfig [wsl2] # 메모리 상한 (권장: 물리 RAM의 40~50%) memory=8GB # CPU 코어 수 (물리 코어 수 이하로 지정) processors=6 # 스왑 파일 크기 swap=4GB # 네트워크 모드: mirrored = Windows와 IP 공유 (22H2+) networkingMode=mirrored # DNS 터널링 활성화 (VPN 환경에서 필수) dnsTunneling=true # 자동 메모리 해제 활성화 (gradualRelease 권장) autoMemoryReclaim=gradualRelease # 파일시스템 캐시 해제 허용 [experimental] sparseVhd=true

특히 networkingMode=mirrored는 Hyper-V와의 충돌로 VPN이나 로컬 포트 바인딩이 불안정했던 문제를 해결했다. 이 설정 하나로 이씨가 경험하던 "갑자기 localhost:3000에 접근이 안 된다"는 현상이 사라졌다.

autoMemoryReclaim=gradualRelease는 Linux 커널의 파일 캐시가 차지하던 메모리를 점진적으로 Windows에 돌려주는 설정이다. 장시간 작업 시 메모리가 계속 점유되던 문제가 눈에 띄게 개선됐다.

Windows 작업 관리자에서 WSL2 메모리 사용량이 .wslconfig 설정 전후로 줄어든 비교 화면
.wslconfig 적용 전(좌): Vmmem 프로세스 12GB / 적용 후(우): 8GB 상한 유지 — 장시간 작업 시 체감 차이가 크다

1년 후 — 결정적 순간들과 지금의 결론

1년간 이씨가 WSL2로 처리한 주요 작업은 Node.js + TypeScript 백엔드 서비스 개발, PostgreSQL 마이그레이션 스크립트 작성, Python 기반 데이터 파이프라인 구축이었다. 이 모든 작업에서 WSL2는 "충분히" 작동했다고 한다. macOS에서 불가능했던 것이 가능해진 건 없지만, 불가능해진 것도 없었다.

가장 크게 달라진 건 게임과 개발을 하나의 기기에서 할 수 있게 됐다는 점이다. 이씨는 퇴근 후 같은 노트북에서 Steam을 열고, 작업할 때는 Windows Terminal에서 WSL2를 열었다. 두 환경 전환에 걸리는 시간은 3초였다.

반면 1년간 계속 불편했던 것도 있었다. GUI 앱이 필요한 경우였다. Figma, Postman 같은 앱은 Windows 버전을 쓰면 됐지만, Linux 전용 디버깅 도구나 일부 오픈소스 CLI의 GUI 컴포넌트는 WSLg(WSL2 GUI 지원)를 통해 실행했는데 반응속도가 네이티브 대비 미묘하게 느렸다. 일상 업무에서는 문제없었지만, 빠른 반복이 필요한 UI 프로토타이핑에서는 아쉬움이 남았다.

WSL2 전환 추천 / 비추천 대상

추천
  • Node.js, Python, Go, Rust 기반 백엔드 개발자
  • Docker Compose를 주로 쓰는 개발 워크플로우
  • Windows 기기를 회사에서 지급받은 경우
  • 게이밍과 개발을 한 기기에서 해야 하는 상황

비추천
  • iOS 앱 개발자 (Xcode 필수 → macOS만 가능)
  • Figma/Sketch 기반 디자인-개발 병행 작업이 많은 경우
  • 네이티브 Linux 커널 모듈 개발 (VM 위라 한계 존재)
WSL2Windows개발환경LinuxDockerVS Code개발자 워크플로우백엔드터미널dotfiles

관련 도구

관련 포스트

개발자 터미널 2026 비교 — Warp vs iTerm2 vs Ghostty vs Alacritty2026-03-21개발자 맥북 초기 셋업 체크리스트 2026 — Homebrew·dotfiles·CLI 도구·VS Code 완전 정리2026-04-14개발자용 27인치 모니터 추천 20262026-03-01코딩용 기계식 키보드 추천 20262026-03-02