Windows 패키지 관리가 필요한 이유
Linux의 apt나 macOS의 brew처럼, Windows에서도 명령 한 줄로 소프트웨어를 설치/업데이트/삭제할 수 있습니다. winget은 Microsoft 공식 패키지 관리자이고, Chocolatey는 커뮤니티 기반의 패키지 관리자입니다. 두 도구 모두 반복적인 수동 설치를 자동화하고, 개발 환경을 코드로 관리할 수 있게 해줍니다.
이 글에서는 winget과 Chocolatey의 설치, 패키지 관리, 자동화 스크립트 작성법을 비교하며 정리합니다.
Winget 기본 사용법
winget은 Windows 10(1809 이상)과 Windows 11에 기본 포함되어 있습니다. Microsoft Store의 “앱 설치 관리자”를 통해 업데이트됩니다.
# winget 버전 확인
winget --version
# 출력 예시: v1.9.25180
# 패키지 검색
winget search "visual studio code"
# 출력 예시:
# 이름 ID 버전
# Visual Studio Code Microsoft.VisualStudioCode 1.96.0
# Visual Studio Code Insiders Microsoft.VisualStudioCode.Insiders 1.97.0
# 패키지 설치
winget install Microsoft.VisualStudioCode
# 사일런트 설치 (대화형 UI 없이)
winget install Microsoft.VisualStudioCode --silent
# 패키지 정보 확인
winget show Microsoft.VisualStudioCode
# 출력: 이름, 버전, 게시자, 홈페이지, 라이선스 등 표시
Winget 패키지 관리
설치된 패키지의 업데이트와 삭제도 간단합니다.
# 설치된 패키지 목록 확인
winget list
# 출력: 시스템에 설치된 모든 소프트웨어 목록
# 업데이트 가능한 패키지 확인
winget upgrade
# 출력 예시:
# 이름 ID 현재 버전 사용 가능
# Git Git.Git 2.43.0 2.44.0
# Node.js OpenJS.NodeJS.LTS 20.11.0 22.12.0
# 특정 패키지 업데이트
winget upgrade Git.Git
# 모든 패키지 업데이트
winget upgrade --all
# 패키지 삭제
winget uninstall Microsoft.VisualStudioCode
Winget으로 환경 자동화
winget export와 winget import를 사용하면 설치된 패키지 목록을 파일로 내보내고, 다른 PC에서 동일하게 복원할 수 있습니다.
# 설치된 패키지 목록 내보내기
winget export -o D:\backup\packages.json
# JSON 파일로 패키지 ID와 버전이 저장됨
# 다른 PC에서 일괄 설치
winget import -i D:\backup\packages.json --accept-package-agreements
# 직접 일괄 설치 스크립트 작성
$packages = @(
"Microsoft.VisualStudioCode",
"Git.Git",
"OpenJS.NodeJS.LTS",
"Python.Python.3.12",
"Docker.DockerDesktop",
"JetBrains.IntelliJIDEA.Community",
"Mozilla.Firefox",
"Notepad++.Notepad++"
)
foreach ($pkg in $packages) {
Write-Host "설치 중: $pkg" -ForegroundColor Cyan
winget install $pkg --silent --accept-package-agreements
}
Write-Host "모든 패키지 설치 완료!" -ForegroundColor Green
Chocolatey 설치 및 기본 사용법
Chocolatey는 NuGet 기반의 Windows 패키지 관리자입니다. 커뮤니티 저장소에 9,000개 이상의 패키지가 등록되어 있습니다.
# Chocolatey 설치 (관리자 권한 PowerShell에서 실행)
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 설치 확인
choco --version
# 출력 예시: 2.4.1
# 패키지 검색
choco search nodejs
# 출력 예시:
# nodejs 22.12.0 [Approved]
# nodejs-lts 22.12.0 [Approved]
# nvm 1.1.12 [Approved]
# 패키지 설치
choco install nodejs-lts -y
# -y 플래그: 모든 확인 메시지에 자동 승인
Chocolatey 패키지 관리
# 설치된 패키지 목록
choco list
# 출력 예시:
# chocolatey 2.4.1
# git 2.44.0
# nodejs-lts 22.12.0
# 3 packages installed.
# 패키지 업데이트
choco upgrade nodejs-lts -y
# 모든 패키지 업데이트
choco upgrade all -y
# 패키지 삭제
choco uninstall nodejs-lts -y
# 패키지 정보 확인
choco info nodejs-lts
# 출력: 패키지 설명, 버전, 다운로드 수, 의존성 등
Chocolatey로 환경 자동화
Chocolatey는 packages.config XML 파일로 일괄 설치를 지원합니다.
<!-- packages.config -->
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="git" version="2.44.0" />
<package id="nodejs-lts" />
<package id="python312" />
<package id="vscode" />
<package id="docker-desktop" />
<package id="postman" />
<package id="7zip" />
<package id="googlechrome" />
</packages>
<!-- 실행: choco install packages.config -y -->
# packages.config로 일괄 설치
choco install packages.config -y
# 설치된 패키지 목록을 config로 내보내기
choco export packages.config
Winget vs Chocolatey 비교
| 항목 | Winget | Chocolatey |
|---|---|---|
| 개발사 | Microsoft (공식) | Chocolatey Software (커뮤니티) |
| 패키지 수 | ~4,000+ | ~9,000+ |
| 설치 필요 | Windows 기본 포함 | 별도 설치 필요 |
| 관리자 권한 | 대부분 불필요 | 대부분 필요 |
| 내보내기/가져오기 | JSON (export/import) | XML (packages.config) |
| GUI | 없음 (CLI 전용) | Chocolatey GUI 별도 설치 |
| 자동 업데이트 | winget upgrade --all | choco upgrade all -y |
| 기업용 | 무료 | 무료 + 유료(Business) |
두 도구 함께 사용하기
winget과 Chocolatey는 충돌 없이 함께 사용할 수 있습니다. 일반적으로 winget에 있는 패키지는 winget으로, 없는 패키지는 Chocolatey로 관리하는 방식이 효율적입니다.
# 개발 환경 자동 설정 스크립트 (setup-dev.ps1)
Write-Host "=== winget 패키지 설치 ===" -ForegroundColor Cyan
$wingetPkgs = @(
"Microsoft.VisualStudioCode",
"Git.Git",
"Docker.DockerDesktop"
)
foreach ($pkg in $wingetPkgs) {
winget install $pkg --silent --accept-package-agreements
}
Write-Host "=== Chocolatey 패키지 설치 ===" -ForegroundColor Cyan
$chocoPkgs = @(
"nvm", # winget에 없는 패키지
"make", # GNU Make
"jq" # JSON 처리 도구
)
foreach ($pkg in $chocoPkgs) {
choco install $pkg -y
}
Write-Host "개발 환경 설정 완료!" -ForegroundColor Green
실전 팁
- winget 우선: Microsoft 공식 도구이므로 winget에 있는 패키지는 winget으로 설치하는 것을 권장
- Chocolatey 보조: winget에 없는 CLI 도구(make, jq, wget 등)는 Chocolatey로 설치
- 스크립트 버전 관리: 설치 스크립트를 Git으로 관리하면 여러 PC에서 동일한 환경을 재현할 수 있음
- 정기 업데이트:
winget upgrade --all과choco upgrade all -y를 주기적으로 실행하여 보안 패치를 적용 - Scoop: 세 번째 대안으로 Scoop이 있음. 관리자 권한 없이 사용자 디렉토리에 설치하는 방식으로, 개인 개발 환경에 적합