Windows에서 Dev Container 성능 극대화하기 | Mike Evans-Larah | endjin


Windows에서 Dev Container 성능 극대화하기

개요

이 문서는 Windows 환경에서 VS Code Dev Container의 성능을 극적으로 향상시키는 방법에 대한 종합적인 가이드입니다. 주요 핵심은 파일시스템 I/O 병목현상을 해결하여 Linux 네이티브 머신 수준의 반응성을 확보하는 것입니다.

핵심 문제점 분석

성능 저하의 원인

Windows에서 Dev Container의 성능이 제한되는 주요 원인은 파일시스템 I/O 병목현상입니다:

  • Windows 파일시스템에 소스 코드가 위치할 때

  • Docker가 느린 네트워크 기반 프로토콜을 사용하여 WSL 내 컨테이너 환경에 마운트

  • I/O 집약적 작업에서 성능이 현저히 저하됨

실제 사례

Python 프로젝트에서 데이터 변환 파이프라인 작업 시:

  • 의존성 설치 (poetry, uv 사용)

  • 대규모 데이터 처리 테스트 실행

  • Git 작업 수행

이러한 작업들이 예상보다 몇 배 더 오래 걸리는 문제가 발생했습니다.

해결책: WSL 파일시스템 활용

핵심 솔루션

리포지토리를 WSL 파일시스템에 직접 클론하여 Docker가 네이티브 고속 바인드 마운트를 사용할 수 있도록 합니다.

결과: 크로스 운영체제 성능 패널티를 완전히 우회하여 Linux 네이티브 머신 수준의 반응성 확보

단계별 구현 가이드

1단계: WSL 배포판 설정

WSL 설치

PowerShell 또는 명령 프롬프트를 관리자 권한으로 실행:


wsl --install

  • 기본 Ubuntu 배포판이 설치됩니다

  • 첫 시작 시 사용자명과 비밀번호 생성 프롬프트가 표시됩니다

기존 WSL 확인


wsl --list --verbose

2단계: Docker Desktop WSL 통합 활성화

설정 방법

  1. Docker Desktop 설정 열기

  2. Resources > WSL Integration 이동

  3. 특정 WSL 배포판(예: Ubuntu)에 대한 토글 활성화

대안 도구들

  • Rancher Desktop: Preferences > WSL Integration에서 동일한 과정

  • Podman: 별도 설정 과정 필요 (공식 문서 참조)

3단계: WSL 파일시스템에 리포지토리 클론

핵심 포인트

Windows 드라이브(C:\Users<사용자명>\Repos) 대신 WSL 파일시스템에 직접 클론

구현 단계

  1. WSL 터미널 열기 (명령 프롬프트에서 wsl 입력 또는 시작 메뉴에서 Ubuntu 검색)

  2. 원하는 위치로 이동:


cd ~

mkdir repos

cd repos

  1. 리포지토리 클론:

git clone https://github.com/<your-org>/<your-repo>.git

성능 차이의 이유

  • WSL 파일시스템 (/home/<사용자명>/repos/<리포지토리>): 고효율 바인드 마운트 사용

  • Windows 드라이브 (/mnt/c/Users/<사용자명>/repos/<리포지토리>): 비효율적 네트워크 프로토콜 사용

4단계: VS Code에서 리포지토리 열기

필수 요구사항

  • Windows 머신에 Visual Studio Code 설치

  • Remote - WSLDev Containers 확장 설치 (또는 Remote Development Extension Pack)

실행 방법

  1. WSL 터미널에서 클론된 리포지토리 디렉토리로 이동:

cd <your-repo>

  1. VS Code 실행:

code .

확인 방법

VS Code 좌측 하단에 WSL: Ubuntu (또는 배포판 이름) 표시기가 나타납니다.

5단계: 컨테이너에서 다시 열기

전제 조건

리포지토리에 .devcontainer 폴더와 필요한 구성 파일이 설정되어 있어야 합니다.

실행 방법

  1. VS Code 좌측 하단의 파란색 표시기 클릭

  2. 명령 팔레트에서 “Reopen in Container” 선택

  3. 또는 Ctrl+Shift+P로 명령 팔레트 열고 “Reopen in Container” 입력

결과

  • VS Code가 Dev Container를 빌드하고 연결합니다

  • 네이티브 바인드 마운트 사용으로 현저한 성능 향상 경험

성능 향상 효과

개선되는 작업들

  • uv sync: 패키지 동기화

  • npm install: Node.js 의존성 설치

  • dotnet build: .NET 빌드

  • 대규모 Git 작업: 클론, 풀, 푸시 등

체감 효과

Dev Container가 Linux 네이티브 머신에서 작업하는 것처럼 반응성 있게 동작합니다.

중요 고려사항 및 주의점

Git 및 줄 끝 처리 (CRLF vs. LF)

문제점

  • Windows: CRLF (Carriage Return + Line Feed) 사용

  • Linux/WSL/Docker: LF (Line Feed) 사용

  • 잘못 처리 시 Git에서 줄 끝 차이로 인한 가짜 변경사항 보고

해결책: .gitattributes 파일 사용

리포지토리 루트에 .gitattributes 파일 생성:


* text=auto eol=lf

효과:

  • Git이 자동으로 텍스트 파일 변환 처리

  • 커밋 시 LF 줄 끝 강제 적용

  • 모든 환경에서 일관성 보장

Windows에서 파일 접근

접근 방법

파일 탐색기를 통해 WSL 파일시스템 접근 가능:

  • 좌측 창의 ‘Linux’ 바로가기 사용

  • Ubuntu (또는 다른 배포판) 파일시스템 탐색

  • 클론된 리포지토리로 이동

중요한 경고사항

금지사항: WSL 파일시스템 내 파일을 Windows 애플리케이션으로 수정하지 말 것

허용되는 도구:

  • VS Code (Remote - WSL 확장 사용)

  • WSL 터미널 내에서 직접 파일 작업

금지되는 도구:

  • 메모장 (Notepad)

  • Visual Studio (Code가 아닌 일반 버전)

  • 기타 Windows 네이티브 IDE

위험성

Windows 애플리케이션으로 Linux 파일시스템의 파일을 직접 수정할 경우:

  • 파일 권한 손상

  • 메타데이터 손상

  • 빌드 실패

  • 권한 오류

  • 예측 불가능한 동작

실용적인 팁

개발 워크플로우 최적화

  1. 주요 작업은 VS Code + WSL 연결을 통해 수행

  2. 터미널 작업은 WSL 내에서 직접 실행

  3. Git 작업도 WSL 환경에서 수행

  4. 파일 탐색은 필요시에만 Windows 파일 탐색기 사용

Git Credential Manager 설정

WSL에서 Git 리포지토리를 클론하기 전에 Git Credential Manager 설정을 확인하세요.

성능 모니터링

  • Dev Container 빌드 시간 측정

  • 의존성 설치 시간 비교

  • 테스트 실행 속도 확인

결론

이 가이드의 핵심은 WSL 파일시스템을 활용한 네이티브 바인드 마운트를 통해 Windows에서 Dev Container의 성능을 극대화하는 것입니다.

주요 혜택:

  • 극적인 I/O 성능 향상

  • Linux 네이티브 수준의 반응성

  • 일관된 개발 환경

  • 팀 온보딩 개선

성공적인 구현을 위한 핵심:

  1. WSL 파일시스템에 코드 위치

  2. 적절한 Git 설정 (.gitattributes)

  3. Windows 애플리케이션으로 직접 파일 수정 금지

  4. VS Code + Remote WSL 확장 활용

이러한 설정을 통해 대규모 프로젝트나 많은 의존성을 가진 프로젝트에서도 원활한 개발 경험을 확보할 수 있습니다.

2개의 좋아요