windows 11

앱 목록을 넘어 설정까지: winget configure로 새 PC 세팅을 파일 하나로

지난 글에서는 winget export와 import로 지금 쓰는 앱 목록을 파일로 저장하고, 새 PC에 한 번에 설치하는 방법을 정리했습니다. 다만 그 파일이 옮기는 건 앱 목록뿐이었습니다. 파일 탐색기에 확장자를 표시하게 해 두었는지, 전원 설정을 어떻게 해 두었는지 같은 윈도우 설정은 따라오지 않았습니다.

winget configure는 그 다음 단계입니다. 설치할 앱과 윈도우 설정을 구성 파일 하나에 함께 적어 두고, 명령 한 번으로 PC를 그 상태로 맞춥니다. Microsoft가 개발 환경 세팅을 염두에 두고 만든 기능이라 예제도 개발 도구 위주지만, 원리는 일반 사용자의 새 PC 세팅에도 그대로 쓸 수 있습니다.

export 파일과 무엇이 다른가

export가 만든 파일은 “지금 이 PC에 무엇이 설치돼 있나”를 기록한 목록입니다. 반대로 configure의 구성 파일은 “이 PC가 어떤 상태여야 하나”를 적어 둔 선언입니다. 적어 둔 상태와 실제 PC가 다르면, winget이 PowerShell DSC라는 윈도우 구성 도구와 함께 차이 나는 부분만 설치하고 설정해서 맞춥니다.

다시 실행해도 이미 갖춰진 항목은 건드리지 않고 빠진 것만 채웁니다. 세팅이 흐트러졌을 때 파일을 다시 돌리면 원래 상태로 돌아오는 식입니다.

준비: winget 버전 확인

configure 명령을 쓰려면 winget 버전이 v1.6.2631 이상이어야 합니다. 지난 글에서처럼 버전부터 확인합니다.

winget --version

낮게 나오면 Microsoft Store에서 앱 설치 관리자(App Installer)를 업데이트하면 됩니다. 요즘 윈도우 11 PC라면 대부분 그보다 높으니 확인만 하고 넘어가면 됩니다.

구성 파일 만들기

구성 파일은 YAML 형식의 텍스트 파일입니다. 메모장으로도 쓸 수 있지만, 들여쓰기가 틀리면 바로 오류가 나는 형식이라 VS Code에 YAML 확장(Red Hat)을 깔고 쓰는 편이 편합니다. 스키마를 연결해 두면 잘못 쓴 부분을 그 자리에서 알려 줍니다.

파일 이름은 자유롭게 지어도 되지만, 확장자를 .winget으로 붙이는 것이 규칙입니다. 예시는 my-setup.winget으로 하겠습니다. 내용은 이렇게 생겼습니다.

# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2
properties:
  assertions:
    - resource: Microsoft.Windows.Developer/OsVersion
      directives:
        description: 윈도우 11인지 확인
        allowPrerelease: true
      settings:
        MinVersion: '10.0.22000'
  resources:
    - resource: Microsoft.WinGet.DSC/WinGetPackage
      directives:
        description: VS Code 설치
        allowPrerelease: true
      settings:
        id: Microsoft.VisualStudioCode
        source: winget
    - resource: Microsoft.WinGet.DSC/WinGetPackage
      directives:
        description: PowerToys 설치
        allowPrerelease: true
      settings:
        id: Microsoft.PowerToys
        source: winget
  configurationVersion: 0.2.0

읽는 법은 어렵지 않습니다. 첫 줄은 이 파일이 어떤 규칙(스키마)을 따르는지 적는 주석입니다. assertions는 실행 전에 확인할 전제 조건입니다. 여기서는 윈도우 버전이 10.0.22000(윈도우 11) 이상인지를 봅니다. 전제가 맞지 않으면 그 조건에 걸린 항목은 건너뛰고 나머지만 진행합니다.

resources가 본론입니다. 한 덩어리가 작업 하나입니다. resource에는 어떤 도구가 일을 맡는지, directives에는 설명과 권한 같은 부가 정보, settings에는 실제 값이 들어갑니다. 예시에는 WinGetPackage로 앱을 설치하는 항목 둘이 들어 있습니다. 앱 설치 항목은 settings의 id만 바꾸면 원하는 앱으로 교체할 수 있습니다. 패키지 ID는 지난 글의 export 파일에 적혀 있던 그 ID와 같습니다.

주의할 점이 두 가지 있습니다. 들여쓰기는 공백으로만 하고 탭을 쓰면 안 됩니다. 그리고 10.0.22000처럼 숫자와 점으로 된 값은 따옴표로 감싸야 버전 문자열로 제대로 읽힙니다.

나중에 관리자 권한이 필요한 설정 항목을 넣게 되면, 그 항목에 securityContext: elevated를 적어 둡니다. 그러면 실행 시작 단계에서 사용자 계정 컨트롤(UAC) 확인이 한 번만 뜨고, 항목마다 멈추지 않습니다.

실행 전에 검사하기

바로 적용하기 전에 파일이 올바른지부터 검사할 수 있습니다.

winget configure validate -f .\my-setup.winget
winget configure test -f .\my-setup.winget

validate는 파일 형식과 내용이 규칙에 맞는지 확인합니다. test는 지금 PC가 파일에 적힌 상태와 같은지를 검사만 하고 아무것도 바꾸지 않습니다. 처음에는 test로 “무엇이 부족한지”를 보고, 납득이 가면 적용하는 순서가 안전합니다. 파일에 무엇이 들어 있는지 사람이 읽는 형태로 보고 싶으면 winget configure show -f .\my-setup.winget도 있습니다.

적용하기

적용 명령은 한 줄입니다.

winget configure -f .\my-setup.winget --accept-configuration-agreements

--accept-configuration-agreements는 구성에 필요한 모듈을 내려받는 과정에서 나오는 동의 확인을 미리 넘기는 옵션입니다. 이 옵션을 빼면 실행 도중 확인을 기다리며 멈춥니다. 탐색기에서 구성 파일을 두 번 클릭해 실행하는 방법도 있습니다.

실행이 끝나면 항목마다 적용됐는지, 건너뛰었는지, 실패했는지가 표시됩니다. 하나가 실패해도 전체가 멈추지는 않으니, 이유를 확인하고 파일을 고쳐서 다시 실행하면 됩니다.

조심할 점

인터넷에서 받은 구성 파일은 그대로 실행하면 안 됩니다. 구성 파일은 실행되는 순간, 파일이 시키는 대로 모듈을 내려받아 PC 설정을 바꿉니다. 남이 만든 파일은 메모장으로 열어 내용을 끝까지 읽어 보고, 모르는 리소스가 있으면 그 항목은 지우고 실행하세요. Microsoft도 적용 전에 파일이 믿을 만한지 확인하라고 안내합니다.

한계도 분명합니다. 파일에 적을 수 있는 건 DSC 리소스가 준비된 항목뿐이라, 윈도우 설정 전부를 다룰 수는 없습니다. 이 글의 예제가 앱 설치만으로 된 것도 그 때문입니다. 최근 winget에 DSC v3 기반의 새 형식이 추가됐는데, 기존 0.2 형식도 계속 쓸 수 있고 공개된 예제 대부분이 0.2라 이 글도 0.2로 맞췄습니다.

출처

Add Comment

Click here to post a comment

Archives