Winget과 Chocolatey — Windows 패키지 관리 가이드

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 exportwinget 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 비교

항목WingetChocolatey
개발사Microsoft (공식)Chocolatey Software (커뮤니티)
패키지 수~4,000+~9,000+
설치 필요Windows 기본 포함별도 설치 필요
관리자 권한대부분 불필요대부분 필요
내보내기/가져오기JSON (export/import)XML (packages.config)
GUI없음 (CLI 전용)Chocolatey GUI 별도 설치
자동 업데이트winget upgrade --allchoco 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 --allchoco upgrade all -y를 주기적으로 실행하여 보안 패치를 적용
  • Scoop: 세 번째 대안으로 Scoop이 있음. 관리자 권한 없이 사용자 디렉토리에 설치하는 방식으로, 개인 개발 환경에 적합

이 글이 도움이 되었나요?