- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 Microsoft Office App-V(응용 프로그램 가상화) 환경에서 캐시 손상으로 인한 실행 오류·업데이트 실패·성능 저하 문제를 체계적으로 진단하고, 데이터 무결성을 확보하며, 중단 시간을 최소화하는 표준 복구 절차를 제공하는 것이다.
App-V와 Office의 관계 이해
Office는 Click-to-Run(C2R) 기반 배포를 사용하며, 일부 엔터프라이즈 환경 또는 과거 버전에서는 App-V 5.x 패키지로 가상화하여 배포한 이력이 있다. App-V 캐시는 패키지 콘텐츠와 구성 메타데이터를 저장하며, 손상 시 실행 실패, 기능 누락, 업데이트 불가, 로드율(PercentLoaded) 비정상 고정 등의 문제가 나타난다. 본 문서는 App-V 5.x 클라이언트와 Office C2R가 공존하거나 전환된 환경을 모두 고려하여 복구 절차를 제시한다.
주요 증상 목록
- Word·Excel·Outlook 실행 즉시 종료 또는 App-V 관련 이벤트 로그 경고가 반복되는 현상이다.
- 업데이트가 0% 또는 동일한 퍼센트에서 정지한 상태로 더 이상 진행되지 않는 현상이다.
- Get-AppvClientPackage 출력에서 PercentLoaded가 비정상으로 고정되거나 InUseState가 지속되는 현상이다.
- Online Repair 실행 후에도 동일 증상이 재발하는 현상이다.
- 디스크 I/O 급증, AppVClient 서비스 재시작 반복, 임시 폴더에 잔여 파일이 누적되는 현상이다.
복구 전 사전 점검 체크리스트
| 항목 | 체크 방법 | 목표/판정 |
|---|---|---|
| 디스크 여유 공간 | 관리자 PowerShell에서 Get-PSDrive -Name C 확인 | 남은 공간 10GB 이상 확보 |
| 안티바이러스 예외 | App-V 캐시 경로 예외 등록 상태 점검 | 스캔 제외 적용 |
| 서비스 상태 | Get-Service AppVClient·sc query ClickToRunSvc | Running이어야 함 |
| 이벤트 로그 | Event Viewer → Microsoft-AppV-Client(Admin/Operational) | 반복 오류 코드 원인 파악 |
| 패키지 로드율 | Get-AppvClientPackage -Name "*Office*" | PercentLoaded 비정상 고정 시 복구 필요 |
경로와 구성 요소 요약
| 구성 요소 | 기본 경로(예) | 설명 |
|---|---|---|
| App-V 패키지 캐시 | C:\ProgramData\AppV\ | 패키지 콘텐츠, 메타데이터, 임시 파일 저장소이다. |
| App-V 로그 | 이벤트 뷰어 Microsoft → AppV → Client | Admin/Operational 채널에서 오류·경고 확인이 가능하다. |
| Office C2R 서비스 | ClickToRunSvc | Office 스트리밍·서비스 유지 관리 프로세스이다. |
| Office C2R 클라이언트 | %ProgramFiles%\Common Files\microsoft shared\ClickToRun\ | 업데이트·복구 트리거 바이너리가 위치한다. |
표준 복구 플로우(현장용 의사결정)
- 증상 분류: 실행 실패인지, 업데이트 실패인지, 성능 저하인지 구분한다.
- 경미한 손상 시: App-V 패키지 수리 → 마운트 재시도 → 서비스 재시작을 수행한다.
- 고착 손상 시: 패키지 언퍼블리시/제거 → 캐시 초기화 → 재배포 또는 C2R 온라인 복구를 수행한다.
- 구조적 이슈 시: SCS 모드 전환, 캐시 크기 정책, AV 예외, 스토리지 품질을 재설계한다.
1단계. 신속 진단 스크립트
# 관리자 PowerShell Write-Host "=== App-V Office 패키지 상태 점검 ===" Get-Service AppVClient, ClickToRunSvc | Format-Table Name, Status, StartType
$pkg = Get-AppvClientPackage -Name "Office" -ErrorAction SilentlyContinue
if (-not $pkg) { Write-Warning "Office 관련 App-V 패키지를 찾지 못함" } else {
$pkg | Select-Object Name, PackageId, VersionId, InUseState, PercentLoaded | Format-Table
}
Write-Host "=== 디스크 여유 공간 ==="
Get-PSDrive -Name C | Select-Object Name, Free, Used, @{n="FreeGB";e={[math]::Round($_.Free/1GB,1)}}
Write-Host "=== 최근 App-V 이벤트 50건 ==="
Get-WinEvent -LogName "Microsoft-AppV-Client/Admin" -MaxEvents 50 |
Select-Object TimeCreated, Id, LevelDisplayName, Message | Format-Table -Wrap
2단계. 경미한 손상 복구(무중단 우선)
- App-V 패키지 수리 실행한다.
# 관리자 PowerShell $pkg = Get-AppvClientPackage -Name "*Office*" | Select-Object -First 1 if ($pkg) { Repair-AppvClientPackage -PackageId $pkg.PackageId -VersionId $pkg.VersionId -Force } - 사전 로드 및 통합 상태 재적용한다.
# 100% 사전 로드로 스트리밍 이슈 회피 $pkg = Get-AppvClientPackage -Name "*Office*" | Select-Object -First 1 if ($pkg) { Mount-AppvClientPackage -PackageId $pkg.PackageId -VersionId $pkg.VersionId -Force } # 셸 통합 재적용 Publish-AppvClientPackage -Global -PackageId $pkg.PackageId -VersionId $pkg.VersionId -Force - 서비스 재시작한다.
# 서비스 재시작 Restart-Service AppVClient -Force sc stop ClickToRunSvc sc start ClickToRunSvc 3단계. 고착 손상 복구(캐시 재구성)
패키지 메타데이터와 캐시 파일이 상호 불일치할 때 언퍼블리시→제거→캐시 정리를 수행한 뒤 재배포한다.
# 관리자 PowerShell $pkg = Get-AppvClientPackage -Name "*Office*" | Select-Object -First 1 if ($pkg) { try { Write-Host "언퍼블리시" ; Unpublish-AppvClientPackage -Global -PackageId $pkg.PackageId -VersionId $pkg.VersionId -ErrorAction Stop } catch {} try { Write-Host "제거" ; Remove-AppvClientPackage -PackageId $pkg.PackageId -VersionId $pkg.VersionId -Force -ErrorAction Stop } catch {} }
App-V 서비스 중지 후 캐시 정리
Stop-Service AppVClient -Force
백업 후 삭제 권장
Rename-Item "C:\ProgramData\AppV" "C:\ProgramData\AppV.bak_$(Get-Date -f yyyyMMddHHmmss)" -ErrorAction SilentlyContinue
New-Item -ItemType Directory -Path "C:\ProgramData\AppV" | Out-Null
Start-Service AppVClient
4단계. Office Click-to-Run 기반 재복구
App-V 캐시를 정리했더라도 Office C2R 관리 서비스가 손상되어 있으면 재설치 또는 온라인 복구가 필요하다.
- 제어판 → 프로그램 → Microsoft 365 Apps 또는 Office → 변경 → 온라인 복구를 실행한다.
- 오프라인 배포 환경은 ODT(Office Deployment Tool)로 동일 버전 재구성 파일을 사용하여 다시 구성한다.
:: 관리 명령 프롬프트 예시(서비스 확인) sc query ClickToRunSvc :: ODT 구성 예시(Setup.exe와 configuration.xml 같은 폴더) setup.exe /configure configuration.xml 5단계. SCS(Shared Content Store) 및 정책 점검
SCS 모드에서는 콘텐츠를 로컬에 완전히 저장하지 않으므로 네트워크 품질 저하가 곧 실행 지연과 오류로 연결된다. 빈번한 손상 발생 시 다음을 점검한다.
- 공유 저장소의 파일 무결성 및 권한 설정을 점검한다.
- 클라이언트 정책에서 캐시 크기(비율·최대값)를 현실적으로 상향한다.
- 오프라인 사용이 많다면 SCS 해제 후 마운트를 통한 100% 프리캐시 전략을 적용한다.
6단계. 사용자 프로필 통합 재생성
가상 애플리케이션의 바로가기·파일 연결·COM 통합이 사용자별로 손상되었을 수 있다. 다음 절차로 재적용한다.
# 모든 Office 프로세스 종료 후 사용자 컨텍스트에서 실행 $pkg = Get-AppvClientPackage -Name "*Office*" | Select-Object -First 1 if ($pkg) { Unpublish-AppvClientPackage -User -PackageId $pkg.PackageId -VersionId $pkg.VersionId -ErrorAction SilentlyContinue Publish-AppvClientPackage -User -PackageId $pkg.PackageId -VersionId $pkg.VersionId -Force } 모니터링 포인트와 성공 판정
| 지표 | 확인 방법 | 성공 기준 |
|---|---|---|
| PercentLoaded | Get-AppvClientPackage | 필수 구성요소 100% 또는 안정적 실행 수준 도달 |
| 재시작 빈도 | 서비스·이벤트 로그 | AppVClient 자동 재시작 없음 |
| 로드 시간 | 초기 실행 시 체감 시간 | 평균 < 5초(네트워크 여건에 따라 상이) |
| 이벤트 오류 | Admin/Operational 로그 | 오류 이벤트 0 또는 경고 감소 추세 |
엔터프라이즈 대량 복구 자동화 예시
# PowerShell Remoting 기반 간단 롤백/재구성 예시(테스트 후 배포) $Servers = Get-Content .\Targets.txt Invoke-Command -ComputerName $Servers -ScriptBlock { try { $pkg = Get-AppvClientPackage -Name "*Office*" | Select-Object -First 1 if ($pkg) { Unpublish-AppvClientPackage -Global -PackageId $pkg.PackageId -VersionId $pkg.VersionId -ErrorAction SilentlyContinue Remove-AppvClientPackage -PackageId $pkg.PackageId -VersionId $pkg.VersionId -Force -ErrorAction SilentlyContinue } Stop-Service AppVClient -Force $path = "C:\ProgramData\AppV" if (Test-Path $path) { Rename-Item $path "$($path).bak_$(Get-Date -f yyyyMMddHHmmss)" } New-Item -ItemType Directory -Path $path | Out-Null Start-Service AppVClient
# 필요 시 ODT 무인 재구성 호출(사내 배포 경로 기준)
Start-Process -FilePath "\\fileshare\odt\setup.exe" -ArgumentList "/configure \\fileshare\odt\config.xml" -Wait
} catch {
Write-Error $_
}
}
성능·안정성 튜닝 팁
- SSD 스토리지 사용 및 조각화 방지 정책을 적용한다.
- App-V 캐시 폴더와 ODT 소스 경로를 실시간 스캔에서 제외한다.
- 로밍 프로필·FSLogix 사용 시 가상 디스크 용량과 IOPS를 상향한다.
- 원격 사이트는 분산 콘텐츠 서버 또는 브랜치 캐시를 고려한다.
문제 재발 방지 체크리스트
| 항목 | 주기 | 기준 |
|---|---|---|
| App-V 이벤트 로그 스캔 | 주 1회 | 오류 0, 경고 추세 하락 |
| 캐시 용량/사용률 점검 | 월 1회 | 80% 초과 시 상향 조정 |
| ODT/패키지 소스 무결성 | 버전 변경 시 | 해시 검증 통과 |
| 안티바이러스 예외 검토 | 분기 1회 | 경로 누락 없음 |
대표 오류 코드별 대응(현장 요약)
| 유형 | 현상 | 즉시 조치 | 근본 해결 |
|---|---|---|---|
| 패키지 메타 손상 | PercentLoaded 고정 | Repair → Mount | Unpublish/Remove → 캐시 재생성 |
| 파일 잠금 | 삭제 실패 | AppVClient 중지 | AV 일시 해제 후 재시도 |
| C2R 서비스 오류 | 업데이트 정지 | ClickToRunSvc 재시작 | 온라인 복구 또는 ODT 재구성 |
| SCS 네트워크 | 느림·끊김 | 임시 로컬 마운트 | 대역폭·지연 최적화 또는 SCS 해제 |
검증 절차(복구 완료 판정)
- 관리자 PowerShell에서
Get-AppvClientPackage -Name "*Office*"실행하여 PercentLoaded와 InUseState 정상화 여부를 확인한다. - Word·Excel·Outlook을 차례로 실행하여 최초 로드 시간과 기능 가용성을 점검한다.
- 이벤트 로그에서 오류 재발 여부를 30분 간 모니터링한다.
- ODT 또는 회사 배포 포털에서 동일 버전의 재배포가 정상 동작함을 확인한다.
FAQ
App-V를 사용하지 않는 최신 Office에서도 이 절차가 필요한가?
조직이 App-V 패키지로 배포한 레거시 Office가 남아 있거나, 이전 환경 잔존 파일 때문에 충돌이 발생하면 본 절차가 유효하다. 최신 C2R 단독 환경은 온라인 복구 또는 ODT 재구성이 핵심이다.
캐시 폴더를 바로 삭제해도 되는가?
권장하지 않는다. 서비스 중지·백업·예외 적용 후 삭제해야 한다. 무분별한 삭제는 파일 잠금과 잔여 핸들로 인해 재부팅 유발 가능성이 높다.
재발이 잦다. 근본 원인은 무엇인가?
저품질 스토리지, 과도한 실시간 검사, SCS 모드와 네트워크 품질 불일치, 정책상 캐시 크기 부족이 대표적 원인이다. 설계 단계 재검토가 필요하다.
온라인 복구와 ODT 중 무엇을 우선 권장하나?
표준 클라이언트는 온라인 복구가 간단하다. 버전 고정·내부 소스 요구가 있으면 ODT가 적합하다.
VDI 환경에서 추가로 고려할 점은?
프로필 가상화 디스크 크기, IOPS, 로그오프 스크립트의 캐시 정리 정책, 부트 스톰 완화 전략을 추가로 설계해야 한다.