Right now do !

[C#응용] 난 (이제) IE컨트롤이 싫어요

by 지금당장해

 필자는 일단 웹이 싫다. 다양한 브라우저가 싫고 마크업 언어에 의존하는 UI구성이 싫다. 젊은 시절 그래서 입에 달고 살았다. "난 웹이 싫어" 그런데 싫다고 피해지나 ... 온 천지 웹이고 심지어 초년시절에는 ERP용 전용브라우저를 개발 했다. 요즘에 화려한 ES6기반의 다양한 JS라이브러리에 비할바는 아니지만 적어도 이런 이유로 브라우저 컨트롤과 JavaScript간의 상호작용에 어느정도의 이해는 갖게 되었다. 그 시절의 브라우저는 IE가 전부였고 당연히 전용브라우저를 만들려면 IE의 컨트롤을 사용 해야 했다. 그리고 한참 이 존재에 대해 잊고 살았다. 


 얼마전 회사 후배가 고충을 토로하면서 기술 문의를 해왔다. 이유는 이렇다. 우리 회사의 웹기반의 솔루션이 불가피 하게 고객사의 어플리케이션 내에서 IE컨트롤을 통해 동작이 되는데 IE컨트롤이 IE7 모드로 동작해서 HTML5기반인 우리 솔루션의 동작이 불가능 하고 이를 해결 하기 위해서 시스템 레지스트리를 변경해야 한다. 헌데 고객 PC의 시스템 레지스트리를 변경하는 것이 상당한 부담이 있다는 것이다. 


 여기서 잠시 멈추고 IE컨트롤 즉 Visual Studio의 도구 상자 이름으로는 WebBrowser로 표기되는 이녀석의 문제점 살펴 보자. 이것이 언제 부터 이랬는지 조사를 좀 해봐야 하는데... 암튼 윈도우 버전이 뭐던 클라이언트 윈도우즈에 어떤 IE가 설치되었던 무조건 이 브라우저 컨트롤은 무조건 IE7으로 동작한다는 것이다. (적어도 내가 전용 브라우저를 구현하던 시절에는 윈도우즈의 최신 버전을 따라 갔던것으로 기억 하는데, 아니라면 독자분들의 근거 있는 정정 댓글을 기대 해본다.) 그리고 해결 방법은 각 윈도우 시스템에 시스템 레지스트리를 변경해서 "이 어플리케이션은 IE XX이 필요해요." 라고 적시를 해야 한다는 것이다. 


https://social.msdn.microsoft.com/Forums/vstudio/en-US/15a41cb9-30ee-495c-bcfa-9c8cfe02cd0f/ie10-will-use-wrong-ie-mode-when-embed-in-my-application?forum=ieextensiondevelopment


위 마이크로소프트의 온라인 커뮤니티를 확인 해보기 바란다. (이것 말고도 무지하게 많은 자료가 있다. 나머지는 독자의 몪으로 남겨 둔다.)


 다시 본론으로 돌아와 회사 후배는 이게 싫단다. (나도 싫다. MS가 브라우저 앤진 개발을 포기 한다는 설이 돌기 시작한 다음 부터 더 싫어졌다.) 해서 나한테 대안을 찾고자 했다. 1년 전쯤에 사내 모바일 업무 시스템을 하나 오픈했는데 어디나 그 누군가가 이것 PC에서 볼수 있게 작은 브라우저가 있으면 좋겠다고 해서 POC를 했던 기억이 났다. 크로미움을 기반으로한 CefSharp이라고 하는 오픈소스를 이용하여 전용 브라우저를 만들어 봤다. 


https://github.com/cefsharp/CefSharp


 이 경험을 토대로 간단한 브라우저를 만들어 보기로 했다. 전에 이를 해봤을때는 이 오픈소스를 통으로 내려 받아서 컴파일을 하고 이 결과물을 내가 직접 참조  해서 개발을 했다. 일단 그 당시 결과물이 뭐가 잘 않되기도 하거니와 이렇게 무식하게 하는 것이 맞나 싶어 NuGet 패키지를 찾아 봤더니만 역시 있다.


https://www.nuget.org/packages/CefSharp.WinForms/





<<작업 절차는 아래와 같다.>>


1) WinForm 프로젝트를 하나 만든다.


2) 해당 프로젝트를 Any가 아닌 x86 또는 x64로 플랫폼을 지정 한다. 이 오픈소스가 결국 네이티브로 구현되었다는 반증이다. 이 점이 단점으로 작용한다.


3) Visual Studio NuGet 패키지 관리자에서 CefSharp을 검색하여 CefSharp.WinForms을 설치 한다. 이러면 추가로 필요한 패키지들도 자동으로 설치한다. (메시지 박스 하나 나오니 확인 버튼 클릭 해주는 수고는 필요하다.)






4) 간단하게 아래와 같이 Form에 코드를 해준다. 여기서 두 번째 단점이 들어난다. 이 글을 읽는 독작분들 모두 도구상자에 올라온 객체를 선택하고 원하는 위치에 내려 놓기를 기대 했겠지만 그렇지 못했다. (실제로 Visual Studio 도구상자에 뭐가 올라와 있는데 이를 사용하려 하면 않되고 만다.) 


기능 테스트는 최대한 단순히만 했다. 


using System;
using System.Windows.Forms;
using CefSharp.WinForms;

namespace ChromiumPoc
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private ChromiumWebBrowser _webBrowser;

        private void Form1_Load(object sender, EventArgs e)
        {
            _webBrowser = new ChromiumWebBrowser("www.naver.com");
            _webBrowser.Dock = DockStyle.Fill;
            this.Controls.Add(_webBrowser);
        }
    }
}


그리고 컴파일을 하면 마지막 단점이 들어난다. 컴파일 결과 폴더의 모습이다. 소스는 이것이 다인데 엄청난 배포 대상(파일)이 나타난다. 그래도 이제 IE에서 벗어날 수 있음에 감사한다.




그리고 마지막 피날레 실행...  잘 된다. ㅎㅎ 



CefSharp의 심도 있는 활용에 대한 내용은 다음 기회로 미루고 오늘은 여기 까지...


PS> 추가적인 단점 하나더 ...

이 오픈소스는 .NET Framework 4.5 이상에서 사용이 가능하다.

블로그의 정보

지금 당장 해!!!

지금당장해

활동하기