Microsoft Edge WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ก ์ธํด ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ธ์ฆํ๊ณ ์๋์ ? ๐ฉ Win32, WPF ๋๋ WinForms ์ฑ์ WebView2๋ฅผ ๋ด์ฅํ๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๋๊ตฌ๋ ๊ฒช๋ ๋ฌธ์ ์ ๋๋ค. ํ์ง๋ง ๊ฑฑ์ ํ์ง ๋ง์ธ์! ์ด ๊ฐ์ด๋์์๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ฐพ์๋ด๊ณ , ์์ ํ๊ณ , ์ฌ๋ฐ ๋ฐฉ์งํ์ฌ ์ฑ๋ฅ์ ํ๋ณตํ๊ณ ์ฌ์ฉ์ ๋ง์กฑ๋๋ฅผ ๋์ด๋ ์ค์ง์ ์ธ ๋ฌธ์ ํด๊ฒฐ ๋จ๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค . ์ง๊ธ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋์ฐพ์ ๋ด ์๋ค! ๐ช
โ ๏ธ WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ๊ฒฌ ๋ฐฉ๋ฒ : ์ฃผ์ ์ฆ์
์์ ํ๊ธฐ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋์์ธ์ง ํ์ธํ์ธ์. ํ์์ด๋ ์ฑ ์ ํด ํ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ณ์ ๋์๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์์ ๋จ์์ ๋๋ค. ๋ค์ ์ฌํญ๋ค์ ํ์ธํ์ธ์:
- ์์ ๊ด๋ฆฌ์์์ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ์ ๊ฒฝ์ฐ์๋ ์ง์์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
- ์ฅ์๊ฐ ์ฌ์ฉ ํ ์ฑ ์๋ ์ ํ ๋๋ ์ถฉ๋ ๋ฐ์.
- ์ฌ๋ฌ WebView2 ์ธ์คํด์ค๊ฐ ์ข ๋ฃ๋์ง ์๊ณ RAM ์ฉ๋์ ๊ณผ๋ํ๊ฒ ์ฆ๊ฐ์ํค๊ณ ์์ต๋๋ค.
ํ: Windows ์์ ๊ด๋ฆฌ์(Ctrl+Shift+Esc) โ ์ธ๋ถ ์ ๋ณด ํญ โ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ธ์. ๋๋ ProcMon์ ์ฌ์ฉํ์ฌ ๋ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ฌ์ฉ๋์ด ๊พธ์คํ ์ฆ๊ฐํ๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์์ฌํด ๋ด์ผ ํฉ๋๋ค !
๐ Microsoft Edge WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์ ์ ์ผ๋ฐ์ ์ธ ์์ธ
๋ฉ๋ชจ๋ฆฌ ๋์๋ ์ฝ๋์ ํจ์ ๊ณผ ๋ฐํ์ ์ค๋ฅ์ ์จ์ด ์์ต๋๋ค. ๋ค์์ ์ฃผ์ ์์ธ ๋ชฉ๋ก์ ๋๋ค.
| ์์ธ | ๋์ถ๋๋ ์ด์ | ๋น ๋ฅธ ํ์ธ |
|---|---|---|
| ๋ถ์ ์ ํ ํ๊ธฐ | WebView2 ์ปจํธ๋กค๋ฌ ๋๋ ํ๊ฒฝ์ด ํด์ ๋์ง ์์ Chromium ์ฐธ์กฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค. | Dispose()์ข
๋ฃ ์ ํธ์ถ ๋๋์ง ํ์ธํ์ญ์์ค . |
| ์ค๋๋ ๋ฐํ์ | ๊ธฐ์กด EverGreen ๋ฐํ์์๋ ๋์ถ ํจ์น๊ฐ ์์ต๋๋ค. | ๋ค์ ๋ฐฉ๋ฒ์ ํตํด ๋ฒ์ ์ ํ์ธํ์ธ์ GetAvailableCoreWebView2BrowserVersionString(). |
| ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ ์ง | ๊ตฌ๋ ํด์ ๋ CoreWebView2 ์ด๋ฒคํธ๋ ๊ฐ์ฒด๋ฅผ ๊ณ์ ํ์ฑํ ์ํ๋ก ์ ์งํฉ๋๋ค. | NavigationCompleted +=-= ์์ด ๊ฒ์ํฉ๋๋ค . |
| ํค๋น JS/๋ธ๋ ์ด์ | ๊ด๋ฆฌ๋์ง ์๋ DOM ๋๋ WASM ํ์ ์ ์ด๋์ง ์๊ณ ๊ณ์ ์ฆ๊ฐํฉ๋๋ค. | Edge DevTools๋ฅผ ์ฌ์ฉํ์ฌ ํ๋กํ์ ์์ฑํ์ธ์. |
| ๋ค์ค ์ธ์คํด์ค ํ์ฐ | ๊ธฐ์กด์ ๊ด์ ์ ์ฌํ์ฉํ์ง ์๊ณ ์๋ก์ด ๊ด์ ์ ์ฐฝ์ถํฉ๋๋ค. | ํ์ฑ CoreWebView2ํธ๋ค ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. |
๋ฌธ์ ์ 90%๋ ์ด๋ฌํ ์์ธ์์ ๋น๋กฏ๋ฉ๋๋ค. ๋น ๋ฅธ ํด๊ฒฐ์ ์ํด ๋จผ์ ์ด ๋ถ๋ถ์ ๊ณ ์น์ธ์! ๐
1๏ธโฃ Microsoft Edge WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ํด๊ฒฐ ๋จ๊ณ๋ณ ๊ฐ์ด๋
์๋งค๋ฅผ ๊ฑท์ด๋ถ์ด์ธ์. ๋ค์์ ๊ฒ์ฆ๋ ๋จ๊ณ๋ฅผ ์์๋๋ก ๋ฐ๋ฅด์ธ์.
- WebView2 ๋ฐํ์์ ์
๋ฐ์ดํธํ๋ ค๋ฉด
์ต์ Evergreen Bootstrapper๋ฅผ ๋ค์ด๋ก๋ํ์ธ์ . ์์ ๋ฒ์ ๋๋ Evergreen ๋ฒ์ ์ ์ค์นํ์ธ์. Evergreen ๋ฒ์ ์ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋์ด ์ทจ์ฝ์ ์ ํด๊ฒฐํฉ๋๋ค. ์ค์น ํ ์ฑ์ ๋ค์ ์์ํ์ธ์. โ - ์ ์ ํ ํ๊ธฐ ๋ฐฉ๋ฒ์
๋ฐ๋์ ์ค์ํ์ญ์์ค. ํฌ์ฅ์ฌ๋ก ๊ฐ์ธusing๊ฑฐ๋ ๋ช ์์ ์ผ๋ก ํ์ํ์ญ์์คDispose().public void CloseWebView() { ์น๋ทฐ๊ฐ null์ด ์๋๋ฉด { webView.Dispose(); ์น๋ทฐ = null; } ํ๊ฒฝ์ด null์ด ์๋๋ฉด { environment.Dispose(); ํ๊ฒฝ = null; } }ํผ ๋ซ๊ธฐ ๋๋ ํ์ ์ฌ์ค์ ์ ํธ์ถํฉ๋๋ค. - ์ด๋ฒคํธ ์ฐ๊ฒฐ ํด์
๋ฐ ํธ๋ค๋ฌ ๋ถ๋ฆฌ:webView.NavigationCompleted -= OnNavigationCompleted;์ํ ์ฐธ์กฐ๋ฅผ ๋์ผ๋ ค๋ฉด Dispose ์ ์ ์ด ์์ ์ ์ํํ์ญ์์ค. - ๋ชจ๋ํฐ๋ง ๋๊ตฌ
- ์์ ๊ด๋ฆฌ์ + PerfView: ํ ์ค๋ ์ท ์บก์ฒ. - Edge DevTools: F12 โ ๋ฉ๋ชจ๋ฆฌ ํญ์์ JavaScript ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ธ. - dotMemory: JetBrains์ .NET ํ๋กํ์ผ๋ง ๋๊ตฌ. - ๋จ์ผ ์ค๋ ๋
๋ฉ๋ชจ๋ฆฌ ๋์ ํ ์คํธ๋ ๋น๋๊ธฐ ํ๊ฒฝ์์ ๋ฐ์ํ๋ ํผ๋์ ๋ฐฉ์งํฉ๋๋ค.EnsureCoreWebView2Async(null)UI ์ค๋ ๋์์๋ง ์ฌ์ฉํ์ญ์์ค.
โญ ๊ณ ๊ธ ํด๊ฒฐ ๋ฐฉ๋ฒ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
์์ง๋ ๋ฌผ์ด ์๋์? ์ ๊ทธ๋ ์ด๋ํ์ธ์:
- ๋ทฐ ์ฌํ์ฉ: ์ WebView2๋ฅผ ์์ฑํ๋ ๋์ ์ฐฝ๋น ํ๋์ WebView2๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ธ์ ์ ํ:
--disable-background-timer-throttling์ํฅ ํ ์คํธ๋ฅผ ์ํด ์ ์คํ๊ฒ ์ค์ ํ์ญ์์ค . - GC ์ง์:
GC.Collect(2, GCCollectionMode.Forced, true);ํ๊ธฐ ํ ์ฐ๋ฝ์ ๊ฐ๋ฅํ์ง๋ง, ๊ฐ๊ธ์ ์ผ๋ก ์์ ํด ์ฃผ์ญ์์ค. - Blazor ๊ด๋ จ: .
Virtualize์์ ์๋น์ค๋ฅผ ์ฌ์ฉ ํ๊ณ ํด์ ํฉ๋๋คDisposeAsync. - ํ๋กํ์ผ ๋ฐํ์: ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋น๋์ ๋ํด์๋ Microsoft์ ๋ฒ์ ๊ด๋ฆฌ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค .
๐ ๊ฒฐ๊ณผ ํ: ๊ฐ๋ฐ์ ํฌ๋ผ์์ ์ฐพ์ ์ค์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ.
| ์์ ์ฌํญ์ด ์ ์ฉ๋์์ต๋๋ค | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์์จ(%) |
|---|---|
| ๋ฐํ์ ์ ๋ฐ์ดํธ | 20~30% |
| ์ ์ ํ๊ฒ ํ๊ธฐํ์ญ์์ค | 40~60% |
| ํ์ฌ ์ ๋ฆฌ | 15-25% |
๐ ํฅํ WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ์ธ์
์ต๊ดํํ์ธ์: - ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ๋ ํ ์คํธ ํ๊ธฐ. - ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ง์ ํ์ฉํ CI/CD. - Application Insights๋ฅผ ํตํ ๋ชจ๋ํฐ๋ง. ์ฑ์ด ๋ ์ํํ๊ฒ ์คํ๋๊ณ ์ฌ์ฉ์ ์ฒด๋ฅ ์๊ฐ์ด ๊ธธ์ด์ง๋๋ค. ๋ชจ๋์๊ฒ ์ด๋์ด์ฃ ! ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋์? ์๋ ๋๊ธ์ ๋จ๊ฒจ์ฃผ์๋ฉด ํจ๊ป ํด๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ๐
WebView2 ๊ด๋ จ ์ถ๊ฐ ํ์ ๊ธฐ๋ํด ์ฃผ์ธ์. ์ต์ ๋ฐํ์์ ์ต์ ํ๋์ด ์์ต๋๋ค.