본문 바로가기

웹킷(Webkit)이란 무엇인가?

반응형

웹킷(Webkit)이란 무엇인가?

 

 

 

 

정의분석

웹킷(WebKit)이란 무엇인가?

 "정의(Justice)란 무엇인가"에서 "정의"가 철학적 관점따라 다르게 해석되고, 시대에 따라 달리 이해되는 것처럼,

웹킷도 기술적 관점에 따라, 웹의 발전이 급속히 진행됨에 따라 다양한 의미와 용도를 함의하고 있다고 볼 수 있다.

어떤 이는 웹킷을 하나의 웹브라우저로 바라보고, 다른 이는 웹킷을 즉시 상용화가 가능한 소프트웨어 솔루션으로 보고 있다.

그러나 웹킷의 정의는 상당히 명료하다. 본 포스트에서는 웹킷의 정의를 사전적으로 한 단어 한 단어 뜯어봄으로써 웹킷을 본질적으로 이해하는데 도움이 될 수 있도록 시도해 보았다. 아울러 WebKit.org에서 밝힌 웹킷 오픈소스 프로젝트의 목표를 살펴보고 웹킷이 무엇인지 파악하는데 도움이 되도록 했다.

 

WebKit.org와 위키백과에서는 웹킷을 웹브라우저 엔진이라고 정의하고 있다.

 

그러나 웹킷은 웹브라우저 이외에 캘린더, 위젯과 같은 애플리케이션에서도 활발히 사용하고 있다는 반증이 있으므로, 여기서는 웹킷을 아래와 같이 정의한다.

"웹킷(WebKit)은 애플에서 오픈소스로 개발하고 있는 웹컨텐트(web content) 엔진 또는 웹렌더링(web rendering) 엔진이다."
위 문장을 조각조각 쪼개보면 웹킷을 설명하는 단어는 "웹컨텐트" 또는 "웹렌더링", "엔진"그리고 "오픈소스"로 이루어져 있음을 알 수 있다.

이 중에서 "웹컨텐트"와 "웹렌더링"은 웹킷의 기능을 뜻하며, "엔진"과 "오픈소스"는 웹킷의 특성을 뜻한다.

단어의 풀이를 통해 웹킷의 정의를 되새겨 보자.

 

먼저 특성인 엔진으로서의 웹킷을 살펴보자.

일반적으로 엔진이라 하면 에너지를 변화시켜 자동차와 같은 기계장치에 동력을 제공해 주는 핵심부품을 말한다.

자동차의 예를 들면, 고객이 자동차를 구입할 때 차체와 엔진을 따로 구매하지 않듯이 엔진 자체는 일반 고객이 쉽게 접하지 못하는 부품이다.

그러나 엔진은 핵심부품이기 때문에 엔진은 특성은 자동차의 특성에 큰 영향을 미친다.

스포츠자동차에 1,000cc 미만의 경차용 엔진을 장착할 수는 없는 노릇이다.

소프트웨어 엔진도 이와 마찬가지인데, 불가능하지는 않지만 웹브라우저를 구매 혹은 이용하려 할 때 웹컨텐트 엔진을 따로 구해 설치하지는 않는다.

그러나 웹컨텐트 엔진은 웹브라우저의 특성에 큰 영향을 미치는 핵심요소로서 웹컨텐트 엔진의 특성에 따라 사용자가 경험하는 웹의 세상은 큰 차이를 보이게 된다.

이처럼 웹킷은 웹브라우저 또는 이메일이나 위젯과 같은 웹관련 애플리케이션의 핵심부품 역할을 하는 소프트웨어 엔진이다.

 

두번째로 오픈소스의 특성이다.

오픈소스는 소스코드가 공개되어 있어 사용자들이 자유롭게 가져다가 사용해 볼 수 있고, 또 소스코드의 수정도 가능하며, 특정 라이센스 하에서는 재배포도 가능하다.

그러나 오픈소스는 사용자들에게 소스코드 이용의 자유를 주는 반면, 제품으로서의 품질을 보장해 주지 않는다.

따라서 개발자들이 오픈소스를 이용하려면 추가적인 노력이 필요한데, 이를 위해서는 오픈소스 프로젝트의 목표를 정확히 이해해야 한다.

즉, 웹킷을 하나의 완성품으로 보고 쉽게 상업용 제품 개발에 이용하는 것은 조심스런 주의가 필요하다.

 

세번째로 웹킷의 가장 중요한 기능은 웹컨텐트를 렌더링하는 기능이다.

웹컨텐트는 웹 상에 무수히 많이 존재하는 컨텐트를 말하며, 이들은 거의 대부분 HTML, CSS, 자바스크립트 형태로 이루어져 있다.

웹킷은 HTML, CSS, 자바스크립트로 이루어진 웹컨텐트를 사용자의 출력장치에 표현하고 사용자와 상호작용하는 기능을 가지고 있다.

보통 웹브라우저에서 렌더링이라 함은 HTML 문서를 CSS에 명시된 속성으로 출력장치에 배치하는 작업을 말한다.

예컨대, 문서의 마진은 얼마이고, 이미지의 크기는 얼마이며 어느 위치에 출력되는지, 텍스트는 이미지 주변을 어떻게 흐르듯 배치해야 하는지 등등의 작업을 말한다.

어찌 보면, 렌더링은 북디자이너가 책을 디자인할 때 이미지와 텍스트를 배치하는 레이아웃과 유사하다. 웹킷을 레이아웃 엔진이라 부르기도 하는 이유이기도 하다.

이런 측면에서 웹브라우저가 웹컨텐트를 출력하는 기능은 북디자이너가 책에서 텍스트와 이미지를 배치하는 기능과 같다.

다만, 책에서는 컨텐트를 동적으로 표현하지 못하지만, 웹컨텐트는 자바스크립트로 웹컨텐트를 조작하여 동적으로 컨텐트를 변화시킬 수 있다는 점이 다를 뿐이다.

지금까지의 내용을 다시 정리하면, 웹킷은 HTML, CSS, 자바스크립트로 이루어진 웹컨텐트를 사용자 출력장치에 표현하고 사용자와 상호작용하는 웹애플리케이션 소프트웨어의 핵심부품이다라고 고쳐 써볼 수 있다.

 

앞서 언급한 대로 웹킷은 하나의 완제품이 아니기 때문에, 웹킷엔진을 탑재하고 최종 사용자가 이를 이용할 수 있도록 해주는 웹애플리케이션이 필요하다.

 

 

 

 

대표적인 애플리케이션이 웹브라우저이다.

현재 웹킷엔진을 탑재한 웹브라우저는 구글 크롬 브라우저, 애플 사파리 웹브라우저, 안드로이드 웹브라우저 등등이 있다.

이와 함께 일반적인 웹브라우저 외에도 애플 맥에 기본 번들되어 있는 메일 클라이언트와 위젯을 포함해서 아마존 킨들 등등도 웹킷 엔진을 탑재한 웹컨텐트 애플리케이션들이다.

심지어 구글 크롬 OS와 팜 WebOS는 웹킷을 이용해 웹애플리케이션을 위한 웹플랫폼을 개발/발표하기도 했다.

이렇듯 무수히 많은 웹켄텐트, 그리고 그 컨텐트를 앱처럼 동적으로 표현할 수 있는 자바스크립트의 발전과 함께 웹킷은 그 가능성이 무궁무진한 핵심요소가 되고 있다.

 

웹킷 오픈소스 프로젝트
웹킷의 개발역사는 1998년으로 거슬러 올라간다. KDE 프로젝트의 일환으로 개발되었던 KHTML과 KJS가 그 기원이다.

그 당시의 코드를 기반으로 2002년 애플이 웹킷 프로젝트를 출범시켰고, 2005년 월드와이드 개발자 컨퍼런스에서 웹킷 프로젝트를 오픈소스로 발표하여 현재에 이르고 있다.
웹킷 오픈소스 프로젝트는 웹킷을 오픈소스로 개발/유지/보수하는 프로젝트이다.

WebKit.org에서는 웹킷 프로젝트의 목표와 목표가 아닌 것을 분명히 함으로써 웹킷 오픈소스 프로젝트에 대한 오해를 줄이고자 했다.
웹킷 프로젝트의 목표는 전반적으로 납득할만한 수준의 목표를 가지고 있다. WebKit.org에 기술되어 있는 프로젝트 목표를 적어보면 다음과 같다.


웹 컨텐트 엔진 : 이 프로젝트의 최우선적인 대상은 HTML, CSS, 자바스크립트 그리고 DOM과 같은 표준 웹기술을 사용해 작성된 월드와이드웹 상의 컨텐트이다.

또한 이와 함께 다른 웹관련 애플리케이션에서 웹킷을 이용할 수 있도록 해서 사용자에게 웹컨텐트를 보여주거나 상호작용하는 엔진이 되기를 원한다.

오픈소스 : 웹킷은 다른 오픈소스나 독점적인 애플리케이션 모두에서 자유롭게 사용될 수 있도록 해야 한다.

특히, LGPL 2.1+와 호환되는 라이센싱을 목표로 하고 있다. 현재로서는 웹킷 라이센스를 LGPL 3으로 옮길 계획은 없다.

호환성 : 호환성은 수많은 기존 사이트에게 있어서 필수적인 요소이다.

웹킷은 표준 준수 비용이 많이 들더라도 기존 웹사이트와의 호환성을 유지하고 개선시키도록 노력하고 있다.

호환성을 위해 웹킷은 회귀(regression) 테스팅을 실시하고 있다.
표준 준수 : 웹킷은 웹표준을 준수하고 새로운 표준을 지원하는데 목표를 두고 있다.

실제로 웹표준화 커뮤니티에 참여하면서 새로운 기술들을 표준에 반영하고 새로운 표준을 엔진에 구현하여 표준의 타당성을 검사하고 있다. 이를 위해 회귀 테스트를 한다.

안정성 : 웹킷 코드는 최고수준의 안정성을 보장하기 위해 관리되고 있다. 엔진이 죽거나, 응답이 없거나, 하위호환성 문제의 경우 즉각적으로 처리된다.

성능 : 속도가 메모리 사용량을 개선하고 관리하는 것도 중요한 목표이다.

우리는 결코 "충분히 괜찮은" 정도의 성능을 고려하지 않는다. 우리는 개선을 위해 끊임없이 노력하고 있다.

웹 컨텐트가 풍부해지고 복잡해질수록, 웹 브라우저가 제한적인 단말에서 수행되는 경우가 많아질수록, 성능개선 노력은 꾸준히 이루어져야 한다.

보안 : 보안위협으로부터 사용자를 보호하는 것은 매우 중요한 일이다. 우리는 보안 이슈를 즉각적으로 해결하여, 사용자를 보호하고 그들의 신뢰를 유지하고 있다.

이식성 : 우리는 웹킷을 다양한 데스크탑, 모바일, 임베디드 등의 플랫폼에 포팅이 용이하도록 하고 있다.

플랫폼 통합이 잘 이루어지도록 기반구조를 제공하여, 적절한 곳에서 네이티브 플랫폼 서비스를 재사용하고 친숙한 임베딩 API를 제공하고 있다.

사용성 : 웹킷 기능이 사용자 경험에 미치는 영향을 확장하기 위해, 좋은 사용자 인터페이스 설계 원칙에 따라 작업하고 있다.

이와 함께 타겟 플랫폼이 제공하는 휴먼인터페이스와 잘 어울리도록 하고 있다.

분석 용이성(Hackability) : 웹기술이 복잡하긴 하지만, 웹킷이 빠르게 발전할 수 있도록 상대적으로 이해하기 쉬운 코드를 만들고자 노력하고 있다.

가능하면 직설적인 알고리즘과 자료구조를 사용해 명확하고, 유지보수가 수월하도록 코드를 작성하고 있다.

또한 멤버변수와 메소드 등등의 이름과 코드 구조를 개선하여 코드 이해를 돕도록 했다.

때론 어떤 문제해결을 위해 기교적으로 복잡한 코드를 작성할 때에도 인터페이스의 명확성을 잃지 않도록 했다. 더욱이 안정장치로 자동화된 회귀 테스트를 적극 활용해 많은 코드 변화가 일어날지라도 위험을 최소화하도록 했다.

이번엔 웹킷 프로젝트의 범위를 벗어나는 부분에 대해 적어봤다. 역시 WebKit.org에 기술되어 있다.

 

 

 

 

웹킷은 엔진이지 브라우저가 아니다.

우리는 웹킷 기반의 완전한 브라우저를 개발할 계획이 없다.
웹킷은 과학 프로젝트가 아닌 공학 프로젝트이다.
웹킷에 새로운 기능을 적용하기 위해, 관련 기술이나 적어도 검증을 위해 유즈케이스(use case)를 더 선호한다.
웹킷은 재사용이 가능한 범용 코드로 구성되어 있지 않다.
때론 범용목적의 코드를 작성하지만, 좋은 웹 컨텐트 엔진을 위해 필요한 수준으로만 작성한다.
웹킷은 모든 문제에 대한 해결책이 아니다.
우리는 웹컨텐트에 집중한다. 상상할 수 있는 모든 기술에 대한 솔루션을 제공하려는 것이 아니다.

 

살펴보았겠지만, 대부분의 목표는 웹킷 개발에 코드를 직접 기여할 개발자가 아니라면 누구나가 말할 수 있는 평범한 목표들로 보인다.

그러나 위 목표들은 웹킷에 기능을 추가하거나, 코드 기여자들 간의 이견이 발생하거나 할 때, 의사결정을 위한 기준으로 사용된다.

일종의 헌법인 셈이다. 아울러 목표가 아닌 것들은 목표가 다소 많아지면서 목표가 산만해지는 것을 막고 웹킷에 대한 오해를 분명히 구분하고자 작성되었다.

먼저 "웹킷은 엔진이지 브라우저가 아니다"라고 했는데, 여기에 어떤 의미가 있는가? 엔진과 브라우저는 구체적으로 어떤 기능적 차이가 있는가?

웹킷을 이용해 웹브라우저를 개발하려면 어떠한 작업을 더 해주어야 하는가?

실제로 웹렌더링 엔진을 이용해 상용 웹브라우저를 개발하려면 상당히 많은 추가작업이 필요하다.

캐시, 주소창, 북마크, UI, 등등의 작업을 추가적으로 개발해야 하는 것은 물론이고, 웹킷에서 지원하고 있는 각종 기능의 포트를 타겟 플랫폼에 맞게 작성하는 것도 상당히 많은 개발작업을 필요로 한다. 이미 오픈소스로 다 구현되어 있는 것 아닌가라고 반문하지 마시라.

상용화를 위해서는 구체적인 부분에서 해야 할 일이 꽤 많다.
게다가 웹킷 SVN 저장소(repository)의 최신 소스코드들은 항상 안정적인 상태를 유지하고 있지 않다.

따라서 웹킷 소스를 가져다 웹컨텐트 애플리케이션을 제작하기 위해서는 원하는 기능이 구현되어 있는지 확인하고, 또 안정적인 리비전을 찾아야 한다.

안타깝게도 각 리비전에서 지원하는 기능목록과 안정성 여부가 기술되어 있는 문서는 없다.

 

둘째로 "웹킷은 모든 문제에 대한 해결책이 아니다"를 보자.

의미가 살짝 다를 수 있지만, 한번은 웹킷 메일링 리스트에 웹킷을 가볍고 작게 만들기 위해 중요한 기능만으로 빌드할 수 없는가라는 질문이 올라온 적이 있다.

그때 누군가의 답변은 오픈소스 중에 작고 가벼운 웹렌더링 엔진이 많이 있으니 그런 엔진을 찾아 사용하라는 것이었다.

이는 웹킷은 웹기술을 완전히(fully) 지원해야 하는 웹렌더링 엔진이므로, 작고 가벼운 웹렌더링 엔진을 구함이라는 문제에 대해서 웹킷은 해결책이 아니다라는 의미이다.

 

 

 

 

 

 

 


반응형