์ฑ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๊ณ ์๊ธฐ์น ์๊ฒ ์ถฉ๋ํ๋ ๋ฌธ์ ๋๋ฌธ์ ๋ต๋ตํ์ ๊ฐ์? Microsoft Edge WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์
์ ์น ์ฝํ
์ธ ๋ฅผ ์ฝ์
ํ๋ ๊ฐ๋ฐ์์๊ฒ ํํ ๋ฐ์ํ๋ ๊ณจ์นซ๊ฑฐ๋ฆฌ์
๋๋ค. ํ์ง๋ง ๊ฑฑ์ ํ์ง ๋ง์ธ์. ์ด ๊ฐ์ด๋์์๋ Microsoft Edge WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ๋ ์ ํํ๊ณ ์ค์ฉ์ ์ธ ๋จ๊ณ๋ฅผ ์๋ด ํฉ๋๋ค. ๊ทผ๋ณธ ์์ธ์ ํ์
ํ๊ณ , ๊ฐ๋ ฅํ ์ง๋จ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ฉฐ, WinForms, WPF ๋๋ WinUI ์ฑ์ ์ํํ๊ฒ ์คํํ ์ ์๋๋ก ์๋ฐฉ ํ์ ๊ณต์ ํฉ๋๋ค. ์ด์ RAM์ ๋์ฐพ์ ์ค๋น๊ฐ ๋์
จ๋์? ์์ํด ๋ณด๊ฒ ์ต๋๋ค! ๐ง
๐ต๏ธโโ๏ธ WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์ ์ ์ผ๋ฐ์ ์ธ ์์ธ
๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ฒซ ๋ฒ์งธ ์ฑ๊ณต์
๋๋ค. ์ต์ Chromium Edge ์์ง์ผ๋ก ๊ตฌ๋๋๋ WebView2 ๋ ์ต์ ์น ์๋ฒ ๋ฉ์ ํ์ํ์ง๋ง, ๋ฆฌ์์ค๋ฅผ ์๋ชป ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ํด์ ๋์ง ์์ CoreWebView2 ๊ฐ์ฒด
Dispose() : ํ๊ฒฝ ๋๋ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณผ๋ํ๊ฒ ์ ์ง๋ฉ๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋์ : ์ด๋ฒคํธ
NavigationCompleted๋๋ DOM ์ด๋ฒคํธ ๊ตฌ๋
์ ์ทจ์ํ๋ฉด ์ฐธ์กฐ๊ฐ ๋์ ๋ฉ๋๋ค.
- JavaScript ์ํธ ์ด์ฉ์ฑ ๋ฌธ์ ์ : ์ ์ ํ ์ ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ ์ฑ ์ค๋ ์ง์๋๋ JS ๊ฐ์ฒด ๋๋ ์ฝ๋ฐฑ.
- ํ์ด๋จธ ๋ฐ ์ ๋๋ฉ์ด์
๋์ : ๋ก๋๋ ํ์ด์ง์์ setInterval/setTimeout์ด ๋ฌดํ์ ์คํ๋๋ ๋ฌธ์ .
- ์ค๋๋ ๋ฐํ์ : ์ด์ ๋ฒ์ ์ Evergreen Runtime์๋ ์ค์ํ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌํญ์ด ๋๋ฝ๋์ด ์์ต๋๋ค. Microsoft์ WebView2 ํ์ด์ง๋ฅผ ํตํด ํญ์ ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํ์ญ์์ค .
์ด๊ฒ๋ค์ ์ด๊ธฐ์ ์์์ฐจ๋ฆฌ๋ฉด ์น๋ฆฌ์ ์ ๋ฐ์ ์จ ์
์
๋๋ค. ๋ค์์ผ๋ก, ์ ์ ํ ๋๊ตฌ๋ฅผ ์ค๋นํ์ธ์! ๐
๐ WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์ ์ง๋จ์ ์ํ ํ์ ๋๊ตฌ
์ ๋ฌธ๊ฐ์ฒ๋ผ ์ ๋ณด ์ ์ถ์ ์ฐพ์๋ด๋ ค๋ฉด ์ด๋ฌํ ๋ฌด๋ฃ ๊ณ ์ฑ๋ฅ ๋๊ตฌ๋ฅผ ํ์ฉํ์ธ์. ์ด ๋๊ตฌ๋ค์ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ด ์ ํํ ์ด๋์ ์๋์ง ๋ณด์ฌ์ค ๊ฒ์
๋๋ค.
| ๋๊ตฌ |
๋ชฉ์ |
WebView2์ ์ ํฉํ ์ด์ |
| ์์
๊ด๋ฆฌ์/๋ฆฌ์์ค ๋ชจ๋ํฐ |
ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์ |
msedgewebview2.exe์ค์๊ฐ์ผ๋ก ๋ณ๋ ์ฌํญ์ ํ์ธํ์ธ์ โ
|
| PerfView (๋ง์ดํฌ๋ก์ํํธ) |
ํ ์ค๋
์ท ๋ฐ GC ๋ถ์ |
Pinpoints๋ .NET ๋ฐ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด๋ฅผ ์ ์งํ์ต๋๋ค. ์ด๋ WebView2 ์ํธ ์ด์ฉ์ฑ์ ์ํ ํต์ฌ ์์์
๋๋ค. |
| dotMemory (์ ฏ๋ธ๋ ์ธ์ฆ) |
๊ณ ๊ธ .NET ํ๋กํ์ผ๋ง |
ํธ๋ ์ปจํธ๋กค๋ฌ ์ฐธ์กฐ ๋ฐ ์ด๋ฒคํธ ๊ตฌ๋
์ ์์ฝ๊ฒ ๊ด๋ฆฌํฉ๋๋ค. |
| Chrome ๊ฐ๋ฐ์ ๋๊ตฌ (WebView2 ๊ฒฝ์ ) |
JS ํ ์ค๋
์ท |
--enable-devtools-experiments์ฌ์ธต์ ์ธ JavaScript ๋์ถ ํ์ง๋ฅผ ์ํด ํ์ฑํํ์ธ์. |
๊ฟํ: ๋จผ์ ์์
๊ด๋ฆฌ์๋ก ์ฆ์์ ํ์ธํ ๋ค์, PerfView๋ก ๋ฌธ์ ๋ฅผ ๋ถ์ํด ๋ณด์ธ์.
์ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ฌํ๋ ๋ณด์ด์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ผ๋ด๋ ๋ชจ์ต์ ์์ํด ๋ณด์ธ์. ์ ๋ง ์ง๋ฆฟํ์ง ์๋์?
1๏ธโฃ Microsoft Edge Webview2 ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ํด๊ฒฐ ๋จ๊ณ๋ณ ๊ฐ์ด๋
๊ฒ์ฆ๋ ์ด ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ผํ์ธ์. ๊ฐ ๋จ๊ณ๋ฅผ ์๋ฃํ ํ์๋ ํ
์คํธ๋ฅผ ํตํด ์งํ ์ํฉ์ ์ธก์ ํ์ธ์. ๋น์ ์ ์ฑ์ด ๋ถ๋ช
์ข์ํ ๊ฒ๋๋ค! ๐
- โ
์ฌ๋ฐ๋ฅธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.
WebView2๋ ํญ์ using๋ธ๋ก์ผ๋ก ๊ฐ์ธ๊ฑฐ๋ ๋ช
์์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค Dispose().
using (var environment = await CoreWebView2Environment.CreateAsync())
using (var controller = await environment.CreateCoreWebView2ControllerAsync(host))
{
// Your WebView2 code here
}
์ด ๋ถ๋ถ์ ๋์น์
จ๋์? ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค๋ ์์ํ ๊ณ์ ์คํ๋ ์ ์์ต๋๋ค.
- ๐ ์ด๋ฒคํธ ๊ตฌ๋
์ทจ์:
์ฝํ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๊ตฌ๋
์ ์ทจ์ํ๋ ค๋ฉด ๋ค์ ๋ฐฉ๋ฒ์ ํ์ฉํ์ธ์ CoreWebView2Controller.Close.
controller.CoreWebView2.NavigationCompleted -= OnNavigationCompleted;
- ๐ PerfView๋ฅผ ์ฌ์ฉํ ํ๋กํ์ผ๋ง
1. Microsoft์์ ๋ค์ด๋ก๋ํฉ๋๋ค.
2. WebView2 ์์
์ ํ์ ํ ์ค๋
์ท์ ์์งํฉ๋๋ค.
3. "CoreWebView2" ๋ฃจํธ๋ฅผ ๊ฒ์ํ๊ณ ๋ถํ์ํ ์ ์ง ํญ๋ชฉ์ ์ญ์ ํฉ๋๋ค.

- โก ๋ฐํ์ ๋ฐ SDK ์
๋ฐ์ดํธ
๊ณต์ ์ฑ๋์์ ์ต์ Bootstrapper๋ฅผ ๋ค์ด๋ก๋ํ์ธ์. ์ต๊ทผ ํจ์น๋ก ๋ ๋๋ง ๋ฐ JS ๋ธ๋ฆฌ์ง ๊ด๋ จ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
- ๐งน ๊น๋ํ JS ์ฌ์ด๋
์ธ์ ์
์ ๋ฆฌ ์คํฌ๋ฆฝํธ: window.clearAllIntervals(); clearTimeout(...);ํ์ด์ง ์ธ๋ก๋ ์ ์คํ๋ฉ๋๋ค. ๊ฐ๋ฐ์ ๋๊ตฌ์ ํ ์ค๋
์ท์ ํ์ฉํ์ฌ JS ๊ด๋ จ ๋ฌธ์ ์ ์ ์ฐพ์๋ณด์ธ์.
- ๐ ์คํธ๋ ์ค ํ
์คํธ
์ฌ์ดํด์ 100ํ ์์ฑ/์ญ์ ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ์ธ์. ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ๊ฒ์
๋๋ค!
๋งํ์
จ๋์? Stack Overflow ๊ฐ์ ํฌ๋ผ์ PerfView ์ถ์ ์ ๋ณด๋ฅผ ๊ณต์ ํด์ ์ปค๋ฎค๋ํฐ์ ๋์์ ๋ฐ์๋ณด์ธ์. ์ ํด๋ผ ์ ์์ ๊ฑฐ์์! ๐ช
โญ ํฅํ WebView2 ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ฌํ ๋์์ ํด๊ฒฐ์ฑ
์์ ์ฌ์ ์๋ฐฉ์ ์ฑ๊ณผ ์ฐฝ์ถ๋ก ์ ํํ์ธ์:
- ์ฑ๊ธํด ํ๊ฒฝ :
CoreWebView2Environment์ฑ๋น ํ๋์ฉ ์ฌ์ฌ์ฉํ์ธ์.
- ๊ฐ์ํ : ํ์ํ ๋๋ง WebView2๋ฅผ ์ง์ฐ ๋ก๋ํฉ๋๋ค.
- ์ ํ๋ ์บ์ : DOM ์ ์ฅ ๊ณต๊ฐ๊ณผ IndexedDB ํฌ๊ธฐ๋ฅผ ์ ํํฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง ์ฐ๋ : AppCenter ๋๋ Sentry๋ฅผ ํตํฉํ์ฌ ํ๋ก๋์
ํ๊ฒฝ์ ๋ฐ์ดํฐ ์ ์ถ ์๋ฆผ์ ๋ฐ์ผ์ธ์.
- ๋ง์ดํฌ๋ก์ํํธ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฌธ์๋ฅผ ๋ถ๊ธฐ๋ณ๋ก ๊ฒํ ํ์ญ์์ค .
| ๋น ๋ฅธ ์ฑ๊ณผ๋ฅผ ์ํ ์ฒดํฌ๋ฆฌ์คํธ |
์ํ |
| ๋ชจ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ํ๊ธฐํ์ญ์์ค | โ
|
| ์ด๋ฒคํธ ๊ตฌ๋
์ทจ์ | โ
|
| ์ต์ ๋ฐํ์ | โ
|
| JS ์ ๋ฆฌ ์คํฌ๋ฆฝํธ | โ
|
๐ ์น๋ฆฌ์ ํ์ง: ๋น์ ์ ์ฑ, ์ ๋ณด ์ ์ถ ๊ฑฑ์ ์์ด
์ถํํฉ๋๋ค! ์ด์ Microsoft Edge Webview2 ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ํด๊ฒฐ์ ๋ง์คํฐํ์
จ์ต๋๋ค ! ์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ผํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ ํ๋๊ณ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ ๊ฒ์
๋๋ค. ์ฌ์ฉ์๋ค์ ๋น ๋ฅธ ์ฑ ์๋๋ฅผ ์ข์ํ๋ฏ๋ก, ์ฌ์ฉ์ ๋ง์กฑ๋ ์ ์๊ฐ ๊ธ์์นํ ๊ฒ์
๋๋ค. ํน์ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์์ผ์ ๊ฐ์? ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์. ํจ๊ป ํด๊ฒฐํด ๋๊ฐ๊ฒ ์ต๋๋ค! ์ด ๊ฐ์ด๋๊ฐ ๋์์ด ๋์๋ค๋ฉด ๊ณต์ ํด์ฃผ์ธ์! ๐
์ง์ค๋ ฅ์ ์ ์งํ๊ณ , ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, ๊ณ์ํด์ ๋ฐ์ ์์ผ ๋๊ฐ์ธ์. ๋ค์ WebView2 ๋์ ๊ณผ์ ๋ ๋ฌด์์ธ๊ฐ์?