TrendShift 딥다이브 · 2026-07-15 · Daily #8

Raphire/Win11Debloat 딥다이브
reg importRemove-AppxPackage로 윈도우를 청소하는 파워셸 스크립트

Win11Debloat윈도우 10·11에 미리 깔린 앱을 지우고, 텔레메트리(사용 정보 수집)를 끄고, 광고·추천·AI 기능 같은 거슬리는 요소를 한 번에 정리해 주는 파워셸(PowerShell) 스크립트다. 설치 프로그램이 아니라 파워셸 창에 한 줄만 붙여넣으면 실행되며, 바꾼 것 대부분은 다시 되돌릴 수 있다. "설정을 하나하나 뒤지거나 앱을 일일이 제거하는" 수고를 자동화한 도구다. 기술적으로 흥미로운 점은, 예전의 단일 스크립트 + 앱 목록 텍스트 파일이던 구조가 지금은 JSON 설정으로 동작을 정의하고, 75개 모듈로 쪼개지고, WPF 그래픽 UI까지 갖춘 소프트웨어로 재설계됐다는 것이다. "데이터가 곧 동작"이라는 설계, .reg 파일과 레지스트리, 오프라인 하이브 편집까지 — 윈도우 내부를 자동화하는 방법을 통째로 배울 수 있는 저장소다. (저장소: Raphire/Win11Debloat · MIT · 100% PowerShell 5.1 + WPF · 버전 2026.07.11 · Config·모듈·GUI 재설계 · TrendShift Daily #8)
목차
  1. 프로젝트 한 줄 요약
  2. 왜 지금 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 · 파일 구조 해부
  6. 학습 포인트
  7. 시스템 · 실행 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한 줄 요약

이름부터 뜯어보기 — "Win11(윈도우 11) + Debloat(군살 빼기)" = 윈도우 다이어트

Win11Debloat"윈도우를 깨끗하게 다듬는 파워셸 자동화 스크립트"다. 새 윈도우를 설치하거나 새 노트북을 켜면 캔디크러시·틱톡·엑스박스·코파일럿 같은 앱이 잔뜩 깔려 있고, 사용 정보가 마이크로소프트로 전송되고, 시작 메뉴·검색창·잠금화면에 광고와 추천이 붙는다. Win11Debloat은 이런 것들을 미리 준비된 목록대로 한 번에 제거·차단한다. "블로트웨어(bloatware, 쓸데없이 미리 깔린 군더더기 프로그램)"를 걷어낸다는 뜻에서 디블로트(debloat)라고 부른다.

이름은 "Win11"이지만 윈도우 10과 11을 모두 지원한다. 기능마다 "이 윈도우 빌드에서만 적용"이라는 조건이 붙어 있어서, 같은 스크립트가 두 OS를 안전하게 다룬다(§4에서 자세히). 그리고 설치가 필요 없다 — 프로그램을 깔지 않고, 파워셸 창에 한 줄만 붙여넣으면 인터넷에서 스크립트를 받아 바로 실행한다.

# 설치 없이 실행하는 "한 줄" (공식 방법)
& ([scriptblock]::Create((irm "https://debloat.raphi.re/")))
# irm = Invoke-RestMethod. 위 주소에서 부트스트랩 스크립트를 받아
# 그 자리에서 실행한다. 관리자 권한이 없으면 스스로 UAC 창을 띄워 승격한다.
핵심 용어
PowerShell (파워셸)
윈도우에 기본 내장된 명령어·자동화 셸이자 스크립트 언어. 검은 명령 프롬프트(cmd)의 강력한 후계자로, 앱 설치/제거, 레지스트리 수정, 서비스 제어 같은 윈도우 관리 작업을 명령 한 줄로 할 수 있다. Win11Debloat은 순수 파워셸로만 쓰였다. 단, 구버전 "Windows PowerShell 5.1" 전용이다 — 신형 "PowerShell 7"에서는 앱 제거 명령이 동작하지 않아 스크립트가 아예 실행을 거부한다(§7).
핵심 용어
텔레메트리 (Telemetry) · 블로트웨어 (Bloatware)
텔레메트리는 프로그램이 "어떻게 쓰였는지"를 제조사 서버로 자동 전송하는 진단·사용 정보 수집을 말한다. 블로트웨어는 사용자가 원치 않았는데 미리 깔려 있는 앱·기능(게임, 홍보 앱, 체험판 등)이다. Win11Debloat의 두 축이 바로 블로트웨어 제거 + 텔레메트리 차단이다.
한 문장 비유

"새 아파트에 미리 붙어 있는 광고 전단·홍보 가전을 한 번에 떼어 주고, 관리실로 나가던 CCTV 선도 끊어 주는 '입주 청소 서비스'"

새로 산 윈도우 PC는 마치 광고 스티커가 덕지덕지 붙고, 홍보용 가전이 곳곳에 놓인 새 아파트 같다. 쓰지도 않을 앱이 시작 메뉴를 채우고, 잠금화면엔 광고가 뜨고, 내 사용 습관은 제조사로 보고된다.

Win11Debloat은 그 스티커를 떼고, 홍보 가전을 치우고, 보고용 배선을 끊어 주는 입주 청소 기사다. 게다가 "이건 떼기 전 사진을 찍어 뒀으니 마음에 안 들면 도로 붙여 드립니다"(백업·복원·되돌리기)까지 챙긴다. 집(윈도우) 자체를 부수는 게 아니라, 군더더기만 골라 정리한다.

2왜 지금 주목받는가

TrendShift Daily #8 · "윈도우 AI 밀어붙이기 피로 + 무설치 한 줄 + 되돌리기 안전망"

Win11Debloat은 2020년부터 있던 오래된 프로젝트인데, 꾸준히 트렌딩에 오른다. 최근의 동력은 뚜렷하다 — 마이크로소프트가 코파일럿(Copilot)·리콜(Recall)·클릭 투 두(Click to Do) 같은 AI 기능을 윈도우에 강하게 밀어넣으면서, "끄고 싶은데 방법이 흩어져 있다"는 불만이 커졌다. Win11Debloat은 이 스위치들을 한곳에 모아 꺼 준다. (TrendShift의 굵은 숫자는 별 수가 아니라 사회적 언급 모멘텀이다.) 인기 이유를 네 갈래로 본다.

주목 포인트 1 — "AI 기능을 끄고 싶다"는 수요의 집결지

최신 윈도우는 코파일럿 버튼, 화면을 계속 스냅샷으로 저장하는 리콜, 노트패드·그림판·엣지에까지 들어간 AI를 기본으로 켜 둔다. Win11Debloat의 AI 카테고리는 이걸 한 번에 정리한다 — 코파일럿 제거, 리콜의 스냅샷 저장 금지(DisableAIDataAnalysis=1), AI 서비스 WSAIFabricSvc 자동 시작 차단, 엣지·그림판·노트패드 AI 끄기까지. "AI를 원치 않는 사용자"의 원스톱 창구가 됐다.

주목 포인트 2 — 무설치 "한 줄" 실행의 압도적 편의

가장 강력한 매력은 설치가 없다는 것이다. irm | iex 한 줄이면 인터넷에서 스크립트를 받아 즉시 실행된다. 최신 릴리스(2026.07.11)에서 이 부트스트랩 파일(Get.ps1) 하나만 33,331번 내려받아졌을 정도다. IT 관리자에게는 더 매력적이다 — 명령줄 파라미터로 "무엇을 지울지"를 정해 무인(unattended) 자동 실행이 가능하고, 회사 PC 여러 대에 동일 설정을 뿌릴 수 있다.

주목 포인트 3 — "되돌릴 수 있다"는 심리적 안전망

시스템을 건드리는 도구는 무섭다. Win11Debloat은 이 두려움을 세 겹 안전망으로 낮춘다: ① 변경 전 관련 레지스트리 값을 스냅샷으로 백업하고, ② 원하면 시스템 복원 지점을 만들고, ③ 거의 모든 변경에 대응하는 Undo/(되돌리기) .reg 파일을 갖췄다. "거의 모든 앱은 마이크로소프트 스토어에서 재설치되고, 거의 모든 변경은 복구 가능"이라는 문구가 README의 신뢰 포인트다.

주목 포인트 4 — 파괴적이지 않은 "안전 우선" 태도

비슷한 디블로트 도구 중에는 시스템을 과격하게 뜯어내 오작동을 일으키는 것도 많다. Win11Debloat은 기본 제거 목록을 보수적으로 짜고(스토어·터미널·엣지 같은 "위험" 앱은 기본에서 빼고 삭제 전 재확인), 도메인(회사 네트워크)에 가입된 PC엔 "그룹 정책이 되돌릴 수 있음"을 경고한다. "청소는 하되 OS를 망가뜨리지 않는다"는 균형이 장기 신뢰를 만들었다.

비슷한 선택지와의 비교

선택지성격 · Win11Debloat과의 차이
수동 정리설정 → 앱 → 하나씩 제거 + 개인정보 스위치 수십 개를 직접 끔. 확실하지만 수십 분~수 시간. Win11Debloat은 이걸 몇 분으로 압축.
대형 "올인원" 도구
(예: O&O ShutUp10, WinUtil)
기능은 방대하나 일부는 과격하거나 폐쇄형. Win11Debloat은 오픈소스(MIT)이고 보수적 기본값 + 되돌리기에 무게. 무설치 한 줄 실행이 강점.
기업용 이미징
(sysprep/MDT)
대량 배포에 정석이나 세팅이 복잡. Win11Debloat은 -Sysprep 모드로 기본 사용자 프로필에 미리 적용해, 개인·소규모 환경에서 이미징 흉내를 가볍게 낸다.
중요 · 오해 방지
"윈도우를 가볍게 만드는 마법"이 아니라 "정해진 청소 목록을 실행"하는 도구

Win11Debloat을 돌린다고 윈도우가 극적으로 빨라지거나 용량이 크게 주는 건 아니다. 이 도구는 미리 정의된 목록대로 앱을 지우고 설정 스위치를 바꾸는 것이지, OS를 개조하는 게 아니다. 또 관리자 권한이 필요하고, 시스템 영역을 만지므로 중요한 앱(스토어·터미널·엣지 등)을 실수로 지우지 않도록 기본값을 이해하고 써야 한다. 회사·학교 PC(도메인 가입)에서는 그룹 정책이 변경을 되돌릴 수 있다.

3기술 스택 전체 지도

"100% 파워셸" — 하지만 그 안에 명령줄 파서·WPF GUI·JSON 설정·.reg 파일·DISM이 다 들어 있다

Win11Debloat은 언어가 단 하나, PowerShell 5.1뿐이다. 그런데 그 파워셸이 다루는 "재료"는 다채롭다 — 설정을 담은 JSON, 레지스트리를 바꾸는 .reg 파일, 화면을 그리는 XAML(WPF), 그리고 윈도우 기능을 켜는 DISM까지. 스택을 네 계층으로 나눠 본다.

계층 1 — 실행 엔진: Windows PowerShell 5.1

전체가 파워셸 스크립트(.ps1)로 되어 있다. 앱 제거는 Get-AppxPackage/Remove-AppxPackage, 레지스트리는 reg import, 예약 작업은 Disable-ScheduledTask, 윈도우 기능은 Enable-WindowsOptionalFeature(DISM) 같은 내장 명령(cmdlet)을 조합한다. 진입점 Win11Debloat.ps1(581줄)은 얇은 지휘자 역할이고, 실제 일은 Scripts/ 폴더의 75개 모듈 .ps1이 나눠 맡는다(dot-sourcing으로 불러온다).

핵심 용어
Appx / cmdlet (커맨드릿)
Appx는 윈도우 스토어 방식으로 설치되는 최신 앱 패키지 형식(계산기·사진·틱톡 등). cmdlet은 파워셸의 명령 단위로, 동사-명사 꼴 이름을 쓴다(예: Get-AppxPackage=앱 목록 가져오기, Remove-AppxPackage=앱 제거). Win11Debloat의 앱 삭제는 "목록을 Get으로 찾아 파이프(|)로 Remove에 넘기는" 전형적 파워셸 패턴이다.

계층 2 — 설정 데이터: JSON 3종 (동작의 단일 진실원)

이 프로젝트의 핵심 재설계 포인트. "무엇을 지우고 무엇을 바꿀지"가 코드가 아니라 데이터(JSON)에 들어 있다. Config/ 폴더의 세 파일이 전부다.

파일담당
Apps.json제거 가능한 앱 141개의 목록. 각 항목에 표시이름·앱ID·설명·"기본 선택 여부"·추천등급(safe/optional/unsafe)·제거방식(Appx/WinGet)이 들어 있다.
Features.json기능 101개의 사전. 각 기능ID를 .reg 파일·설명문·카테고리·적용 가능한 윈도우 빌드 범위·재부팅 필요 여부·되돌리기 키에 연결한다.
DefaultSettings.json"기본 모드"에서 적용할 18개 튜닝의 묶음. 초보자가 고민 없이 고를 수 있는 추천 세트.
비유 — "요리사(코드)"와 "레시피 카드(JSON)"의 분리

예전 Win11Debloat은 요리 순서와 재료가 코드 안에 섞여 있었다. 지금은 요리사(엔진 코드)는 그대로 두고, "무엇을 어떻게"는 레시피 카드(JSON)로 빼냈다. 새 앱을 제거 목록에 넣고 싶으면? 코드를 고칠 필요 없이 Apps.json에 카드 한 장(항목 한 줄)을 추가하면 된다. 새 설정 기능을 넣고 싶으면 .reg 파일 하나 + Features.json 한 줄 + 파라미터 하나면 끝. 이게 §4·§6에서 강조할 "데이터 주도 설계"다.

계층 3 — 시스템 변경 수단: .reg 파일 + 예약작업 + DISM

실제로 윈도우를 바꾸는 손발이다. 세 종류가 있다.

.reg 파일 (89개)Regfiles/의 레지스트리 스크립트(UTF-16LE). reg import로 한 방에 여러 키를 넣는다. 같은 89개가 Sysprep/(기본 프로필용)과 Undo/(되돌리기 64개)로 미러링돼 있다.
예약 작업 비활성화텔레메트리를 실제로 보내는 작업 스케줄러 항목 8개(Compatibility Appraiser, Consolidator 등)를 Disable-ScheduledTask로 끈다.
DISM (Windows 기능)윈도우 샌드박스·WSL(리눅스 하위 시스템)을 켤 때 Enable-WindowsOptionalFeature -Online을 쓴다.
핵심 용어
레지스트리 (Registry) · .reg 파일
레지스트리는 윈도우의 모든 설정이 저장되는 거대한 중앙 설정 데이터베이스다. "다크 모드 켜짐", "코파일럿 버튼 숨김", "텔레메트리 0" 같은 값이 전부 여기 트리 구조로 들어 있다. .reg 파일은 "이 위치에 이 값을 넣어라"를 적어 둔 텍스트 스크립트로, 더블클릭하거나 reg import로 실행하면 그 값들이 레지스트리에 반영된다. Win11Debloat의 설정 변경 대부분이 이 방식이다.

계층 4 — 사용자 인터페이스: WPF(XAML) GUI + 텍스트(CLI) 메뉴

파워셸 스크립트지만 클릭하는 그래픽 창이 있다. Schemas/의 XAML 9개가 창 모양을 정의하고, Scripts/GUI/WPF로 이를 띄운다. GUI를 못 띄우는 환경이면 자동으로 텍스트 메뉴(CLI)로 폴백한다. 배포용 옵션(-User·-Sysprep 등)을 주면 아예 CLI로 강제된다.

한눈 요약 — "하나의 언어, 다섯 가지 재료"

Win11Debloat = PowerShell(엔진) + JSON(무엇을 할지) + .reg(레지스트리 바꾸기) + XAML/WPF(클릭 UI) + DISM·예약작업(윈도우 기능·서비스 제어). 언어는 하나인데, 윈도우를 다루는 "표준 도구"들을 골고루 엮은 종합 자동화 예제다.

4아키텍처 심화 분석

한 줄 명령이 관리자 승격 → 설정 수집 → 4단계 적용까지 흘러가는 길, 그리고 되돌리기·오프라인 하이브의 원리

Win11Debloat의 진짜 배울 점은 "실행 흐름 설계"다. 사용자가 무엇을 고르든(GUI 클릭 / CLI 메뉴 / 순수 명령줄 플래그) 결국 같은 한 갈래의 적용 파이프라인으로 모이도록 짜여 있다. 큰 그림부터 보자.

4-1. 전체 실행 시퀀스 (한 줄 명령이 하는 일)

┌────────────────────────────────────────────────────────────────┐ │ Win11Debloat.ps1 실행 시퀀스 │ │ │ │ ① 시작 가드(guard) 검사 — 안전 확인 │ │ · PowerShell 7(Core)면 → 빨간 에러 후 종료 (Appx 미지원) │ │ · 관리자 아니면 → "관리자로 재시작?" UAC 승격 │ │ · 제약 언어모드/도메인 가입 → 경고 │ │ │ │ │ ② 파라미터 파싱 (~114개) │ │ · 제어 플래그 (-Silent, -Sysprep, -User …) = 동작 방식 │ │ · 기능 플래그 (-DisableTelemetry …) = 실제 변경 1:1 매핑 │ │ │ │ │ ③ 설정 수집 — 세 입구가 하나로 합류 │ │ ┌── WPF GUI 체크박스 ──┐ │ │ ├── CLI 텍스트 메뉴 ─┼─→ $script:Params (선택 누적) │ │ └── 순수 명령줄 플래그 ┘ │ │ │ │ │ ④ Invoke-AllChanges — 4단계 적용 파이프라인 │ │ (1) 레지스트리 백업 (2) 시스템 복원 지점(선택) │ │ (3) 적용: 기능별 .reg import + 커스텀 로직 │ │ (4) 되돌리기: Undo 대상 처리 │ │ │ │ │ ⑤ explorer.exe 재시작(현재 사용자만) → 변경 화면 반영 │ └────────────────────────────────────────────────────────────────┘

여기서 눈여겨볼 설계는 "세 입구, 한 출구"다. GUI를 클릭하든, CLI 메뉴에서 번호를 고르든, -DisableTelemetry처럼 플래그를 직접 주든 — 전부 AddParameter$script:Params라는 하나의 목록에 쌓인 뒤, 동일한 Invoke-AllChanges로 흘러간다. 입력 방식과 적용 로직을 분리한 덕에, 대화형·무인 실행이 같은 코드로 굴러간다.

4-2. 시작 가드 — "실행하기 전에 거절부터"

이 스크립트가 인상적인 이유는 일을 하기 전에 먼저 안전하지 않은 상황을 거른다는 점이다. 순서대로 검사한다.

검사왜 / 어떻게
PowerShell 7 거부신형 pwsh(Core)에서는 Get-AppxPackage·복원지점 명령이 동작하지 않아, "앱을 하나도 안 지웠는데 성공했다고 거짓 보고"하는 버그가 있었다. 그래서 아예 exit 1로 막는다.
관리자 권한 확인관리자가 아니면 Start-Process powershell -Verb RunAsUAC 승격을 띄워 자기 자신을 다시 실행. 이때 원래 플래그를 Win32 안전 따옴표로 재조립해 넘긴다.
언어 모드 / SYSTEM 계정제약 언어 모드(잠금 환경)면 종료. 예약작업에서 SYSTEM 계정으로 잘못 돌면 -User/-Sysprep 없이는 throw로 중단(엉뚱한 프로필을 건드리는 사고 방지).
도메인 가입 경고Win32_ComputerSystem.PartOfDomain이 참이면 "그룹 정책이 변경을 덮어쓸 수 있다"고 알림.

4-3. 적용 파이프라인 (InvokeChanges.ps1)

Invoke-AllChanges는 4단계로 움직인다: ①백업 → ②복원지점 → ③적용 → ④되돌리기. 핵심은 ③의 Invoke-FeatureApply 로직이다 — 기능에 .reg 파일이 연결돼 있으면 ImportRegistryFile로 넣고, 그 뒤 후속 부수효과switch로 처리한다.

# 기능 적용의 뼈대 (개념 재구성)
function Invoke-FeatureApply($featureId) {
    $f = $script:Features[$featureId]        # Features.json에서 조회
    if ($f.RegistryKey) {
        ImportRegistryFile $f.RegistryKey    # reg import 실행
    }
    switch ($featureId) {                     # .reg만으론 안 되는 후속 작업
        "DisableBing"   { RemoveApps @("Microsoft.BingSearch") }
        "DisableCopilot"{ RemoveApps @("Microsoft.Copilot","XP9CXNGPPJ97XX") }
        "DisableTelemetry"{ Disable-TelemetryScheduledTasks }   # 예약작업 8개 끄기
    }
}

"레지스트리 한 방 + 필요하면 앱 제거·서비스 차단을 덤으로" 하는 구조다. 반대로 .reg가 없는 기능(앱 제거, 위젯 제거, 샌드박스/WSL 켜기, 시작 메뉴 비우기 등)은 순수 커스텀 로직으로 돈다.

4-4. 앱 제거의 실제 메커니즘

앱마다 제거 방식이 Apps.json에 적혀 있어(Appx 또는 WinGet), 그에 맞춰 처리한다. 범위(scope)도 셋으로 나뉜다.

# Appx 앱 제거 — 범위에 따라 분기 (개념 재구성)
switch ($scope) {
  "AllUsers" {
     Get-AppxPackage -Name $p -AllUsers | Remove-AppxPackage -AllUsers
     # 프로비저닝 패키지도 제거 → 미래 새 사용자에게 재설치 안 됨
     Get-AppxProvisionedPackage -Online | ... | Remove-ProvisionedAppxPackage -Online
  }
  "CurrentUser" { Get-AppxPackage $p | Remove-AppxPackage }
  default       { # 특정 사용자: 이름을 SID로 변환해 -User 로 지정 }
}
보안 설계 · 배울 점
RunOnce + Base64 인코딩으로 "미래 사용자" 앱 제거
로그인하지 않은 사용자의 WinGet 앱은 지금 지울 수 없다. 그래서 대상 프로필의 RunOnce 레지스트리에 "다음 로그인 때 제거하라"는 명령을 심어 둔다. 이때 winget 명령을 Base64로 인코딩(-EncodedCommand)해 넣는데, 이는 앱 ID에 & | < > ^ " 같은 셸 특수문자가 있어도 명령이 깨지거나 탈취되지 않게 하려는 방어다. 작은 디테일이지만 "입력을 신뢰하지 말라"는 보안 원칙의 좋은 예다.

4-5. 오프라인 하이브 편집 — Sysprep / 다른 사용자 모드

가장 고급 기술. 보통 레지스트리 변경은 "지금 로그인한 나"에게만 적용된다. 그런데 -Sysprep 모드는 아직 만들어지지도 않은 "미래의 모든 새 사용자"에게 설정을 미리 적용한다. 어떻게? 기본 사용자 프로필의 레지스트리 파일(NTUSER.DAT)을 통째로 마운트해서 거기에 값을 쓴다.

# 오프라인 하이브 마운트 → 편집 → 언마운트 (개념)
reg load  "HKU\Default"  "C:\Users\Default\NTUSER.DAT"   # 기본 프로필 하이브 장착
reg import "Regfiles\Sysprep\Disable_Telemetry.reg"            # HKEY_CURRENT_USER 대신
                                                          # hkey_users\default 로 쓰는 버전
reg unload "HKU\Default"                                    # finally 블록에서 반드시 해제

이래서 Regfiles/Sysprep/에 같은 .reg가 하나 더 있는 것이다 — 경로만 HKEY_CURRENT_USERhkey_users\default로 바꾼 쌍둥이 버전. 새 사용자를 만들면 이 기본 프로필을 복사해 오므로, 설정이 그대로 상속된다. 기업 이미징에서 쓰는 진짜 기법을 개인용 스크립트에 담은 것이다.

핵심 용어
하이브(Hive) · NTUSER.DAT · Sysprep
하이브는 레지스트리 트리의 한 덩어리를 담은 파일이다. 사용자별 설정 하이브가 각 프로필 폴더의 NTUSER.DAT다. reg load로 이 파일을 "임시로 장착"하면, 로그인하지 않은 사용자의 레지스트리를 오프라인으로 편집할 수 있다. Sysprep은 윈도우를 여러 PC에 복제 배포하려고 "일반화"하는 마이크로소프트 도구로, 이때 기본 사용자 프로필을 손보면 이후 만들어지는 모든 계정이 그 설정을 물려받는다.

4-6. 되돌리기와 멱등성 — 두 번 돌려도 안전

Win11Debloat은 같은 설정을 여러 번 적용해도 문제없게(멱등, idempotent) 설계됐다. GetCurrentTweakState.ps1이 각 기능의 .reg를 읽어 지금 레지스트리 상태와 비교해, 이미 적용됐는지 알려 준다(GUI가 현재 상태를 체크로 표시). 되돌리기(Undo/) .reg는 두 방식으로 원복한다.

# 되돌리기 .reg의 두 가지 문법
# 방법 A — 반대 값을 다시 씀
[HKEY_CURRENT_USER\...\DataCollection]
"AllowTelemetry"=dword:00000001      # 0(끔) → 1(켬)으로 복구

# 방법 B — 값을 통째로 삭제 ("=-" 문법)
[HKEY_CURRENT_USER\...\InputPersonalization]
"RestrictImplicitInkCollection"=-    # 이 값 자체를 지움 = 기본으로

.reg에서 "이름"=-는 "그 값을 삭제하라"는 뜻이다. 원래 없던 값을 넣었던 경우엔 이렇게 지워야 완전한 원상복구가 된다. 되돌리기까지 데이터(.reg)로 선언해 둔 점이 이 저장소의 성숙함을 보여 준다.

5디렉토리 · 파일 구조 해부

"얇은 진입점 + 75개 모듈 + 설정 JSON + .reg 3벌 + XAML 9개" — 관심사가 폴더로 갈라진다

Win11Debloat의 폴더 구조 자체가 "코드는 코드끼리, 설정은 설정끼리, 리소스는 리소스끼리"라는 관심사 분리를 보여 준다. 예전의 단일 파일 시절과 가장 크게 달라진 부분이다.

Win11Debloat/ ├── Win11Debloat.ps1 ★ 진입점(581줄): 가드·파라미터·75모듈 로드·분기 ├── Run.bat 더블클릭 런처(터미널 찾아 관리자로 재실행) ├── README.md LICENSE 문서 + MIT 라이선스 │ ├── Config/ ★★ 동작의 단일 진실원 (데이터 주도) │ ├── Apps.json 제거 가능한 앱 141개 (기본선택·추천등급·제거방식) │ ├── Features.json 기능 101개 (기능ID→.reg→설명→빌드범위→재부팅) │ └── DefaultSettings.json "기본 모드"의 18개 튜닝 묶음 │ ├── Regfiles/ 레지스트리 적용본 89개 (.reg, UTF-16LE) │ ├── Sysprep/ 기본 프로필용 쌍둥이 89개 (hkey_users\default) │ └── Undo/ 되돌리기 64개 (반대값 또는 "=-" 삭제) │ ├── Scripts/ ★ 실제 일꾼 75개 모듈 (.ps1) │ ├── Get.ps1 무설치 부트스트랩(=debloat.raphi.re가 주는 파일) │ ├── AppRemoval/ RemoveApps · ForceRemoveEdge · winget 조회 │ ├── CLI/ 텍스트 메뉴·대기중 변경 출력·헤더 │ ├── Features/ InvokeChanges(지휘) · ImportRegistryFile · │ │ 예약작업·시작메뉴·복원지점·레지백업/복원·상태검사 │ ├── FileIO/ 설정 로드/저장 · JSON 로드 · 앱목록 검증 │ ├── GUI/ WPF 메인창·앱선택창·복원대화상자·메시지박스 │ ├── Helpers/ UserHiveHelpers(reg load/unload!)·경로·SID 변환 │ └── Threading/ Invoke-NonBlocking(백그라운드 런스페이스)·DoEvents │ ├── Schemas/ WPF GUI 정의 XAML 9개 (MainWindow 등) └── Assets/ ├── Images/menu.png └── Start/start2.bin 빈 시작 메뉴 핀 레이아웃(핀 비우기에 사용)
경로역할
Win11Debloat.ps1얇은 지휘자. 직접 일하지 않고, 가드 검사 → 파라미터 파싱 → 75개 모듈 dot-source → Invoke-AllChanges 호출만 한다.
Config/*.json동작의 단일 진실원. 앱 목록·기능 매핑·기본 세트가 전부 여기. 코드 수정 없이 이 JSON만 고쳐 기능을 늘린다.
Regfiles/ (+Sysprep/+Undo/)레지스트리 변경의 "탄약". 적용본·기본프로필본·되돌리기본 3벌 구조가 §4-5·4-6의 핵심.
Scripts/ (75개)기능별로 잘게 나뉜 모듈. 폴더 이름(AppRemoval·CLI·GUI·Helpers…)이 곧 관심사.
Schemas/ (XAML 9)WPF 창의 생김새를 선언. 코드(로직)와 화면(XAML)을 분리한 전형적 WPF 구조.
Get.ps1debloat.raphi.re가 서빙하는 부트스트랩. "한 줄 실행"의 정체 — 저장소를 받아 메인 스크립트를 띄운다.
소스 정독으로 발견한 함정 · 문서/파라미터 ≠ 실제 동작
아직 남아 있지만 "죽은" 파라미터가 있다

-DisableSearchHistory·-DisableSearchHighlights는 파라미터로도 존재하고 대응 .reg 파일(Disable_Search_History.reg 등)도 있지만, 정작 Features.json에는 등록돼 있지 않다. 적용 루프가 $script:Features[$featureId]로 기능을 찾기 때문에, 사전에 없는 항목은 조용히 아무 일도 하지 않는다(no-op). "파라미터가 있다"고 "동작한다"는 뜻이 아니라는 것 — README·플래그 목록만 믿지 말고 실제 매핑(Features.json)을 봐야 한다는 좋은 교훈이다. (이 문서의 수치·동작은 클론한 최신 소스 기준이다.)

핵심 관찰
"진입점은 얇게, 일은 모듈로" — dot-sourcing 조립
파워셸에서 . .\Scripts\어떤모듈.ps1처럼 점(.)으로 파일을 부르면, 그 파일의 함수들이 현재 세션에 그대로 합쳐진다(dot-sourcing). Win11Debloat은 이 방식으로 75개 파일의 함수를 모아 하나의 큰 프로그램처럼 쓴다. 덕분에 진입점 581줄은 "무엇을 언제 부를지"만 담고, 실제 구현은 주제별 파일에 흩어 둘 수 있다. 큰 스크립트를 관리 가능하게 쪼개는 정석 패턴이다.

6학습 포인트

이 저장소에서 진짜 배울 것 — 윈도우 자동화의 표준 도구들 + "데이터 주도 설계"라는 사고방식

Win11Debloat은 "블로트 제거 도구"라는 겉모습 너머, 윈도우를 프로그램으로 관리하는 거의 모든 기법의 종합 선물세트다. 시스템 관리·데브옵스·자동화에 관심 있다면 실전 예제로 손색이 없다.

배울 것 1 — 데이터 주도 설계 (정책과 메커니즘의 분리)

가장 큰 교훈. "무엇을 할지(정책)"를 코드가 아닌 JSON 데이터로 빼내면, 기능 추가가 코드 수정이 아니라 데이터 한 줄 추가가 된다. Features.json 한 곳이 CLI 요약·GUI 체크박스·적용 루프 세 곳에 동시에 쓰인다는 점을 보라 — 한 벌의 메타데이터가 여러 표현을 만든다. 이 사고방식은 어떤 언어·프로젝트에도 옮겨 쓸 수 있다.

배울 것 2 — 파워셸로 하는 윈도우 관리 cmdlet

Get-AppxPackage/Remove-AppxPackage(앱), Disable-ScheduledTask(예약작업), Enable-WindowsOptionalFeature(DISM/윈도우 기능), Checkpoint-Computer(복원지점), reg import(레지스트리)까지 — 실무에서 쓰는 관리 명령이 한 저장소에 실전 형태로 모여 있다. 각 명령이 어떤 상황에서 어떻게 쓰이는지 문맥과 함께 배운다.

배울 것 3 — 레지스트리와 .reg 파일 다루기

Regfiles/를 읽으면 다크모드·텔레메트리·컨텍스트 메뉴 같은 설정이 실제로 어떤 레지스트리 키에 사는지 구체적으로 알 수 있다. 예를 들어 다크 모드는 ...\Themes\PersonalizeAppsUseLightTheme=0, 윈도우10식 우클릭 메뉴는 특정 CLSID의 기본값을 빈 문자열로 비우는 트릭이다. "이름"=- 삭제 문법까지 배우면 .reg를 자유롭게 쓸 수 있다.

배울 것 4 — 오프라인 하이브 & 기본 프로필 (기업 이미징 기법)

reg load/reg unloadNTUSER.DAT를 마운트해 로그인하지 않은 사용자의 레지스트리를 편집하는 기법은, 윈도우를 대량 배포하는 IT 관리자가 실제로 쓰는 고급 기술이다. Win11Debloat의 -Sysprep 경로를 따라가면 "기본 프로필을 손봐 모든 새 계정에 상속"시키는 원리를 손에 잡히게 익힌다.

배울 것 5 — 대화형 + 무인 실행을 한 코드로

-Silent 하나로 모든 프롬프트를 끄고, -Config/-RunSavedSettings로 설정을 재생하는 설계는 "사람이 클릭하는 도구"와 "스크립트가 자동으로 돌리는 도구"를 동시에 만족시킨다. GUI 클릭·CLI 메뉴·명령줄 플래그가 모두 하나의 파라미터 목록으로 합류하는 구조(§4-1)는, 자동화 도구를 설계할 때 두고두고 참고할 패턴이다.

배울 것 6 — 방어적 프로그래밍 & 우아한 실패

실행 전 가드(PS7 거부·SYSTEM 차단·도메인 경고), reg import 실패 시 순수 파워셸 레지스트리 작성기로 폴백, GUI 못 뜨면 CLI로 폴백, winget 없으면 경고 후 계속 — "실패할 수 있는 모든 지점에 대비책"이 깔려 있다. Base64로 셸 특수문자를 무력화하는 보안 디테일까지, "믿을 수 없는 환경에서 안전하게 도는 스크립트"의 교본이다.

실습 아이디어 (가볍게)
"내 앱 하나를 JSON 목록에 추가" 15분 체험

저장소를 클론한 뒤 Config/Apps.json을 열어, 형식에 맞춰 항목 하나(예: 특정 앱 ID, SelectedByDefault:false)를 추가해 보라. 그리고 앱 선택 화면에 그 항목이 새로 나타나는지 확인한다. 코드를 한 줄도 안 고치고 "제거 가능 앱"을 늘리는 경험이 §3·§6의 데이터 주도 설계를 단번에 이해시켜 준다. (실제 제거는 테스트 VM에서!)

7시스템 · 실행 요구사항

"윈도우 10/11 + 관리자 권한 + Windows PowerShell 5.1"이면 끝 — 단, PowerShell 7에서는 안 됨

요구사항은 가볍지만, 파워셸 버전에 결정적인 함정이 있다.

항목요구
운영체제윈도우 10 · 윈도우 11 모두. 기능별로 적용 가능한 빌드가 Features.json에 정해져 있어(예: 빌드 22000↑=Win11 전용, 21999↓=Win10 전용) 같은 스크립트가 두 OS를 안전하게 구분한다.
파워셸Windows PowerShell 5.1 전용. PowerShell 7(Core)에서는 Appx·복원지점 명령이 안 돌아 스크립트가 실행을 거부한다. 윈도우에 기본 내장된 5.1을 쓸 것.
권한관리자 필요. 없으면 UAC 승격 창을 띄워 스스로 재실행. SYSTEM 계정 직접 실행은 -User/-Sysprep 없이는 차단.
실행 정책실행 때마다 우회 처리(-ExecutionPolicy Bypass 또는 Set-ExecutionPolicy Unrestricted -Scope Process). 제약 언어 모드면 거부.
WinGet선택이지만 권장. 코파일럿·엣지·원드라이브 등 일부 제거에 필요. 없거나 오래되면 경고.
GUI(.NET/WPF)그래픽 창에는 WPF(PresentationFramework 등)가 필요. 못 뜨면 자동으로 텍스트 메뉴로 폴백.

세 가지 실행 방법

[방법 1] 무설치 "한 줄" (가장 간편) PowerShell(관리자)에 붙여넣기: & ([scriptblock]::Create((irm "https://debloat.raphi.re/"))) [방법 2] 전통적 방법 (더블클릭) 릴리스 zip 다운로드 → 압축 해제 → Run.bat 더블클릭 → UAC 승인 [방법 3] 고급 (명령줄 파라미터로 제어) Set-ExecutionPolicy Unrestricted -Scope Process -Force .\Win11Debloat.ps1 -RemoveApps -DisableTelemetry -Silent · 방법 1·3은 파라미터를 받아 무인 자동 실행 가능

대표 명령줄 파라미터 (약 114개 중 핵심)

파라미터효과
-Silent모든 프롬프트·요약·확인 생략. 무인 자동 실행용.
-Sysprep기본 사용자 프로필에 적용 → 이후 새 사용자가 상속(Win11 전용).
-User <이름>나 말고 다른 사용자에게 적용.
-CLIWPF GUI 대신 텍스트 메뉴 강제.
-RunDefaults / -RunDefaultsLite비대화형 기본 모드. Lite는 같은 튜닝이되 앱은 안 지움.
-RemoveApps -Apps <csv|Default>앱 제거. Default=기본 선택 목록, 또는 앱ID를 쉼표로 나열.
-AppRemovalTarget <AllUsers|CurrentUser|사용자명>앱 제거 범위 지정.
-DisableTelemetry / -DisableCopilot / -DisableRecall텔레메트리 / 코파일럿 / 리콜 끄기 등 개별 기능 스위치(99종).
-CreateRestorePoint변경 전 시스템 복원 지점 생성.
-Config <파일> / -RunSavedSettings내보낸 설정 불러오기 / 지난번 설정 재적용.

앱 제거 목록의 3단계 안전 등급 (Apps.json, 141개)

등급내용
기본 제거 (84개)"기본 모드"가 지우는 것. 1차 홍보 앱 + 소비자 정크 — 3D뷰어·빙뉴스/날씨·클립챔프·솔리테어·투두·팀즈·코파일럿, 그리고 스포티파이·캔디크러시·틱톡·인스타그램·넷플릭스·디즈니+·아마존 등.
선택 제거 (57개)기본은 OFF, 사용자가 골라야 지워짐. 그림판·메모장·계산기·카메라·캡처도구·사진, 그리고 HP·레노버·델·LG 등 OEM 앱(그래서 -RemoveHPApps 같은 옵션 존재).
위험(unsafe, 7개)기본 절대 제외. 마이크로소프트 스토어·터미널·엣지·GetHelp·Xbox 관련. 스토어·터미널은 삭제 전 "정말입니까?" 재확인(‑Silent이면 건너뜀).
주의 · 되돌리기 전 준비
테스트는 가상머신에서, 실행 전 복원 지점을

시스템 영역을 바꾸는 도구이므로, 처음이라면 가상머신(VM)이나 여벌 PC에서 먼저 돌려 보길 권한다. 실제 PC라면 -CreateRestorePoint로 복원 지점을 만들고, "위험" 등급 앱(특히 스토어·터미널)은 신중히 다루자 — 스토어를 지우면 다른 앱 재설치가 어려워진다. 회사·학교(도메인) PC에서는 그룹 정책이 변경을 되돌릴 수 있음을 기억할 것.

8직접 해볼 수 있는 실습 과제

읽기만 하면 안 남는다 — 윈도우 자동화 기법을 내 손으로 재현하는 과제 5개 (가급적 VM에서)
난이도 ★☆☆ · 입문

1. VM에서 "Lite 모드"로 안전하게 첫 실행

윈도우 11 평가판 VM을 만들고 -RunDefaultsLite(튜닝만, 앱 삭제 없음)로 돌려 본다. 실행 전후 시작 메뉴·개인정보 설정을 비교하고, 생성된 Logs/Win11Debloat.log(트랜스크립트)를 읽어 어떤 변경이 일어났는지 로그로 추적해 본다. §4의 실행 시퀀스를 눈으로 확인.

난이도 ★☆☆ · 입문

2. .reg 파일 하나 읽고 레지스트리 위치 확인하기

Regfiles/Enable_Dark_Mode.reg를 텍스트로 열어 AppsUseLightTheme=0이 어떤 키에 있는지 확인하고, regedit에서 그 위치를 직접 찾아본다. 이어 Undo/의 대응 파일을 열어 "반대 값" vs "=- 삭제" 두 되돌리기 방식을 비교한다.

난이도 ★★☆ · 중급

3. 나만의 앱 제거 파워셸 한 줄 짜기

Win11Debloat 없이, Get-AppxPackage *bing* | Remove-AppxPackage 같은 Get→파이프→Remove 한 줄을 직접 써 본다(VM에서). -AllUsers와 프로비저닝 패키지 제거(Get-AppxProvisionedPackage)의 차이를 실험해, §4-4의 "범위(scope)" 개념을 체득.

난이도 ★★☆ · 중급

4. JSON 설정으로 기능 한 개 "추가"해 보기

간단한 .reg(예: 특정 값 하나) 파일을 만들고, Features.json에 그에 맞는 항목(기능ID·RegistryKey·설명·카테고리·빌드범위)을 추가한 뒤, 대응 파라미터로 적용해 본다. 코드는 안 건드리고 데이터만 늘려 기능이 붙는 데이터 주도 설계(§3·§6)를 직접 재현.

난이도 ★★★ · 심화

5. 오프라인 하이브 마운트로 기본 프로필 편집

VM에서 reg load HKU\TestHive C:\Users\Default\NTUSER.DAT로 기본 프로필 하이브를 마운트하고, 값 하나를 쓴 뒤 reg unload로 해제해 본다. 그런 다음 새 사용자 계정을 만들어 그 설정이 상속되는지 확인한다. §4-5의 Sysprep·기본 프로필 상속 원리를 실전으로 익히는 과제.

9관련 기술 심화 학습 로드맵

"디블로트 사용자 → 윈도우 자동화·시스템 관리 엔지니어"까지, 4주 코스
주차목표 · 학습 내용
1주차
PowerShell 기초
cmdlet(동사-명사)·파이프라인·객체, Get-AppxPackage/Remove-AppxPackage, 실행 정책·-WhatIf. Win11Debloat 진입점을 읽으며 파라미터 param() 블록 이해. → 과제 1·3.
2주차
레지스트리 & .reg
레지스트리 트리(HKCU/HKLM), .reg 문법(dword·문자열·"이름"=- 삭제), reg import. Win11Debloat의 Regfiles/·Undo/ 대조 분석. → 과제 2.
3주차
데이터 주도 설계
JSON 스키마로 동작 정의하기, "정책(데이터) vs 메커니즘(코드)" 분리, 하나의 메타데이터로 여러 표현 만들기. Config/*.json↔코드 연결 추적. → 과제 4.
4주차
시스템 배포·이미징
오프라인 하이브(reg load/unload), 기본 사용자 프로필, Sysprep, 예약 작업·DISM(윈도우 기능), 복원 지점·백업/복원 전략. → 과제 5.
학습 순서 팁

Win11Debloat은 "돌리기는 한 줄, 이해는 여러 겹"인 프로젝트다. 581줄짜리 진입점을 처음부터 통독하려 하지 말고, "내가 -DisableTelemetry 하나를 줬을 때 코드가 어디를 거쳐 어떤 .regimport하는지" 한 경로만 끝까지 따라가 보라. 파라미터 → Features.json 조회 → ImportRegistryFile → 예약작업 차단으로 이어지는 그 한 갈래를 이해하면, 나머지 100개 기능이 전부 같은 틀임을 알게 된다. 그다음 데이터(JSON·.reg)로 시야를 넓히는 게 정석이다.

10핵심 키워드 사전

이 문서에 나온 용어를 한 번에 — 윈도우 자동화·시스템 관리에서 계속 마주칠 단어들
용어
Win11Debloat윈도우 10/11의 블로트웨어 제거·텔레메트리 차단·UI 정리를 자동화하는 파워셸 스크립트. 무설치 한 줄 실행, 되돌리기 지원.
PowerShell윈도우 내장 자동화 셸·스크립트 언어. Win11Debloat은 구버전 5.1 전용(PowerShell 7 거부).
블로트웨어원치 않는데 미리 깔린 앱·기능. "디블로트"=이걸 걷어내는 것.
텔레메트리사용·진단 정보를 제조사 서버로 자동 전송하는 것. Win11Debloat이 차단하는 주 대상.
Appx / cmdletAppx=스토어식 앱 패키지. cmdlet=파워셸 명령 단위(Get-…/Remove-…).
레지스트리 / .reg윈도우 중앙 설정 DB. .reg=그 값을 넣는 텍스트 스크립트. "이름"=-는 "값 삭제".
하이브 / NTUSER.DAT레지스트리의 한 덩어리 파일. 사용자별 설정 하이브가 NTUSER.DAT. reg load로 오프라인 편집.
Sysprep / 기본 프로필윈도우 복제 배포용 일반화 도구. 기본 사용자 프로필을 손보면 이후 새 계정이 상속.
WPF / XAML.NET의 데스크톱 GUI 프레임워크(WPF)와 그 화면을 선언하는 마크업(XAML). Win11Debloat의 그래픽 창.
DISM윈도우 이미지·기능 관리 도구. 샌드박스·WSL 켜기에 사용(Enable-WindowsOptionalFeature).
WinGet윈도우 공식 패키지 관리자. 일부 앱(엣지·코파일럿 등) 제거에 사용.
멱등성(idempotent)같은 작업을 여러 번 해도 결과가 같은 성질. Win11Debloat은 현재 상태를 비교해 재실행 안전.
dot-sourcing파워셸에서 . .\파일.ps1로 다른 파일의 함수를 현재 세션에 합치는 것. 75개 모듈 조립 방식.
CalVer날짜 기반 버전 표기(예: 2026.07.11). Win11Debloat의 버전 규칙.
MIT 라이선스가장 자유로운 오픈소스 라이선스 중 하나. 자유롭게 사용·수정·배포 가능(저작권 표시만).

11참고 링크

공식 소스부터 학습 자료까지
구분링크
GitHubgithub.com/Raphire/Win11Debloat — 이 저장소(스크립트·설정·문서)
릴리스github.com/Raphire/Win11Debloat/releases — 최신 버전(2026.07.11) zip 다운로드
무설치 한 줄https://debloat.raphi.re/Get.ps1 부트스트랩(방법 1의 실체)
PowerShell 문서learn.microsoft.com/powershell — cmdlet·파이프라인·실행 정책 공식 문서
Appx 명령learn.microsoft.com Get-AppxPackage/Remove-AppxPackage 레퍼런스
.reg 파일 문법Microsoft "How to add, modify, or delete registry subkeys/values by using a .reg file"
Sysprep / 기본 프로필learn.microsoft.com Sysprep · Default User Profile 커스터마이징 가이드