XP에서 WebKit을 빌드하고 나서, WebKit의 실행 얼게를 분석하고 있다.
웹킷을 엔진으로 이용하는 어플리케이션을 어찌 작성해야 하는지 분석하려면, XP WebKit 프로젝트에 포함된 WinLauncher를 이용해야 한다. 이를 이용하는데도 약간의 노하우가 필요하다. 이에 관한 내용을 다음과 같이 정리한다.

1. Isolated COM Component
WinLauncher는 WebKit.dll 에 COM 콤포넌트 형태로 포함된 다양한 WebKit 모듈들을 호출해가며 동작한다. 내 개발 머신에는 사파리 브라우저가 깔려있고, 사파리 폴더에 WebKit.dll 이 존재한다. 근데, WinLauncher.exe가 실행될 때 사파리 폴더에 존재하는 WebKit.dll 이 아니라, WinLauncher.exe 와 같은 폴더에 있는 WebKit.dll 을 로드하는게 너무 신기했다. 이건 COM DLL인데 말야. 레지스트리에는 분명 사파리 폴더에 있는 WebKit.dll path가 등록되어 있는데? 어찌된거지?
XP 이상의 윈도에서는 어플리케이션 빌드시 manifest 파일을 통해 로드될 COM DLL의 path를 지정할 수 있다고 한다. 이걸 isolated component 라고(맞나?) 부른다고 한다. 그래... 내가 윈도에 관한 공부를 게을리했다. 반성한다.

2. WinLauncher.exe 실행 팁
(
http://aautar.digital-radiation.com/blog/?p=98)

2.1. request->initWithURL() 타임아웃 설정

이젠 웹킷을 철저히 뜯어볼테다 결심하고 WinLauncher를 실행시켰다. 근데, WinLauncher.exe에서 네트웍이 안된다. http://naver.com 등에 접근할 수 없다. 아... WinLauncher는 샘플 코드라 네트웍 코드가 존재하지 않는가보다 하고 의심했다. 근데, 그게 아니었다. http://aautar.digital-radiation.com/blog/?p=98 글을 찾으니 답이 있었다. WebKit 메소드를 호출할때, 타임 아웃 설정이 필요하다고 한다.
WinLauncher 소스의 loadURL() 함수에서 request->initWithURL()를 호출할 때 인자를 다음처럼 설정해줘야 한다.
request->initWithURL(urlBStr, WebURLRequestUseProtocolCachePolicy, 60);

2.2. SafariTheme.resources 폴더 복사
그리고, WinLauncher.exe를 정상적으로 실행시키기 위해서는 사파리 폴더에서 SafariTheme.resources 폴더를 통째로 복사해와야 한다고 한다. 이거 무지하게 결정적인 정보다. 다른 것들은 어찌어찌 고생하면 해결할 수 있었을 것 같은데, 이건 해결 못했을 것 같다.

이런 정보가 존재하는 인터넷이 너무 고맙다. 이런 정보를 아낌 없이 공개하는 개발자들도 고맙고... 인터넷과 구글이 없었다면 개발을 어찌했을까...

WinLauncher 실행이미지를 첨부한다. 에디트 콘트롤에 URL을 입력하면, 해당 페이지로 이동한다.

Posted by ingee

댓글을 달아 주세요

  1. tommy 2009.04.15 17:23 신고  댓글주소  수정/삭제  댓글쓰기

    에고 웹킷을 빌드하고 나니 이젠 윈런처를 빌드해야하는 상황이네요
    dll들 복사하고 테마 폴더 복사하고 실행했더니 COM관련 메소드 CoCreateInstance 에서 죽어버리네요 ^^;
    이제 외국 사이트를 뒤져볼 차례인가 봅니다 ㅎㅎ

  2. tommy 2009.04.21 15:25 신고  댓글주소  수정/삭제  댓글쓰기

    접니다 ㅎㅎ
    외국 사이트들을 돌아다녀 봐도 그렇게 큰 수확은 없더군요
    그러다가 어느 블로그를 들어가 봣는데 애플의 라이브러리를 사용하지 않고
    직접 라이브러리들을 하나하나 빌드해서 WinLauncher를 빌드하고 있었습니다
    동작도 잘 되더군요 해서 한 번 제가 빌드한 실행파일을 넣어봤더니
    이상없이 동작하더군요 확인해봤더니 WebKit 라이브러리 빌드 자체가 잘못된 듯 합니다 ㅠㅠ
    제가 빌드한 WebKit.dll 로 바꿔 실행해봤더니 동일한 에러가 나네요
    빌드가 이상없이 성공해서 좋아라 하고 잇었더니 더 큰 문제가 생겨습니다 ㅎㅎ ㅠ_ㅠ;

    • ingee 2009.04.21 16:50 신고  댓글주소  수정/삭제

      WebKit.dll 이 실행되려면 필요한 DLL들이 있습니다. win32용 디폴트 웹킷 프로젝트는 CFNetwork.DLL, CoreFoundation.DLL, CoreGraphics.DLL 등을 필요로 합니다.

      빌드하신 WinLauncher.exe가 있는 폴더에 빌드하신 WebKit.DLL과 더불어 위의 DLL 들이 존재하는지 확인해보시는게 좋겠습니다. 정상적인 실행을 위해서는 사파리 브라우저 폴더 (예를 들어 "C:\Program Files\Safari" 폴더)에서 webkit.dll을 제외한 모든 DLL 들을 카피하셔야 합니다.

      그리고 블로그 기사에 있는 것처럼, 사파리 브라우저 폴더에서 resource 폴더도 몇개 복사해야 합니다. SafariTheme.resources 폴더와 WebKit.resources 폴더였던 것으로 기억합니다.

      행운을 빕니다.

    • tommy 2009.04.21 16:55 신고  댓글주소  수정/삭제

      네 CoreFoundation을 비롯한 여러개의 라이브러리들은 별 문제가 없구요
      ingee님이 링크하신 사이트말고 다른 곳에서 정보를 얻었습니다.

      그 분이 구현하신 것을 보니 WebKit.resources와 SafariTheme.resources 도 필요가 없구요
      단지 실행파일과 라이브러리들만 있으면 되더군요 윈도우 기본 테마로 실행이 됩니다.

      제 문제는 빌드는 성공했지만 WebKit.dll이 제대로 빌드 되지 않았다는게 문제네요 ㅎㅎㅎ

    • ingee 2009.04.21 19:23 신고  댓글주소  수정/삭제

      개발을 하다보면 참 다양한 경우를 겪게 됩니다. 무언가 문제를 겪고 계신 것 같은데, 별 도움을 못드리는 것 같아 안타깝네요.
      우리에겐 "구글신"이 있으니까, 약간의 행운만 따라준다면 해결하실 수 있으리라 믿습니다. 문제해결에 도움이 되는 기사가 있다면 다른 사람들을 위해 정보를 남겨주세요. 행운이 함께 하기를 빕니다.

  3. tommy 2009.04.24 12:02 신고  댓글주소  수정/삭제  댓글쓰기

    이건 다른 얘기지만 웹킷 소스는 어떻게 관리하시는지..

    전 윈도우에서 거북이svn으로 체크아웃하면 파일이름 때문인지 중간에 에러가 생기고
    cygwin에서 체크아웃하면 마찬가지로 중간에 에러가 생기네요 .pluggable 어쩌고 파일 인데..
    리눅스 서버에서 체크아웃해야 정상적으로 체크아웃이 됩니다
    그마저도 리눅스 서버에서도 update-webkit이 오류가 날 때도 많습니다

    결국 [리눅스 체크아웃 -> 삼바를 사용, 윈도우로 복사 -> cygwin으로 빌드] 같은 깝깝한 방식을 사용하고 있네요
    ingee님이나 다른 분들은 어떻게 사용하고 계시는지 궁금합니다.
    저와 같은 방식으로 소스를 받고, 관리하시는지..

    • ingee 2009.04.24 12:42 신고  댓글주소  수정/삭제

      안녕하세요. 저는 win XP에서 tortoiseSVN 을 쓰고 있습니다. xp와 거북이의 상세 버전은 다음과 같습니다.
      - win XP Pro Ver 2002, SP2
      - TortoiseSVN 1.5.5, Build 14361 - 32 Bit

      거북이를 통해 별문제 없이 WebKit을 내려받고 있습니다. 가장 최근에 WebKit 소스를 내려받은 때는 올해(2009년) 1월중이었습니다. 좋은 하루 되세요.

    • tommy 2009.04.24 13:56 신고  댓글주소  수정/삭제

      전 1.5.6인데도 문제가 있네요 것참.. 어쨋든 답변 감사합니다 ^^

    • tommy 2009.04.24 18:34 신고  댓글주소  수정/삭제

      VMWare에 설치된 XP에서 체크아웃을 해보니 정상적으로 되네요 제 시스템이 문제인가 봅니다
      즐거운 휴일 보내시길~

    • ingee 2009.04.24 19:25 신고  댓글주소  수정/삭제

      반가운 소식입니다. 편한 주말되세요.

Qt WebKit 단말 사용기

Dev 2008.11.18 11:31

Qt-WebKit을 Windows Mobile 6.1 단말기에 올렸다.
"자, 이젠 빠른 성능과 아름다운 페이지를 보여줘." 하는 마음으로 실행시켰는데... 결론을 말하자면 실망이다. 아직 모자란 점이 많다. 이건 WebKit의 문제라기 보다는 Qt-WebKit의 문제다. 포팅이 불충분하다. 적어도 Windows Mobile에서는 그렇다.

1. 우선 네트웍에 관한 처리가 미흡하다.
스스로 단말의 네트웍 연결을 초기화시키지 못한다. 백그라운드로 Windows Mobile의 Internet Explorer를 실행시켜서 네트웍을 잡고 실행시키면 그나마 조금 상태가 나아진다. 하지만 한 화면을 구성하는 모든 document 들을 네트웍을 통해 다운로드하지 못한다. 화면 상태로 미루어 추정하자면, base HTML document만 다운로드해서 보여주는 것 같다.

2. 속도가 미흡하다.
난 빠른 속도를 기대했다. 적어도 Mobile IE보다는 빠른 속도를 기대했다. 그런데 체감 속도가 IE에 비해 대등하거나 느리다. 이건 Qt 레이어의 오버헤드 때문일 것 같다.


오른쪽은 Qt WebKit을 실행시키면 처음 뜨는 디폴트 홈페이지. 내가 만들어서 로컬 파일 시스템에 복사한 index.html 파일이다. 왼쪽은 BBC 뉴스 모바일 페이지. HTML만 처리하고, 이후 이미지 파일들을 읽어 들이지 못했다. Qt WebKit의 네트웍 처리가 불충분한 것 같다.




왼쪽 화면을 보면, "링크를 다른 창에서 열기" 컨텍스트 메뉴를 볼 수 있다. HTML 링크에 대고 롱클릭을 하면 뜨는 메뉴다. 웹킷 윈도를 하나 더 만들 수 있다. 이건 감동... 오른쪽 화면은 한글이 깨져보인다. 한글 폰트 처리에 문제가 있다.

완벽한 솔루션이 없어야, 프로그래머가 밥을 먹고 살 수 있는 것 아니겠는가? 웹킷이 또 기회를 주는구나...
이제 웹킷 자체를 분석해볼 참이다. 관련된 일을 하는 사람들이 있다면, 댓글이나 트랙백 등으로 알려주면 좋겠다. 오손도손 사이 좋게 개발할 사람들을 찾는다.

Posted by ingee

댓글을 달아 주세요

  1. sMiLo 2009.01.06 11:36 신고  댓글주소  수정/삭제  댓글쓰기

    windows mobile 단말에 qt-webkit을 올려서 느린게 아닐까요? ^^ 오버헤드가 상당하리라고 봅니다. 저는 gtk-webkit을 살펴보고 있는데, linux 단말에 올려보니 상당히 빠르네요.

    • ingee 2009.01.13 18:48 신고  댓글주소  수정/삭제

      막연히 그렇지 않을까 추측만 했습니다. PC에서 보여주는 WebKit 엔진의 성능이 IE 브라우저의 엔진을 능가했기에, 단말에서도 월등한 성능을 기대했었죠. 기대에 못미치는 성능이 나온 덕분에 얼마간 제가 할 일이 생겼습니다. 고맙게 생각하고 있습니다. ^^


Windows Mobile 단말기가 하나 있다. 이놈 위에 웹킷을 올려보고 싶었다. 이리저리 찾던 중에, Qt WebKit 브라우저가 눈에 들어왔다. 다시 말하지만, 웹킷은 브라우저 엔진일뿐 브라우저가 아니다. 이놈을 브라우저로 동작하게 만들려면 많은 노력이 필요하다. Qt WebKit 프로젝트가 바로 그런 노력을 하고 있는 프로젝트다. 마침 "한.글.로.된." 좋은 블로그 글을 찾아 편안한 마음으로 시도해볼 수 있었다. 자기가 겪은 경험을 글로 정리해서 공개하는 사람들에게 다시 한번 감사하는 마음을 전한다.
http://www.korone.net/bbs/board.php?bo_table=qt_lecture&wr_id=465

하지만, 세상 모든 일이 그렇듯 뭔가 넘기 힘든 고개들이 있었다. 그런 고개들이 있어야 성공했을 때 성취감을 느낄 수 있는 것 아니겠는가? 나 다음 개발자들은 그런 성취감(?)을 느끼지 못하기를 기도하며 몇가지 경험을 정리한다.

처음에는 Cygwin 콘솔창을 열고 작업 했는데, 뭔가 잘 안됐다. 다음의 웹 페이지를 보고 원인을 알게 됐다. Qt WebKit을 Cygwin서 빌드하는 것은 원래 아직 안되는 것이었다 (2008.11.13. 현재). 그래서 WinXP 32bit의 커맨드 콘솔(cmd.exe)에서 작업했다. 커맨드 콘솔에서 작업하려면, 몇가지 GnuWin32 도구들을 설치해줘야 한다. 아래 "빌드 환경" 파트에 관련 내용을 정리했다.
http://trac.webkit.org/wiki/BuildingQtOnWindows

그리고, 빌드할 때 Qt WebKit 소스가 있는 드라이브의 루트 아래에 tmp 폴더를 만들어줘야 한다. 별거 아닌데, 이것 때문에 조금 고생했다.


빌드 환경
- WinXP 32bit
- Qt-wince를 다운로드 받아 빌드 완료한 상태 (참조 URL)
- Qt-WebKit 소스를 다운로드 받은 상태 (E:\Work\QtWebKit에 소스를 다운로드 함)
- 빌드를 위해 필요한 perl 및 GnuWin32 툴들을 설치한 상태 (참조 URL)


빌드 시퀀스

빌드 시퀀스를 순서대로 적으면 다음과 같다.
E:> cd \Work\QtWebKit\webkit
E:\Work\QtWebKit\webkit> mkdir \tmp
E:\Work\QtWebKit\webkit> mkdir WebKitBuild\Release
E:\Work\QtWebKit\webkit> perl WebKitTools\Scripts\build-webkit
... 성공 !!!  


이상이다.
이렇게 빌드한 바이너리를 Windows Mobile 6.1 단말기에 올리고 테스트해보고 있다. 실행화면과 사용 소감은 다음에 올릴 예정이다.
Posted by ingee

댓글을 달아 주세요

  1. 김종연 2009.09.18 15:48 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요...웹킷엔진으로 간단한 모바일 브라우저를 만들어 볼려고 이리저리 찾다가 ingeec님 블로그까지 찾아왔네요...^^
    블로그 내용 보면서 QTWebkit을 윈도우 환경에서 빌드하는것 까지는 성공했는데...
    WinCE용으로 빌드하는 과정에서 git로 소스를 가져와 branch하는 과정에서 에러가 나서 빌드를 제대로 하지 못하고 있네요...
    $ git clone git://code.staikos.net/webkit -- 소스코드 가져오기 성공
    $ cd webkit
    $ git checkout -b wince origin/joerg/wince-master <-- 이 라인을 실행하면 다음과 같은 에러? 메시지가 나옵니다.
    fatal: git checkoout: updating paths is incompatible with switching branches.
    Did you intend to checkout 'origin/joerg/wince-master' which can not be resolved as commit?

    그다음에 자동으로 넘어가져서 그냥 무시하고 빌드하는데....
    에러가 나서 제대로 빌드가 안되는군요...버전이 올라가면서 리모트의 소스가 바뀐건가요?
    현재 버전은 QT4.5.2를 사용하고 있습니다.
    혹시 도움이 될만한 힌트라도 알수 있으면 고맙겠습니다.

    • ingee 2009.09.18 19:49 신고  댓글주소  수정/삭제

      작년 11월 이후 Qt 버전 웹킷을 만져보지 않은 데다가, git 가 제겐 무척 낯섭니다. 저는 도움 드릴게 없을 듯 합니다. 블로그 글을 보시는 다른 분들의 도움을 기대합니다. 제 주변에서 뭐라도 듣게 되면 글 올리겠습니다. 좋은 해결책 찾으시길 빕니다.

    • 홍길동 2011.01.14 13:21 신고  댓글주소  수정/삭제

      webkit 소스 받으신후 qtwebkit 를 위해 qtwebkit 업데이트 하심 됩니당.브랜치를 가져오는거죵..