Microsoft / dev-drive

2 개의 포스트

microsoft

Dev Box Ready-To-Code Dev Box images template (새 탭에서 열림)

마이크로소프트는 개발 환경 설정 및 유지보수 시간을 단축하여 개발자 생산성을 높이기 위한 Microsoft Dev Box의 팀 맞춤화(Team Customizations) 및 이미지 생성 기능을 발표했습니다. 이 기능은 마이크로소프트 내부의 1ES(One Engineering System) 팀이 구축한 'Ready to Code' 환경을 기반으로 하며, 현재 3만 5천 명 이상의 내부 개발자들이 이를 통해 표준화된 고성능 개발 환경을 사용하고 있습니다. 결과적으로 복잡한 설정 과정을 자동화하고 팀별 요구사항에 맞춘 유연한 환경 구축이 가능해짐에 따라 기업 전반의 엔지니어링 효율성이 크게 향상될 것으로 기대됩니다. **Ready to Code 환경의 구현과 기술적 이점** * **보안 강화**: Azure 관리 ID(Managed Identity)를 활용하여 이미지 생성 과정에서 필요한 자산에 안전하게 접근하며, 승인된 소스의 아티팩트만을 사용하여 검증된 환경을 구축합니다. * **성능 최적화**: Dev Drive를 사전 구성하고, 보안을 유지하면서도 개발 성능에 최적화된 Windows Defender 설정을 적용하여 빌드 및 작업 속도를 높입니다. * **일관성 및 신뢰성**: 스마트 기본값(Smart Defaults)을 제공하는 템플릿을 통해 팀 간 환경 편차를 줄이고, "내 PC에서는 잘 된다"와 같은 파편화 문제를 해결합니다. * **유지보수 편의성**: Azure Bicep을 사용하여 이미지 정의를 코드화함으로써 복잡한 로직을 모듈화하고, Azure Pipelines를 통해 이미지 업데이트 및 트러블슈팅을 간소화합니다. **1ES 팀의 이미지 관리 및 배포 전략** * **엄격한 테스트**: 템플릿 업데이트 시 PR 완료 전 테스트 이미지를 빌드하고, 실제 고객 환경을 모방한 대규모 이미지 세트를 생성하여 안정성을 검증합니다. * **단계적 출시**: 내부 도그푸딩(Dogfooding)을 시작으로 단계별 릴리스를 진행하며, Bicep 모듈 레지스트리의 경로 태그를 활용해 릴리스 단계를 구분하고 긴급 패치를 신속하게 배포합니다. * **중앙 집중식 개선**: 1ES와 같은 중앙 엔지니어링 팀이 템플릿을 관리함으로써, 회사 전체의 'Ready to Code' 환경에 개선 사항을 일괄적으로 적용할 수 있습니다. **외부 확산 및 실용적인 활용 예시** * **샘플 템플릿 제공**: 마이크로소프트는 내부 템플릿의 핵심 기능을 오픈 소스 저장소(MSBuildSdks, eShop, Axios 등)에 적용해 볼 수 있는 샘플과 가이드를 공유했습니다. * **자동화된 워크플로우**: Git 저장소 복제, 패키지 복원, 빌드, 데스크톱 바로가기 생성 등을 선언적으로 정의할 수 있으며, MSBuild 및 dotnet 프로젝트를 기본적으로 지원합니다. * **이미지 체이닝**: 기본 이미지를 기반으로 파생 이미지를 만드는 '이미지 체이닝' 기능을 통해 반복적인 빌드 시간을 줄이고 효율적인 이미지 계층 구조를 설계할 수 있습니다. * **스마트 환경 설정**: 윈도우 OS 최적화, 긴 경로(Long Path) 활성화, 불필요한 저장소 기능 비활성화 등을 통해 개발 시나리오에 최적화된 환경을 자동으로 구성합니다. 개발 팀은 제공된 Azure Bicep 모듈과 샘플 파이프라인을 활용하여 자신만의 'Ready to Code' 환경을 구축하는 것을 권장합니다. 이를 통해 인프라 설정에 소요되는 리소스를 최소화하고 코드 작성에 더 집중할 수 있는 환경을 마련할 수 있습니다.

microsoft

Copy-on-Write performance and debugging (새 탭에서 열림)

Windows 11의 Dev Drive와 Copy-on-Write(CoW) 링크 기능은 대규모 코드베이스의 빌드 성능을 최대 43%까지 향상시키며, 특히 프로젝트 간 종속성이 깊은 C# 환경에서 탁월한 효율을 발휘합니다. 이 기술은 파일 데이터를 물리적으로 복제하는 대신 동일한 디스크 블록을 참조하는 방식을 통해 I/O 부하를 획기적으로 줄이며, Windows Server 2025 및 Windows 11 24H2에 기본 기능으로 탑재될 예정입니다. 개발자는 전용 도구를 통해 CoW 링크 상태를 모니터링하고 참조 누수를 관리함으로써 최적의 개발 성능을 유지할 수 있습니다. **레포지토리 빌드 성능 테스트 결과** - **C# 및 마이크로서비스 이점:** 프로젝트 간 종속성이 깊어 어셈블리 복사가 빈번한 C# 프로젝트나, 빌드 출력 시 대규모 마이크로서비스 레이아웃을 구성하는 환경에서 최소 10%에서 최대 43%의 빌드 시간 단축 효과가 확인되었습니다. - **언어별 차이:** C++ 프로젝트는 상대적으로 적은 수의 대용량 파일을 생성하고 복사 빈도가 낮아 C#에 비해 성능 향상 폭이 적었으나, 파일 복사 과정이 포함된 경우에는 여전히 이득을 보였습니다. - **병렬성 영향:** 빌드 초기 단계의 병렬 처리는 빨라지지만, 마지막 단계에서 거대 프로젝트들이 선형적으로 빌드되는 구조의 레포지토리는 전체 빌드 시간 단축 효과가 희석될 수 있습니다. **CoW 링크 및 블록 클론 식별 방법** - **참조 상태 확인:** `fsutil file queryExtentsAndRefCounts` 명령어를 사용하여 특정 파일이 CoW 링크인지, 즉 블록 클론(Block Clone) 상태인지 확인할 수 있습니다. - **Ref 카운트의 의미:** 출력 결과 중 `Ref: 0x4`와 같은 값은 해당 디스크 볼륨 내에서 4개의 파일 엔트리가 동일한 물리적 데이터 블록을 공유하고 있음을 나타냅니다. - **메타데이터 관리:** 각 클론된 파일은 참조 추적을 위해 최소 하나 이상의 클러스터를 별도로 사용하여 메타데이터를 관리합니다. **분석 도구(ProcMon, Xperf) 사용을 위한 필터 설정** - **필터 드라이버 허용:** Dev Drive는 보안과 성능을 위해 필터 드라이버 연결을 제한하므로, `fsutil devdrv setfiltersallowed` 명령을 통해 분석 도구 전용 필터를 허용 목록에 추가해야 합니다. - **Xperf 사용 시 주의사항:** 성능 측정을 위해 `FileInfo` 필터를 허용한 경우, 측정이 끝난 후에는 반드시 목록에서 제거하고 드라이브를 재마운트해야 합니다. 이를 방치하면 드라이브 성능이 지속적으로 저하될 수 있습니다. - **상시 허용:** ProcMon 필터와 같은 도구는 실제 분석 도구가 실행 중일 때만 부하를 주므로, 필요에 따라 허용 목록에 상시 유지해도 무방합니다. **참조 누수(Leaked References) 탐지 및 복구** - **클론 한계치:** Dev Drive의 기반인 ReFS는 데이터 블록당 최대 8,176개의 클론을 허용하며, 이를 초과할 경우 복사 오류(`STATUS_BLOCK_TOO_MANY_REFERENCES`)가 발생할 수 있습니다. - **관리 도구 활용:** 장기간 빌드를 반복하여 고립된 참조나 누수가 의심될 경우, 관리자 권한으로 `refsutil leak <드라이브명> /s` 명령을 실행하여 누수된 클러스터를 스캔하고 복구할 수 있습니다. - **사전 감지:** `/d` 파라미터를 사용하면 실제 수정 없이 누수 여부만 미리 파악할 수 있어 시스템 안정성을 점검하는 데 용이합니다. **실용적인 결론 및 제언** 대규모 프로젝트를 운영하는 팀은 Dev Drive 도입 시 NuGet 패키지 캐시를 소스 코드와 동일한 파티션에 배치하여 CoW 이득을 극대화해야 합니다. 또한, 빌드 성능 분석을 위해 필터 드라이버 설정을 변경했다면 성능 유지를 위해 분석 완료 후 불필요한 필터를 반드시 정리하는 습관이 필요합니다.