Android 기술 Q&A 
Q&A 게시판에 질문을 남기신 글에 대한 답변/덧글/쪽글에 대한 Push 메일 서비스를 받고자 하시는 분들은
☞ Push 메일 서비스 공지를 필독하시기 바랍니다.
[답변]webkit 구조 및 기능에 대한 질문입니다
작성자
작성일 2008-03-18 (화) 12:06
ㆍ추천: 0  ㆍ조회: 13929      
IP: 221.xxx.120

=====================================
■ [손석배] webkit 구조 및 기능에 대한 질문입니다. (2008-03-18 11:03)
webkit에 대해서 질문을 좀 드리려고 합니다.
또 초보적인 질문을 드리려 하니 많은 양해 부탁드립니다. ^^
 
1.
webkit 구조도를 구할 수 있는 곳이 있을까요?
들풀님께서 잘 정리해주신 safari 및 Konquerer의 개념적 구조도는 잘 보았습니다.
그런데 그것을 보니, webkit 자체의 상세 구조가 궁금해 졌습니다.
개략적으로 webkit이 주로 WebCore와 JavaScriptCore로 되어 있다는 정도는 파악되는데..
두 모듈간 관계부터해서, 각 모듈을 좀더 breakdown해 놓은 자료가 없을까요?

 
아마도 그런 자료를 구하시긴 힘들겁니다.
대신 꼭 분석을 원한다면...제가 예전에 올려놓았던, 안드로이드 WebKit Build Script를 살펴보시면
조금은 도움이 될겁니다. 참고로 아래 문서의 첨부파일에 있는 Build Script는 완벽하게 동작하지는 않습니다.
 
http://www.kandroid.org/board/board.php?board=AndroidLib&page=2&command=body&no=7
 
위의 Script가 완벽하게 동작하지 않는 이유는 크게 세가지 이유 때문이라고 보시면 될 듯한데..
그것은 2D Graphic 엔진인 SGL library, GUI, Networking 관련 Library가 Source 레벨 또는 SDK 레벨로
오픈되어 있지 않기 때문입니다.
 
2. OS 포팅 부분

조금씩 조심스럽게 webkit을 분석해 보려고 하고는 있습니다만..
아직 큰 그림이 잘 파악이 안되는군요.
혹시 webkit에 OS 포팅 레이어 같은것이 따로 존재하나요?
아니면 새로운 OS에 포팅을 하기 위해서는 webkit을 전반적으로 수정해야 하는 상황이 발생하나요?
포팅 레이어가 존재한다면, 간단(?)히 이 부분만 변경하면, Mac OS뿐만 아니라 윈도우즈/리눅스같은 범용 OS뿐만이 아니라..
임베디드 장비에 탑재된 무수한 제조사 자체 제공 OS에도 포팅이 가능할 것으로 여겨지는데요..
지금 webkit의 공식 사이트에도 리눅스 포팅 버전이 없는 것으로 봐선, 이 작업이 그다지 쉽지 않은 것이 아닌가 생각도 듭니다.
(즉 포팅을 위한 부분을 따로 분리하지 않고, 전반적으로 다 수정해야 하는 건 아닌가 싶습니다.)


WebKit을 포팅하기 위해서는 기본적으로 2D Graphic 엔진, GUI, Network IO 정도는 WebKit에 내장해야만
포팅이 가능합니다. 이를 위해, 주로 cocoa/carbon, gtk, qt, 등과 같은 2D+GUI와 os가 제공하는 network IO를
WebKit 소스코드 레벨에서 포함해야 합니다.
현재 2D+GUI관련해서 Linux에서 사용할 수 있는 것은, QT, GTK 정도일듯한데 임베디드 환경에 탑재하기엔
좀 무거울듯 합니다. 그래서 안드로이드는 SGL이란 자체 그래픽 엔진과 Dalvik 기반의 GUI(이건 저의 개인적 추측입니다)를
사용해서 애플 iPhone의 cocoa/carbon 레이어를 대체하고 있는 듯합니다.
 
결론적으로 WebKit을 리눅스에서 QT나 GTK를 사용해서 포팅한다고 한다면 분명이 단순하게 가능합니다.
하지만, 성능은 보장받으실 수 없을 겁니다. 또한 QT나 GTK역시 매우 무겁고 다른 Library들과 Depency가 많아서
포팅이 그리 편하진 않습니다.
만약 GTK기반으로 WebKit을 리눅스에 탑재하고자 한다면 아래의 글을 참고하세여.
 
http://www.kandroid.org/board/board.php?board=AndroidADC&command=body&no=9
 
 
2,1 
아울러 아래 질문중 하나를 보니 MS 윈도우즈에서 webkit을 컴파일 하시는데 실패하셨다고 하는 글을 봤는데요..
그럼 현재 공개된 소스로는 윈도우에 포팅하기는 미흡한 상태인가요?

 
정확하게 확인은 해보진 않았지만, 그럴것입니다.
만약 minGW나 cygwin같은 기반에서 WebKit을 Windows에 포팅한다면 가능하겠지만,
Windows의 GDI를 사용해서 포팅할려고 한다면 그리 쉽지 않을 듯합니다.
저도 이 부분은 직접 확인해 본바는 없습니다.

 
3. 
API 인터페이스 부분에 대한 정보
webkit에서 제공되는 API 정보가 정리된 것이 있는지요?
파생되는 질문이 또 있는데요..

 
WebKit에 대한 API는 WebKit을 어떻게 빌드하느냐에 달려있겠지만,
기본적으로 GTK로 빌드하게 되면, 약간의 GTK UI를 만들수 있도록 Build가 되며,
안드로이드의 경우엔, 자체적으로 Java JNI 인터페이스를 통해 Framework 레이어에서
WebKit 관련된 interface를 조금 제공하고 있습니다.
 
3.1
(G)UI 프레임워크 이식 또는 연동
이미 이식 버전이 존재하는 GTK+, Qt 등을 제외하고..
신규 UI 프레임워크를 이식하는 것은 어려운 작업이 될까요?
(또는, 이미 UI 프레임워크가 포함된 미들웨어에 webkit을 이식한다고 하면, 둘간의 연계를 시키는 것은 어려운 작업이 될까요?)
webkit에서 제공되는 api가 풍부한 기능을 제공한다면 어렵지 않을것 같은데.. 그렇지 않으면 UI 프레임워크를 많이
변경 or 보강 해야 할 것 같아서요..

 
저도 최근에 이와 관련된 작업을 좀 해 볼려고 시도하고 있는데,
아주 어려운 것은 아닐 듯 합니다.
하지만, 그것보다 더 중요한건 신규 UI 프레임워크가 충분히 lightweight하고, compact한가? 가 더 중요할 듯 합니다.
만약, 안드로이드의 SGL 정도되는 2D 그래픽엔진과 Dalvik기반의 Java Framework 기반의 library들과 결합된 GUI정도가
있다면 한번쯤 시도해 볼만한듯합니다.

 
4. 한글지원

한글 지원이 되는지요? Android에서는 한글이 현재 정식적으로 지원은 안되는 것으로 아는데요..
webkit에도 이런 제약이 있는지요?

 
WebKit에서는 i18n 구조지원을 위해 icu를 사용하는 것으로 보이는데, 현재 Android는 icu library를 최소로
빌드(utf-8, utf-16, iso-8996)해서 사용하는 것 같더군여. WebKit과 인코딩 문제는 약간 분리된 문제지만,
몇가지 부분에선 연관성이 좀 있습니다.
주된 연관부분은, http header에 설정되어 있는 charset정보와 html meta tag내에 존재하는 charset 부분,
그리고 user agent라 할 수 있는 browser 설정 charset, 마지막으로는 charset auto detection 정도가
연관되어 있다고 볼 수 있습니다.

 
5. 
webkit 관련 자료를 구할 수 있는 곳이 있을까요?

현재 제가 찾은바로는 webkit.org외에는 딱히 webkit관련 자료를 찾을 만한 데가 없는데요..
혹시 webkit에 대해 잘 정리된 자료들을 찾을수 있는 데가 있으면 추천 부탁드립니다. ^^
(google과 네이버로 검색해 봤는데.. 그닥 괜찮은 사이트가 없는듯해서요..)

 
자료를 구하는 것 보단, 그냥 source를 받아서 하나씩 컴파일해보는게 가장 빨리 배우는 법 같네여..
 
긴 질문 읽어주셔서 감사합니다. ^^
 
시간을 내서 꼭 정리할려고 했던 주제인데도....
세미나다.. 챌린지다..하면서..시간이 정신없이 흐르네요..
수고하세여..
이름아이콘 손석배
2008-03-18 16:20
항상 빠르고 정확한 답변 감사합니다. ^^
위와 같은 질문을 드린 이유는..
제가 전문 프로그래머는 아니어서, 일단 구조가 어떻게 생겼는지 파악하지 않고 소스를 보려면 너무 시간이 많이 걸려서요. ^^
그래서 미리 설명이 된 자료가 있는지 찾고 있었습니다.
암튼.. 설명해 주시고 알려주신 자료만으로도 궁금증의 꽤 많은 부분이 풀리거나 실마리를 찾은 것 같습니다~
   
이름아이콘 들풀
2008-03-18 19:09
손석배님 질문에 답을 하다보면...저도 많이 정리가 되는것 같아서
개인적으로 도움이 많이 됩니다...감사합니다.
   
이름아이콘 joonwon
2008-03-27 15:19
WebKit 의 윈도우즈 포트로는 Apple 에서 작업한 것이 공개되어 빌드해 볼 수 있으며 Adobe 에서 AIR platform 에 사용한 것도 공개되어 있습니다.
최근에는 Apple 의 proprietary library 들 대신에 Cairo 와 cURL 을 사용하는 patch 들도 올라오고 있으므로, 일반적인(native?) 윈도우즈 포트 작업은 충분히 되어있다고 할 수 있습니다. (물론 Win32 GDI & Inet API 를 직접적으로 사용하는 것은 아니지만요.)
   
이름아이콘 손석배
2008-03-28 17:48
답변 감사합니다. ^^
어제 컴파일 하다가 실패했는데.. 다시 해 봐야겠습니다. ^^
그런데 한가지 궁금한것은..
예를 들어 WebCoreplatformnetworkwinResourceHandleWin.cpp 같은 파일에는 wininet 함수가, WebCoreplatformgraphicswin에서는 ExtTextOut() 함수가 직접 쓰이는 것으로 보이는데요.. 그럼 이런 것들은 실제로는 사용되지 않는 부분인가요?
   
 
덧글 쓰기 0
3500
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.
    N     분류     제목    글쓴이 작성일 조회
5003 안드로이드 에뮬레이터 속도 [2] 2008-03-04 16943
5002 개념설명 : "@+" syntax in layout xml 2008-03-04 11934
5001 Touch Screen Event [1] 2008-03-04 12778
5000 Webkit 관련 2008-03-04 11253
4999 P2P 관련 2008-03-04 12522
4998 에뮬레이터간 XMPP 메시징환경 설정 2008-03-04 10971
4997 SD Card 환경설정 [1]+1 2008-03-04 11680
4996 안드로이드 디버깅 로그 출력 2008-03-04 13594
4995 안드로이드(Android) Webkit 사양관련 2008-03-04 14674
4994 레이아웃 : TextView와 Scrollbar 2008-03-04 12327
4993 안드로이드 포팅 [8] 2008-03-04 46926
4992 [파노라마] WebKit에 대한 궁금한 점이.. [1] 2008-03-07 9104
4991 WebKit-GTK에 대하여. [1] 2008-03-07 11073
4990 프로그램을 만들다 난관에 부딧혀 질문올립니다... [2] 2008-03-07 9641
4989 웹 관련해서 질문이 있습니다. [3] 2008-03-11 8542
4988 Android와 OpenBinder에 대한 질문입니다. [3] 2008-03-13 11159
4987 ProgressBarDialog 컨트롤에 대해서.... [3] 2008-03-14 11032
4986 안드로이드 os안에 있는 이미지 파일을 출력하고자 합니다... 2008-03-15 9660
4985 webkit 구조 및 기능에 대한 질문입니다. 2008-03-18 12125
4984 [답변]webkit 구조 및 기능에 대한 질문입니다 [4] 2008-03-18 13929
4983 [답변] 안드로이드 os안에 있는 이미지 파일을 출력하고자 합.. [2] 2008-03-19 12798
4982 안드로이드와 피카사 관련 질문 2008-03-19 8985
4981 rotatedrawable을 어떻게 사용해야되는데요 [1] 2008-03-20 11692
4980 TI OMAP 보드 포팅 [4] 2008-03-21 10955
4979 xmpp를 이용하여 p2p 어플리케이션 제작하신분 계신가요??.. [4] 2008-03-24 9486
4978 포팅관련 질문을 올립니다 [2] 2008-03-24 9943
4977 JVM 관련해서 물어볼 곳이 여기밖에 없네요. [4] 2008-03-25 10179
4976 안녕하십니까 m5에 관한 질문좀 드릴께요 [2] 2008-03-25 9078
4975 다시한번 질문드립니다. [1] 2008-03-26 8498
4974 안드로이드 안에 있는 app데모중에.. [1] 2008-03-26 9656
4973 armadillo-500(arm1136jf-s) - USB Gadget 동작 [3] 2008-03-27 10402
4972 TI OMAP 보드 보팅 중 uboot관련 [5] 2008-03-27 9954
4971 맵 갱신을 하려고하는데요. 에러가 나네요. [2] 2008-03-27 12138
4970 다이얼 로그 질문 이에요.. [2] 2008-03-28 9084
4969 scroll bar 사용시에 터치패드로 움직이는 것을 막고 싶습니다.. 2008-03-28 9193
4968 안드로이드와 UMA/GAN의 조화 2008-03-31 9074
4967 안드로이드 플랫폼 개발과 관련하여 질문 [2] 2008-04-01 8928
4966 이거 만우절 장난인가요? 진짠가...?ㅜㅜ [2] 2008-04-01 9299
4965 안드로이드 포팅 관련 질문입니다[맨땅에 헤딩중입니다].. [2] 2008-04-03 10676
4964 안드로이드 플랫폼에 있는 [1] 2008-04-03 9457
4963 다이얼로그에 관련된 좋은 샘플을 구합니다. [2] 2008-04-04 9285
4962 Conversion to Dalvik format failed with error 1 [3] 2008-04-07 11151
4961 시스템 해킹 관련 [1] 2008-04-07 8787
4960 안드로이드 챌린지 제출방법에 대해서 궁금한점이 있습니다... [4] 2008-04-08 8720
4959 포커스에 관한것좀 여쭙겟습니다. [4] 2008-04-09 15575
4958 파일 관리에 대해 질문있습니다. [1] 2008-04-11 8510
4957 mp3플레이어 MusicDroid에 대해서.. [2] 2008-04-14 10015
4956 안드로이드의 CE제품 적용 [1] 2008-04-21 8663
4955 xml 디자인 관련 [3] 2008-04-21 9815
4954 파일 입출력 관련.. [2] 2008-04-24 9645
12345678910,,,101