개요: 블리자드 배틀넷의 이중 프로세스 디커플링 아키텍처
그래픽 사용자 인터페이스(GUI)와 저수준 파일 입출력 로직을 단일 프로세스 내에서 통합 실행하는 모놀리식 게임 런처와 달리, 블리자드 엔터테인먼트의 배틀넷 데스크톱 앱(Battle.net Desktop App)은 고도로 설계된 '클라이언트-백그라운드 데몬' 분리형 아키텍처를 채택하고 있습니다. Windows 환경에서 배틀넷을 실행하면 두 개의 독립된 프로세스가 병렬 구동됩니다.
Battle.net.exe(프론트엔드 UI 클라이언트): Chromium 임베디드 프레임워크(CEF) 또는 Qt 기반으로 구축된 데스크톱 인터페이스로, 유저 로그인 인증, 소셜 채팅, 상점 브라우징 및 다운로드 진행 상황 렌더링을 전담합니다.Agent.exe(배틀넷 업데이트 에이전트 데몬):C:\ProgramData\Battle.net\Agent\경로에 상주하는 백그라운드 서비스 데몬으로, 블리자드 고유의 CASC(Content Addressable Storage Container) 포맷 패치, 암호화 매니페스트 해시 검증, 디스크 여유 공간 사전 할당 및 글로벌 CDN 데이터 전송을 총괄합니다.
┌────────────────────────────────────────────────────────┐
│ Battle.net.exe (프론트엔드 그래픽 UI 인터페이스) │
└──────────────────────────┬─────────────────────────────┘
│ 프로세스 간 통신 (IPC)
│ (로컬 루프백 REST API / Windows 명명된 파이프)
┌──────────────────────────▼─────────────────────────────┐
│ Agent.exe (백그라운드 업데이트 및 설치 데몬) │
├──────────────────────────┬─────────────────────────────┤
│ 스토리지 및 파일 검증 계층 │ Windows OS 핵심 서비스 인터페이스│
│ ├── CASC 컨테이너 (.idx) │ ├── WMI (Win32_LogicalDisk) │
│ └── .build.info 데이터베이스│ └── WinHTTP / BITS 전송 서비스│
└──────────────────────────┴─────────────────────────────┘
프론트엔드 UI 자체는 게임 바이너리를 디스크에 직접 읽고 쓸 수 있는 저수준 권한이나 엔진 코드를 내장하고 있지 않습니다. 다운로드 시작, 일시 정지, 무결성 검사 등 모든 제어 명령은 프로세스 간 통신(IPC, Inter-Process Communication) 을 통해 Agent.exe와 주고받는 고주파 하트비트에 의존합니다. 이 로컬 통신 경로가 차단되거나 로컬 데이터베이스의 동기화가 어긋나거나 Windows의 기반 서비스가 손상되면 런처는 "다른 설치 또는 업데이트 대기 중...", "초기화 중 (0%)", "Agent가 절전 모드로 전환되었습니다" 와 같은 멈춤 현상이나 BLZBNTAGT 오류 코드를 출력하며 작동을 멈춥니다.
이러한 문제를 근본적으로 해결하기 위해서는 배틀넷이 Windows 저수준 API와 연동하는 방식, CASC 아카이브의 무결성 검증 원리, 그리고 WMI(Windows Management Instrumentation) 저장소의 진단 및 복구 기술을 정확히 이해해야 합니다.
프로세스 간 통신(IPC) 메커니즘과 "에이전트 절전 모드/다른 업데이트 대기 중" 데드락 원인
Battle.net.exe와 Agent.exe 사이의 데이터 교환은 로컬 루프백 소켓(127.0.0.1의 동적 임시 포트)을 통한 HTTP REST 요청과 Windows 명명된 파이프(\\.\pipe\)를 기반으로 이루어집니다.
1. 웹 프록시 자동 감지(WPAD)와 로컬 루프백 트래픽 차단
런처가 갑자기 "Agent가 절전 모드로 전환되었습니다"라는 경고창을 띄우거나 "초기화 중" 상태에서 영구히 멈추는 가장 대표적인 원인은 네트워크 계층에서의 로컬 통신 간섭입니다.
- 웹 프록시 자동 감지(WPAD 지연): Windows 인터넷 옵션에는 "자동으로 설정 검색"이 기본 활성화되어 있습니다.
Agent.exe가 부팅되어 로컬 포트를 열 때 시스템은 WPAD 프로토콜을 통해 로컬 네트워크에 프록시 쿼리를 브로드캐스팅합니다. 공유기, DNS 서버, 혹은 VPN 환경에 지연이 존재할 경우 이 응답을 대기하느라 프로세스가 60초에서 120초 동안 멈춥니다. - 백신 프로그램의 로컬 HTTP 트래픽 검사: 실시간 웹 감시 기능이 포함된 보안 소프트웨어는 로컬 TCP 루프백 트래픽까지 패킷 레벨에서 가로챕니다. 백신이 UI와 Agent 간의 REST 패킷을 지연시키거나 차단하면,
Battle.net.exe는 백그라운드 에이전트가 충돌하여 응답하지 않는 것으로 간주하고 경고 메시지를 출력합니다.
2. 백그라운드 잔존 고아 프로세스에 의한 파일 락 충돌
배틀넷을 종료하거나 자체 업데이트를 진행할 때 시스템은 Agent.exe에 정상 종료 시그널을 보냅니다. 그러나 《월드 오브 워크래프트》나 《콜 오브 듀티》와 같은 초대형 게임 파일의 쓰기 핸들이 제때 해제되지 않으면 Agent.exe 프로세스가 백그라운드 메모리에 그대로 남아 있는 고아 프로세스(Orphaned Process) 상태가 됩니다.
이후 배틀넷을 다시 실행하면 새로 뜬 클라이언트가 새 에이전트를 생성하려 시도합니다. 그러나 이전 에이전트가 공유 데이터베이스(C:\ProgramData\Battle.net\Agent\data)에 대해 단독 파일 잠금(File Lock)을 유지하고 있어 새 에이전트가 권한을 획득하지 못하고, 양쪽 모두 멈춰 서며 "다른 업데이트 대기 중"이라는 무한 루프에 갇히게 됩니다.
BLZBNTAGT 오류 코드 체계 심층 해부
Agent.exe가 복구 불가능한 디스크, 네트워크 또는 파일 손상을 감지하면 BLZBNTAGT로 시작하는 영숫자 코드를 반환합니다.
[BLZBNTAGT 오류 코드 분류 체계]
├── BLZBNTAGT00000840 / 00000BB8 ──> CASC 스토리지 손상 (.idx 인덱스와 데이터 블록 불일치)
├── BLZBNTAGT000008A4 ──> NTFS 보안 기술자(ACL/DACL)에 의한 디스크 쓰기 권한 거부
├── BLZBNTAGT000008FC ──> CDN 패치 매니페스트 다운로드 타임아웃 / SSL 검증 실패
└── BLZBNTAGT0000075B ──> 디스크 클러스터 공간 부족 또는 사전 할당 연산 실패
1. BLZBNTAGT00000840 및 BLZBNTAGT00000BB8: CASC 컨테이너 인덱스 손상
블리자드 게임은 개별 파일들을 낱개로 저장하지 않고 고유의 CASC(Content Addressable Storage Container) 아카이브 시스템을 사용합니다. data/ 폴더 내에 거대한 분할 데이터 블록(data.000, data.001 등)이 위치하며, 이를 작은 바이너리 인덱스 파일(.idx, 예: 000000001a.idx)이 관리합니다.
- 패치 도중 갑작스러운 정전, 블루스크린 또는 백신의 강제 차단이 발생하면 디스크에 기록 중이던
.idx파일의 헤더 정보와 실제 데이터 블록 간의 일관성이 무너집니다. - 이후 런처를 실행하면
Agent.exe가 공식 CDN의.build.info매니페스트와 로컬 데이터를 대조합니다. 체크섬 검증에 실패하면 에이전트는 작업을 중단하고 "오류가 발생했습니다"(BLZBNTAGT00000840또는BLZBNTAGT00000BB8)를 띄웁니다.
2. BLZBNTAGT000008A4: 보조 드라이브 NTFS 접근 제어 목록(ACL) 권한 거부
대다수 유저는 100GB 이상의 게임을 보조 드라이브(예: D:\ 또는 E:\)에 설치합니다.
- Windows를 재설치하거나 다른 PC에서 드라이브를 이식한 경우, 해당 폴더의 NTFS 보안 기술자에 이전 운영체제의 보안 식별자(SID)가 남아 있게 됩니다.
- 일반 사용자 권한으로 구동되는
Agent.exe가 임시 파일을 생성하거나.build.info를 수정하려 할 때 Windows 커널로부터ERROR_ACCESS_DENIED(Win32 Error 5)를 수신하고, 이를BLZBNTAGT000008A4오류로 변환하여 출력합니다.
핵심 시스템 의존성: Windows Management Instrumentation(WMI) 서비스 손상
배틀넷 구동 과정에서 가장 중요하면서도 잘 알려지지 않은 핵심 의존성이 바로 Windows 표준 WMI(Windows Management Instrumentation, 서비스명 winmgmt) 입니다.
Agent.exe는 디스크에 1바이트의 데이터를 쓰기 전에 반드시 COM 인터페이스를 통해 WMI에 하드웨어 및 파티션 정보를 질의합니다.
SELECT DeviceID, FreeSpace, Size, FileSystem FROM Win32_LogicalDisk WHERE DriveType = 3
SELECT TotalPhysicalMemory FROM Win32_OperatingSystem
1. WMI 저장소 손상이 배틀넷에 미치는 치명적 영향
비정상 종료나 공격적인 레지스트리 정리 유틸리티로 인해 Windows의 WMI 데이터베이스(C:\Windows\System32\wbem\Repository\)가 손상(Inconsistent)되면, Agent.exe의 쿼리는 0x8004100e 등의 오류를 반환하며 실패합니다.
WMI가 드라이브 지오메트리와 클러스터 정보를 반환하지 못하면:
Agent.exe는 대상 드라이브에 패치를 풀 여유 공간이 있는지 계산할 수 없어 "크기 계산 중..." 상태로 무한히 멈추거나 아무 오류 메시지 없이 종료됩니다.- 에이전트 로그 파일(
Agent.log)에는Failed to query WMI disk information오류가 반복 기록됩니다.
2. WMI 서브시스템 무결성 검증 및 재구축 표준 절차
배틀넷의 설치 오류가 WMI 손상 때문인지 확인하려면 관리자 권한의 PowerShell 또는 명령 프롬프트에서 다음 명령어를 실행합니다.
# 1. WMI 저장소 무결성 상태 점검
winmgmt /verifyrepository
# 2. "저장소가 일치하지 않습니다(inconsistent)"가 반환되면 자동 복구 수행:
winmgmt /salvagerepository
# 3. 자동 복구 실패 시, 서비스를 중지하고 저장소를 강제 재구축(시스템이 자동 재생성):
net stop winmgmt /y
Rename-Item "C:\Windows\System32\wbem\Repository" "C:\Windows\System32\wbem\Repository.bak"
net start winmgmt
검증 명령어가 "WMI repository is consistent" 를 출력하면 WMI 통신이 정상화되고, Agent.exe는 즉시 디스크 용량을 인식하여 업데이트를 재개합니다.
런타임 캐시 완전 삭제 및 재다운로드 없는 게임 재연동 프로토콜
배틀넷 클라이언트의 로컬 데이터베이스가 완전히 꼬였을 때 100GB 이상의 게임을 통째로 재다운로드할 필요는 없습니다. 손상된 런타임 캐시 폴더만 안전하게 제거하면 수 분 안에 런처를 초기화할 수 있습니다.
[배틀넷 동적 데이터 캐시 구조]
C:\ProgramData\ (숨김 시스템 폴더)
├── Battle.net\
│ ├── Agent\ <── Agent.exe 바이너리 및 업데이트 도구 (삭제 가능)
│ └── Setup\ <── 임시 설치 압축 해제 폴더 (삭제 가능)
└── Blizzard Entertainment\
└── Battle.net\
└── Cache\ <── 다운로드된 CDN 매니페스트 및 인덱스 (삭제 가능)
1단계: 배틀넷 관련 백그라운드 프로세스 트리 강제 종료
작업 관리자를 열거나 관리자 권한 PowerShell에서 잔존 프로세스를 정리합니다.
Get-Process -Name "Battle.net*", "Agent*", "BlizzardError*" -ErrorAction SilentlyContinue | Stop-Process -Force
2단계: ProgramData 동적 데이터 캐시 폴더 제거
파일 탐색기에서 숨김 파일 보기를 활성화하고 시스템 드라이브로 이동합니다.
C:\ProgramData\Battle.net폴더를 완전히 삭제합니다(손상된 Agent 바이너리가 지워지며 런처 재실행 시 클린 버전이 자동 설치됩니다).C:\ProgramData\Blizzard Entertainment폴더를 완전히 삭제합니다(꼬여 있던 로컬 CASC 인덱스 및 잠금 정보가 초기화됩니다).
주의: ProgramData 폴더를 삭제해도 이미 설치된 게임 파일은 전혀 삭제되지 않습니다. 게임 본체는 사용자가 지정한 원래 경로(예:
D:\World of Warcraft)에 안전하게 보존됩니다.
3단계: .build.info 기반 기존 설치 폴더 초고속 재인식
캐시를 비운 뒤 배틀넷을 다시 실행합니다.
- 게임 목록에서 기존 게임들이 회색 "설치" 버튼으로 표시됩니다.
- 설치 버튼을 누르지 말고 그 바로 아래에 있는 "게임 찾기(Locate the game)" 링크를 클릭합니다.
- 기존에 게임이 설치되어 있던 폴더를 선택합니다.
Agent.exe가 해당 경로의.build.info파일을 읽어 블리자드 공식 CDN과 몇 초 만에 체크섬 비교를 마칩니다. 무결성이 확인되면 즉시 파란색 "게임 실행" 버튼으로 활성화되며 재다운로드 없이 완벽히 복원됩니다.
배틀넷 설치 및 업데이트 오류 진단 매트릭스
| 발생 증상 / 화면 오류 | 기술적 원인 분석 | 로그 파일 식별자 (Agent.log) | 권장 조치 및 복구 방안 |
|---|---|---|---|
| "초기화 중 (0%)" 또는 "다른 업데이트 대기 중"에서 멈춤 | 고아 Agent.exe 프로세스가 DB 락을 잡고 있거나 WPAD 프록시 감지 지연 | Failed to connect to local IPC socket: connection refused | 작업 관리자에서 Agent 프로세스 강제 종료; Windows 인터넷 옵션에서 "자동으로 설정 검색" 체크 해제 |
"오류가 발생했습니다" 팝업 발생 (BLZBNTAGT00000840) | 비정상 종료로 인한 CASC의 .idx 인덱스와 data 블록 간 체크섬 불일치 | CASC: index verification mismatch for block offset | 앱 내 "검사 및 복구" 실행; 지속 시 data/data 내의 .idx 파일 삭제 후 재검사 |
| 다운로드 시작 시 "Agent가 절전 모드로 전환되었습니다" 출력 | 백신의 실시간 감시 기능이 UI와 Agent 간의 로컬 TCP 루프백 REST 차단 | IPC request timed out after 30000ms: /agent/v1/update | 배틀넷 및 Agent 경로를 백신 예외로 등록; VPN 가상 네트워크 어댑터 충돌 점검 |
| 업데이트 진행률이 "크기 계산 중..."에서 멈춘 채 진행 불가 | Windows Management Instrumentation(WMI) 저장소 손상으로 디스크 질의 불가 | WMI query error: 0x8004100e Invalid Namespace | 관리자 터미널에서 winmgmt /salvagerepository 실행 후 winmgmt 서비스 재시작 |
보조 드라이브 설치 시 BLZBNTAGT000008A4 오류 출력 | 드라이브 이식이나 OS 재설치로 인한 NTFS 접근 제어 목록(ACL) 쓰기 권한 상실 | CreateFile failed with Win32 Error 5 (Access is Denied) | 게임 폴더 속성 -> 보안 탭에서 Authenticated Users 및 SYSTEM에 "모든 권한" 부여 |
블리자드 배틀넷의 데스크톱 에코시스템은 PC 게임 분야에서 클라이언트-데몬 분리 구조가 지닌 효율성과 복잡성을 동시에 보여주는 대표적 모델입니다. 프론트엔드 UI와 백그라운드 Agent 간의 IPC 메커니즘, CASC 저장소의 무결성 검증 구조, 그리고 WMI 등 Windows 핵심 시스템 서비스의 역할을 명확히 이해함으로써 대규모 재다운로드 없이 정밀한 복구를 수행할 수 있습니다. 365Finds가 제공하는 전문 운영 가이드를 활용하여 런처의 병목 현상을 신속히 해결하고 소중한 게임 라이브러리를 항상 쾌적한 상태로 유지하십시오.