Windows Server 2012에서 WinSxS 폴더를 안전하게 정리하는 방법을 알아보기에 앞서, 먼저 WinSxS 폴더가 무엇인지, 이 폴더에는 어떤 파일이 저장되는지, 그리고 시간이 지날수록 크기가 계속 커지는 이유는 무엇인지 살펴보겠습니다.
WinSxS 폴더란 무엇인가?
Windows Server 2003 시절에는 추가 기능을 설치할 때 설치 마법사가 CD-ROM에 설치 디스크를 넣거나 Windows Server 2003 설치 패키지가 있는 경로를 직접 지정하도록 요구했습니다. Microsoft는 Windows Server 2008부터 이러한 정책을 변경했습니다. 이제 역할과 기능을 배포하는 데 필요한 모든 바이너리 파일은 %windir%\WinSxS(WinSxS – Windows Side By Side) 폴더에 저장됩니다. 덕분에 서버에 새로운 역할을 설치할 때마다 설치 미디어를 찾아 연결할 필요가 없어졌습니다. 물론 이러한 방식 때문에 운영체제가 차지하는 디스크 공간은 그만큼 늘어납니다.
중요한 점은 시스템의 핵심 구성 요소들이 WinSxS 폴더에 위치해 있으므로, 이 폴더의 파일을 임의로 수동 삭제해서는 절대 안 된다는 것입니다. 그렇다면 왜 이 폴더는 계속 커질까요? 답은 간단합니다. 바로 업데이트 때문입니다. 기능별 업데이트를 설치하면 WinSxS 폴더에는 업데이트된 기능의 기존 버전과 새 버전이 모두 보관됩니다. 이러한 아키텍처 덕분에 언제든지 설치된 업데이트를 안전하게 제거하고 해당 기능의 이전 버전으로 되돌릴 수 있습니다.
팁: Windows 7 SP1에서는 사용하지 않는 업데이트를 삭제하여 WinSxS 폴더 크기를 줄일 수 있습니다.
그런데 시스템이 정상적으로 부팅되고 잘 작동 중이고, 추가 역할을 설치할 계획도 없는데도 디스크 공간이 부족하다면 어떻게 해야 할까요? 앞으로도 사용하지 않을 설치 패키지가 시스템 드라이브의 여러 기가바이트를 차지한다는 것은 상당히 비합리적으로 보입니다. 안타깝게도 Windows Server 2008에서는 시스템 손상 없이 이러한 파일들을 삭제하기가 쉽지 않았습니다. 하지만 Microsoft는 새로운 서버 OS인 Windows Server 2012에서 Features on Demand라는 새로운 기능을 도입하여 이러한 단점을 개선했습니다.
Windows Server 2012의 Features on Demand
Features on Demand 기능을 사용하면 WinSxS 폴더에서 사용하지 않는 역할의 바이너리 파일을 삭제하여 시스템 파일이 차지하는 디스크 공간을 줄일 수 있습니다. 나중에 삭제했던 역할을 다시 필요로 하는 경우에는 Windows Server 2012 설치 이미지, Windows Update 서비스 또는 원본 파일이 있는 네트워크 공유 위치에서 필요한 모든 파일을 가져올 수 있습니다.
다음 PowerShell 명령으로 시스템의 모든 역할 및 기능 정보를 확인할 수 있습니다.
Get-WindowsFeature

각 역할의 상태는 Install State 열에 표시되며, 가능한 상태는 다음과 같습니다.
- Installed: 역할 또는 기능이 설치되어 현재 시스템에서 사용 중입니다.
- Available: 역할이 서버에 설치되어 있지 않지만, 필요한 모든 파일이 디스크에 있어 언제든지 설치·활성화할 수 있습니다.
- Removed: 역할 또는 기능이 서버에 설치되어 있지 않으며, 설치에 필요한 파일도 디스크에서 제거되었습니다.
따라서 GUI나 PowerShell(Install-WindowsFeature 명령)을 통해 역할을 설치하면 상태가 Available에서 Installed로 변경되고, 반대로 제거(Uninstall-WindowsFeature 명령)하면 Installed에서 Available로 변경됩니다.
Windows Server 2012에서 사용하지 않는 역할 삭제
디스크(WinSxS 폴더)에서 역할 파일을 삭제하는 작업은 PowerShell을 통해서만 가능합니다. 이를 위해서는 Uninstall-WindowsFeature 명령에 특수 인수인 -Remove를 사용해야 합니다.
예를 들어 DHCP 서버 역할의 바이너리 파일을 삭제하려면 다음 명령을 사용합니다.
Uninstall-WindowsFeature -Name DHCP -Remove
다음 명령은 Active Directory Domain Services의 서비스 파일을 삭제합니다.
Uninstall-WindowsFeature AD-Domain-Services -Remove

PowerShell을 활용하면 더 복잡한 명령도 작성할 수 있습니다. 다음 명령은 Windows Server에서 사용하지 않는 모든 역할과 기능의 설치 파일을 한 번에 삭제합니다.
Get-WindowsFeature | Where-Object {$_.InstallState -Eq "Available"} | Uninstall-WindowsFeature -Remove

이 예제에서는 파일 서버 역할 하나만 설치되어 있는 상태였는데, WinSxS 폴더 크기가 8GB에서 5GB로 줄어들었습니다. 꽤 인상적인 결과죠? 게다가 단 한 줄의 명령만으로 WinSxS 폴더를 정리했습니다.

Windows Server 2012에서 삭제된 역할 및 기능 재설치
이번에는 반대 경우를 가정해 보겠습니다. Windows Server 2012의 특정 역할을 설치해야 하는데, 해당 설치 패키지가 이미 WinSxS 폴더에서 삭제된 상황입니다. 이 역할은 GUI의 서버 관리자(Server Manager) 또는 PowerShell을 통해 복구할 수 있습니다.
역할 파일 복구를 시작하기 전에 먼저 설치된 Windows Server 2012 에디션의 이미지 인덱스를 확인해야 합니다. 이를 위해 Windows Server 2012 설치 미디어(정확히는 sources 폴더에 있는 install.wim 이미지 파일)가 필요합니다. 다음 PowerShell 명령을 실행합니다.
Get-WindowsImage -ImagePath <wim_파일_경로>\sources\install.wim

설치된 Windows Server 버전을 찾아 해당 인덱스(Index 값)를 기억해 둡니다. 이 예제에서는 인덱스 4번의 Windows Server 2012 Datacenter를 사용합니다.
동일한 작업은 DISM 유틸리티로도 수행할 수 있습니다.
dism.exe /get-imageinfo /imagefile:d:\sources\install.wim
서버 관리자를 사용해 삭제된 역할 설치
서버 관리자 콘솔을 열고 역할 및 기능 추가 마법사(Add Roles and Features)를 실행합니다. 설치하려는 역할이나 기능을 선택하면, 해당 역할 설치에 필요한 일부 파일이 누락되었으므로 대체 원본 경로를 지정해야 한다는 경고가 표시됩니다. 대체 원본 경로 지정(Specify an alternate source path) 버튼을 클릭합니다.

경로(Path) 필드에 install.wim 파일의 전체 경로와 설치된 OS 에디션의 인덱스를 다음 형식으로 입력합니다.
WIM:D:\Sources\Install.wim:4

확인(OK) 버튼을 누르면 설치하려는 역할에 필요한 모든 파일이 WinSxS 폴더로 복사됩니다.
필요하다면 WIM 파일이 있는 폴더 경로나 네트워크 공유 경로를 지정할 수도 있습니다. 또한 그룹 정책(컴퓨터 구성 / 관리 템플릿 / 시스템 / 선택적 구성 요소 설치 및 구성 요소 복구에 대한 설정 지정)을 통해 여러 서버에 대해 이 경로를 일괄 지정할 수도 있습니다. Windows Server 2012 서버를 대량으로 배포해야 하는 환경이라면 이 방법이 매우 유용합니다. 이러한 정리 작업을 전체 서버에 적용하면 수백 기가바이트의 디스크 공간을 절약할 수 있기 때문입니다.

PowerShell로 삭제된 역할 복구
동일한 작업은 PowerShell 명령 하나로도 수행할 수 있습니다. ADDS 역할의 파일을 복구해야 한다고 가정하고 다음 명령을 실행해 보겠습니다.
Install-WindowsFeature AD-Domain-Services -Source WIM:D:\Sources\Install.wim:4

이 글에서는 Windows Server 2012의 새로운 기능인 Features on Demand를 살펴보았습니다. 이 기능을 사용하면 WinSxS 폴더에서 서버 역할 설치 패키지 바이너리 파일을 삭제할 수 있으며, 필요할 때 Windows Server 2012 설치 미디어만 있으면 삭제된 역할을 언제든지 복구할 수 있습니다.
참고로 Windows 8의 Features on Demand는 조금 다르게 작동합니다. 앞서 사용한 PowerShell cmdlet이 Windows 8에는 존재하지 않기 때문입니다. 이에 해당하는 기능은 /Disable-Feature 매개변수와 함께 사용하는 DISM 명령입니다(다소 불편하지만). WinSxS 폴더 내용을 압축하는 방법도 있으니, 자세한 내용은 'WinSxS 폴더 정리 및 압축 방법' 관련 글을 참고하시기 바랍니다.
팁: Windows 8.1에서 WinSxS 폴더 크기를 줄이는 방법에 대한 자세한 내용은 관련 문서를 참조하십시오.