Windows 스토어 앱 프록시 연결 오류: UWP 루프백 예외 설정 방법
UWP 앱의 로컬 루프백 주소 접근이 기본적으로 차단되는 이유를 설명하고, CheckNetIsolation 명령과 GUI 도구로 제한을 해제하는 방법, TUN으로 전환하는 방법을 안내합니다.
먼저 확인할 점: 스토어 앱만 연결되지 않나요?
Clash Verge에서 시스템 프록시를 켠 뒤 브라우저에서는 웹사이트에 접속되지만 특정 스토어 앱은 계속 로딩되거나 로그인이 실패하고 오프라인이라고 표시된다면, AppContainer의 루프백 격리가 원인일 수 있습니다. 먼저 구독을 바꾸기보다 앱이 127.0.0.1:7897 같은 로컬 프록시 주소에 연결할 수 있는지 확인하세요.
다만 Microsoft Store에서 설치했다고 해서 모두 UWP 샌드박스에서 실행되는 것은 아닙니다. 스토어에서는 일반 데스크톱 프로그램, 패키징된 Win32 프로그램 등 여러 유형의 앱을 배포합니다. 루프백 예외는 AppContainer 네트워크 격리의 영향을 받는 프로세스에 적용되므로, 모든 스토어 앱의 연결 오류를 해결하는 만능 방법은 아닙니다.
- 브라우저도 연결되지 않음: 먼저 프록시 포트, 노드 연결 상태, 구독 로드 여부, 시스템 프록시 주소가 올바른지 확인하세요.
- 샌드박스 앱 하나만 연결되지 않음: 먼저 앱의 패키지 ID를 확인한 뒤 해당 앱에만 루프백 예외를 추가해 보세요.
- 시스템 프록시를 끄면 정상 작동: 프록시 경로와 관련된 문제임을 뜻하지만, 루프백 제한인지 앱의 프록시 미지원인지 원격 서버의 연결 거부인지는 따로 확인해야 합니다.
- 프록시를 꺼도 연결되지 않음: 시스템 시간, 앱 서비스 상태, 계정 로그인, 로컬 네트워크를 확인하세요. 이 경우 루프백 예외는 우선 적용할 해결책이 아닙니다.
UWP 루프백 격리와 시스템 프록시의 관계
시스템 프록시는 해당 설정을 따르는 앱에 프록시 주소를 제공할 뿐, 모든 프로세스의 네트워크 연결을 자동으로 가로채지는 않습니다. 프록시 클라이언트는 보통 로컬에서 HTTP 또는 혼합 프록시 포트를 열어 둡니다. 앱이 먼저 로컬 포트에 연결하면 코어가 규칙에 따라 직접 연결할지 프록시 노드를 사용할지 결정합니다.
네트워크 격리의 적용을 받는 AppContainer 앱은 기본적으로 로컬 루프백 주소에 접근할 수 없습니다. 따라서 프록시 코어와 브라우저가 정상이어도 앱은 로컬 프록시에 연결하는 첫 단계에서 실패할 수 있습니다. 여기서 루프백은 원격 노드가 아니라 현재 컴퓨터 자체를 가리킵니다. 예를 들면 IPv4의 127.0.0.1과 IPv6의 ::1입니다.
루프백 예외로 해결되는 문제와 해결되지 않는 문제
- 루프백 예외를 추가하면 지정한 패키지의 AppContainer가 로컬 루프백 서비스에 접근할 수 있습니다. 이 제한 때문에 차단된 로컬 프록시 연결에 적용할 수 있습니다.
- 앱에 프록시 주소를 자동으로 설정해 주거나 모든 네트워크 라이브러리가 Windows 시스템 프록시를 따르도록 강제하지는 않습니다.
- 만료된 구독, DNS 오류, 노드 시간 초과, 인증서 오류, 앱 자체의 지역 제한은 해결하지 못합니다.
- Clash/mihomo의 분기 규칙을 변경하지 않습니다. 예외를 추가한 뒤 직접 연결할지 프록시를 사용할지는 유효한 설정과 정책 그룹에 따라 결정됩니다.
루프백 제한을 우회하려고 리스닝 주소를 0.0.0.0으로 바꾸거나 Windows 방화벽을 통째로 끄지 마세요. 로컬 서비스가 노출되는 범위만 달라질 뿐, 앱의 격리 경계를 정확히 해결하지는 못합니다.
CheckNetIsolation으로 특정 앱에만 예외 추가하기
1. 로컬 프록시가 정상 작동하는지 확인
Windows 11에서는 「설정」→「네트워크 및 인터넷」→「프록시」→「수동 프록시 설정」에서 주소와 포트를 확인하세요. Windows 10에서는 「설정」→「네트워크 및 인터넷」→「프록시」로 이동하면 됩니다. 클라이언트가 시스템 프록시를 관리한다면 설정이 서로 덮어쓰이지 않도록 클라이언트에서 리스닝 포트를 먼저 확인하세요.
PowerShell을 열고 포트 리스닝 여부와 프록시를 명시한 HTTPS 요청을 테스트합니다:
Test-NetConnection -ComputerName 127.0.0.1 -Port 7897
curl.exe --proxy http://127.0.0.1:7897 --head --connect-timeout 10 https://www.microsoft.com/
TcpTestSucceeded : True는 TCP 포트에 연결할 수 있다는 뜻일 뿐, 노드와 웹사이트까지 연결된다는 의미는 아닙니다. 두 번째 명령은 연결 시간 제한을 10초로 설정합니다. HTTP 응답을 받으면 해당 요청이 애플리케이션 계층의 응답까지 받은 것입니다. 연결이 거부되면 먼저 포트를 바로잡거나 코어를 실행하세요. 아직 예외를 추가할 필요는 없습니다.
2. 앱의 PackageFamilyName 확인
시작 메뉴에서 PowerShell을 검색한 뒤 「관리자 권한으로 실행」을 선택하세요. 아래에서는 Microsoft Store 패키지를 예로 들어 현재 사용자에게 설치된 패키지 ID를 확인합니다:
Get-AppxPackage -Name Microsoft.WindowsStore |
Select-Object Name, PackageFamilyName, PackageFullName
명령에 필요한 값은 앱의 표시 이름이나 버전·아키텍처 정보가 포함된 PackageFullName이 아니라 PackageFamilyName입니다. Microsoft Store에서 흔히 사용하는 패키지 패밀리 이름은 Microsoft.WindowsStore_8wekyb3d8bbwe이지만, 실행 전에 실제 조회 결과를 확인하세요.
다른 앱을 대상으로 한다면 현재 사용자에게 설치된 패키지 목록을 조회한 다음 Name으로 찾으세요. 표시 이름이 비슷하다는 이유만으로 검색 결과 전체에 예외를 추가하지 마세요:
Get-AppxPackage |
Sort-Object Name |
Select-Object Name, PackageFamilyName
조회 결과가 없으면 앱이 현재 계정에 설치되어 있는지, 일반 데스크톱 프로그램은 아닌지 먼저 확인하세요. 다른 관리자 계정으로 권한을 높여 실행하면 현재 사용자 패키지 목록이 다르게 표시될 수 있습니다. 결과가 없다고 해서 패키지가 손상된 것은 아닙니다.
3. 예외 추가 후 목록 확인
관리자 권한 터미널에서 다음 명령을 실행하세요. 첫 번째 명령은 패키지 하나를 추가하고, 두 번째 명령은 현재 예외 목록을 표시합니다:
CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s
-a는 추가, -n 다음에는 패키지 패밀리 이름, -s는 조회를 뜻합니다. 목록은 SID나 패키지 이름이 포함된 형식으로 표시될 수 있으며, 표시 방식은 시스템 환경에 따라 다를 수 있습니다. 「액세스가 거부되었습니다」 오류가 나오면 터미널이 관리자 권한으로 실행됐는지 확인하세요. 이름 관련 오류라면 복사한 항목을 다시 확인하세요.
작업 중인 내용을 저장한 뒤 대상 앱을 완전히 종료하고 시작 메뉴에서 다시 실행하세요. 앱의 백그라운드 프로세스가 남아 있다면 작업 관리자에서 해당 앱의 프로세스임을 확인한 뒤 종료하고 다시 시도하세요. 용도를 알 수 없는 시스템 프로세스는 종료하지 마세요.
4. 되돌릴 수 있도록 변경 사항 기록
테스트가 끝난 뒤 권한이 더 이상 필요하지 않다면 방금 추가한 항목만 삭제할 수 있습니다:
CheckNetIsolation.exe LoopbackExempt -d -n="Microsoft.WindowsStore_8wekyb3d8bbwe"
CheckNetIsolation.exe LoopbackExempt -s
-d는 삭제를 뜻합니다. 작업 날짜, 대상 패키지, 재테스트 결과를 기록해 두세요. 기존 예외를 일괄 삭제하면 다른 앱에 설정된 로컬 통신까지 영향을 받을 수 있습니다.
GUI 도구 사용: 대상 패키지만 선택하고 모두 체크하지 않기
사용 중인 클라이언트에 「UWP 루프백 예외」 메뉴가 있다면 해당 메뉴에서 GUI 관리 도구를 실행할 수 있습니다. 메뉴 위치는 클라이언트와 파생 버전, 릴리스에 따라 다르므로 구버전 클라이언트의 버튼 위치를 Clash Verge Rev에 그대로 적용할 수는 없습니다. 메뉴를 찾을 수 없다면 위의 Windows 명령을 사용하세요. 별도 도구를 설치할 필요는 없습니다.
널리 쓰이는 GUI 도구로는 Fiddler Classic의 WinConfig/AppContainer Loopback Exemption Utility가 있습니다. 이미 설치되어 있고 신뢰할 수 있는 도구라면 이를 사용해 루프백 권한을 관리할 수 있습니다. 여기서는 예외 관리 기능만 사용하므로 HTTPS 복호화를 켜거나 패킷 캡처용 루트 인증서를 가져올 필요가 없습니다.
- 관리자 권한으로 루프백 예외 도구를 실행하고 로컬 앱 패키지 목록이 표시될 때까지 기다립니다.
- 앱 이름과 패키지 ID를 기준으로 대상을 찾으세요. 이름이 명확하지 않다면 PowerShell에서 다시 조회해 확인하세요.
- 로컬 프록시에 접근해야 하는 앱만 선택한 뒤 도구의 저장 버튼(예:
Save Changes)을 클릭하세요. CheckNetIsolation.exe LoopbackExempt -s를 실행해 확인한 다음 대상 앱을 재시작해 테스트하세요.
TUN으로 전환: 시스템 프록시를 따르지 않는 앱에 적합
루프백 예외를 적용한 뒤에도 앱이 시스템 프록시를 전혀 사용하지 않는다면, 예외 목록을 계속 수정해도 앱이 HTTP 프록시를 자동으로 사용하지는 않습니다. 이때는 mihomo의 TUN 모드를 고려할 수 있습니다. 가상 네트워크 인터페이스와 라우팅을 통해 조건에 맞는 IP 트래픽을 가로채 규칙에 따라 처리합니다.
TUN은 앱이 로컬 HTTP 프록시에 직접 연결하는 방식과 다른 경로로 트래픽을 처리하므로, 시스템 프록시를 따르지 않는 트래픽에 자주 사용됩니다. 그렇다고 UWP 네트워크 격리를 무조건 해결하는 기능은 아닙니다. 앱 권한, 방화벽, 라우팅, DNS 설정이 여전히 결과에 영향을 줄 수 있습니다.
- 현재 시스템 프록시, TUN, DNS, 정책 그룹 상태를 기록해 두어 원래 설정으로 되돌릴 수 있게 하세요.
- Clash Verge Rev에서 서비스 모드가 작동하는지 확인한 다음 TUN을 켜세요. 서비스 설치 및 설정 메뉴는 사용 중인 버전의 화면을 기준으로 확인하세요. 서비스를 처음 설치할 때는 관리자 권한이 필요할 수 있습니다.
- 트래픽 처리 경로를 구분하려면 테스트 중 시스템 프록시를 끄고 TUN만 사용하세요. 비교를 위해 다른 VPN이나 프록시 클라이언트를 동시에 실행하지 마세요.
- 같은 앱에서 같은 작업을 다시 수행하고, 트레이 아이콘이 켜져 있는지만 보지 말고 클라이언트 연결 기록, 대상 도메인, 적용된 규칙을 확인하세요.
TUN을 켠 뒤 브라우저에서도 도메인을 확인할 수 없다면 루프백 예외를 더 추가하기보다 DNS와 라우팅을 먼저 점검하세요. 회사 VPN, 가상 머신 네트워크, 다른 터널을 사용하는 경우 자동 라우팅이 충돌할 수 있습니다. 테스트를 중단하고 원래 상태로 복구한 뒤 항목별로 비교하세요. 또한 TUN이 모든 앱 트래픽을 같은 노드로 보내는 것은 아닙니다. 규칙에서 DIRECT로 지정된 대상은 직접 연결될 수 있습니다.
예외를 추가한 뒤에도 실패한다면 연결 단계별로 확인
| 증상 | 먼저 확인할 항목 | 다음 조치 |
|---|---|---|
| 로컬 포트 테스트 실패 | 코어 실행 여부, 포트 일치 여부 | 실제 리스닝 포트를 확인한 뒤 다시 테스트 |
| 프록시를 지정한 curl 요청도 실패 | 노드, DNS, 규칙, 원격 연결 상태 | 프록시 연결 경로를 먼저 복구하고 예외를 반복 추가하지 않기 |
| 예외는 있지만 앱 연결 기록이 없음 | 패키지 ID, 앱의 프록시 지원 여부, 백그라운드 프로세스 | 앱을 완전히 종료한 뒤 재테스트하고 필요하면 TUN과 비교 |
| 연결 기록은 있지만 로그인 실패 | 적용된 정책, 서버 응답, 계정 상태 | 해당 도메인과 오류 코드 확인 |
연결 기록에 항목이 없다고 해서 루프백 격리가 원인이라고 단정할 수는 없습니다. 앱이 요청을 보내지 않았거나 캐시를 사용했을 수도 있고, 가로채지 않은 경로로 통신했을 수도 있습니다. 반대로 대상 도메인이 표시되고 예상한 정책이 적용됐다면 DNS 결과, 노드의 출구 IP, 서버 응답을 중점적으로 확인하세요.
netsh winhttp import proxy source=ie를 UWP 루프백 문제 해결 명령으로 사용하지 마세요. 이 명령은 WinHTTP 프록시 설정을 가져오는 용도이며, AppContainer 루프백 권한을 변경하거나 대상 앱이 사용하는 네트워크 스택을 바꾸지는 않습니다. 특정 서비스가 WinHTTP를 사용한다고 확인된 경우에만 영향을 파악한 뒤 별도로 처리하세요.
재현 가능한 기록에는 최소한 Windows 버전, 클라이언트 및 코어 버전, 앱 패키지 패밀리 이름, 프록시 리스닝 포트, 시스템 프록시와 TUN의 켜짐 여부, 오류가 발생하는 구체적인 절차가 포함되어야 합니다. winver로 Windows 버전을 확인하고 한 번에 변수 하나만 바꾸면 노드 교체, DNS 변경, TUN 활성화를 동시에 하는 것보다 원인을 찾기 쉽습니다. 규칙 및 트래픽 처리 설정은 설정 참고를, 기본 연결 문제는 문제 해결을 참고하세요.