브라우저는 다른 것을 쓰고, Edge 는 연 기억이 없다. 그런데 작업 관리자의 세부 정보 탭에는 msedgewebview2.exe 가 줄줄이 있다. 확인한 시점에 내 PC 에서는 18개였다. Edge 를 지웠다는 사람도, 시작 프로그램에서 Edge 를 다 껐다는 사람도 이 이름은 그대로 본다. 이름에 Edge 가 들어 있지만 Edge 브라우저가 아니기 때문이다.

Edge 가 아니라 앱 안의 브라우저

msedgewebview2.exe 는 Microsoft Edge WebView2 런타임의 실행 파일이다. 앱 개발자가 화면 일부를 HTML 로 만들고 싶을 때, 브라우저 엔진을 앱에 통째로 넣는 대신 Windows 에 깔린 WebView2 를 빌려 쓴다. 앱 창 안에 보이는 웹 화면을 실제로 그리는 것은 이 런타임이고, 그래서 작업 관리자에는 앱 이름이 아니라 msedgewebview2.exe 로 잡힌다.

파일은 이랬다.

C:\Program Files (x86)\Microsoft\EdgeWebView\Application\156.0.4314.50\msedgewebview2.exe

파일 설명은 "Microsoft Edge WebView2", 크기는 약 4.7MB, 서명자는 Microsoft Corporation 으로 유효했다. Edge 브라우저와 같은 Chromium 기반 엔진이지만 설치 폴더도, 업데이트도 따로다. 설치된 앱 목록에는 "Microsoft Edge WebView2 런타임"이라는 이름으로 올라 있다.

재미있는 건 버전이었다. 레지스트리에 등록된 런타임 버전은 156.0.4314.58 인데, 실제로 돌고 있는 프로세스는 156.0.4314.50 폴더의 것이었다. Application 폴더에도 두 버전 폴더가 나란히 있었다. 업데이트는 이미 받아 두었지만, 앞서 WebView2 를 띄운 앱들이 아직 예전 버전을 붙잡고 있는 상태다. 앱을 다시 시작하면 새 버전으로 넘어가고, 쓰는 앱이 없어지면 예전 폴더는 정리되는 것으로 보인다.

어떤 앱이 띄웠는지 찾기

18개를 앱별로 나누는 데는 명령줄이 가장 확실하다. 자기 계정으로 뜬 프로세스라 관리자 권한 없이도 명령줄이 보인다. Windows 검색이 띄운 첫 번째 프로세스의 명령줄 앞부분은 이랬다.

"...\156.0.4314.50\msedgewebview2.exe" --embedded-browser-webview=1
  --webview-exe-name=SearchHost.exe --webview-exe-version=2608.25008.200.0
  --user-data-dir="%USERPROFILE%\AppData\Local\Packages\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\LocalState\EBWebView"
  ...

--embedded-browser-webview=1 이 앱에 들어간 WebView2 라는 표시이고, --webview-exe-name 이 띄운 앱의 실행 파일 이름이다. --user-data-dir 은 그 앱이 쿠키나 캐시를 두는 폴더인데, 끝이 EBWebView 로 끝나는 것이 WebView2 의 기본 폴더 이름이다. 이 값으로 묶어 세는 PowerShell 한 줄은 이렇다.

Get-CimInstance Win32_Process -Filter "Name='msedgewebview2.exe'" |
    ForEach-Object { if ($_.CommandLine -match '--webview-exe-name=(\S+)') { $matches[1] } else { '(crashpad)' } } |
    Group-Object | Select-Object Count, Name
Count Name
----- ----
    5 SearchHost.exe
    5 Widgets.exe
    5 KakaoTalk.exe
    3 (crashpad)

Windows 검색(SearchHost.exe), 위젯(Widgets.exe), 카카오톡이 띄운 것이었다. 부모 프로세스를 따라가도 결과가 같았다. 맨 위의 msedgewebview2.exe 하나는 부모가 앱 자신이고, 나머지는 그 msedgewebview2.exe 의 자식이다. (crashpad) 로 잡힌 셋은 앱 이름이 명령줄에 없는 충돌 보고용 프로세스로, 각 앱 묶음에 하나씩 붙어 있었다. 결국 앱 하나에 여섯 개다.

작업 관리자로도 찾을 수 있다. 프로세스 탭에서는 대개 그 앱 항목을 펼치면 아래에 WebView2 프로세스가 묶여 보인다. 세부 정보 탭에서는 열 머리글을 오른쪽 클릭해 "열 선택"에서 "명령줄"을 켜면 --webview-exe-name 을 바로 읽을 수 있다.

앱 하나에 여섯 개가 붙는 이유

Chromium 계열 브라우저는 일을 여러 프로세스로 나눈다. WebView2 도 같다. 명령줄의 --type= 값으로 역할이 갈렸다.

역할 --type 앱 하나당
브라우저(관리) 프로세스 없음 1
화면 그리기 renderer 1
GPU 처리 gpu-process 1
네트워크·저장소 같은 보조 서비스 utility 2
충돌 보고 crashpad-handler 1

웹 화면을 그리는 renderer 가 죽어도 앱 전체가 같이 꺼지지 않게, 그리고 웹 내용을 샌드박스에 가두려고 나눈 구조다. 앱이 웹 화면을 여러 개 띄우면 renderer 가 늘어나니 여섯 개보다 많아질 수도 있다.

메모리는 18개를 합쳐 작업 집합 383MB, 개인 메모리 621MB 였다. 앱별로 나누면 Windows 검색 쪽이 작업 집합 228MB 로 가장 컸고, 카카오톡 쪽이 114MB, 위젯 쪽은 41MB 였다. 위젯은 작업 집합은 작아도 개인 메모리가 278MB 로 커서, 화면에 보이지 않는 동안 메모리를 디스크 쪽으로 밀어내 둔 상태로 보인다. 어느 쪽이든 msedgewebview2.exe 가 메모리를 많이 쓴다면 그건 런타임의 문제라기보다 그것을 띄운 앱의 웹 화면이 무거운 것이다.

지우면 안 되는 이유

"msedgewebview2 삭제"를 검색하면 런타임을 강제로 지우는 방법이 나온다. 하지 않는 편이 좋다. 이 PC 만 봐도 Windows 검색과 위젯이 WebView2 위에서 돌고 있었다. 런타임이 없으면 검색 창이나 위젯이 빈 화면이 되거나 열리지 않고, WebView2 를 쓰는 상용 앱도 화면 일부가 나오지 않는다. 최근 Windows 11 에는 런타임이 기본 구성 요소로 들어 있고, 지워도 Windows 업데이트나 앱 설치 과정에서 다시 깔리는 것으로 알려져 있다.

프로세스를 작업 관리자에서 끝내는 것도 마찬가지로 얻는 게 없다. 그 앱의 웹 화면이 깨지고, 앱이 화면을 다시 그리면 곧 다시 뜬다.

대신 할 수 있는 건 띄운 앱을 다루는 것이다. 위의 한 줄로 어느 앱 묶음이 메모리나 CPU 를 쓰는지 확인하고, 쓰지 않는 앱이라면 그 앱의 백그라운드 실행이나 시작 프로그램 등록을 끈다. 위젯이 필요 없다면 작업 표시줄 설정에서 위젯을 꺼 두면 Widgets.exe 가 띄우던 여섯 개도 뜰 일이 줄어든다. 경로가 EdgeWebView\Application 아래가 아니거나 서명이 Microsoft 가 아니라면 그때는 이름만 빌린 다른 파일을 의심한다.

다음 편은 개발자나 명령줄 도구를 쓰는 사람의 작업 관리자에 수십 개씩 쌓이는 conhost.exe 다. 콘솔 창 호스트가 무엇이고 누가 띄웠는지 부모 프로세스로 찾는 법을 본다.