본문 바로가기

IT

구글의 브라우저 크롬(Google Chrome)을 소개합니다.

사용자 삽입 이미지

사용자 삽입 이미지


9월 1일 구글이 전격적으로 자신들의 브라우저 '크롬'을 발표하고 오늘(9/2) 베타버전를 100개 이상의 나라에서 공개하겠다고 했다. 아침에 이 뉴스를 보고 얼마나 놀랐던지...


이번 발표에서 구글은 크롬을 소개하기 위한 만화책을 함께 공개하는 센스를 발휘 했는데 아무리 만화라고 해도 내용이 내용인지라 휙휙 넘기며 보기는 어렵다. 일단 글자가 많다.


그래도 구글이 만든 브라우저이니 한번 찬찬히 읽어보기로 하고, 이왕 시간을 들이는 김에 그 내용을 정리해서 공유하기로 했다.


개발 동기 및 목표


현재 우리가 브라우저에서 보는 것은 단순 웹페이지가 아니라 채팅, 비디오, 게임과 같은 어플리케이션이다. 이러한 웹어플리케이션들은 브라우저가 처음 생길 때는 없던 것들이다.

따라서 브라우저도 이러한 어플리케이션에 맞게 새롭게 만들어진다면 좋지 않을까?

이렇게 시작된 구글 크롬의 개발에 있어서 주요 목표는 다음과 같다.


  • 브라우저는 안정되고, 빠르고 보안성이 높아야 한다.
  • UI는 깔끔하고 심플하고 효율적적이어야 한다.
  • 오픈소스로 개발되어야 한다.

이제 상세한 기술 사항들을 살펴보자.


1장 안정성, 테스트 멀티 프로세스 구조


멀티 프로세스 구조

크롬 프로젝트 초기에 구글의 Gears팀은 브라우저들이 싱글 쓰레드로 동작하기 때문에 문제가 있다고 말했다. 예를들어, 자바스크립트가 수행되는 동안 브라우저는 다른 일을 전혀 할 수가 없다.

Gears팀은 이에 대한 해결책으로 멀티쓰레드로 동작하는 브라우저를 생각하고 있었다.  하지만, 크롬팀은 멀티 프로세스 방식을 생각했다.

사용자 삽입 이미지


이것은 브라우저의 각 탭마다 별도의 프로세스가 존재하는 방식이다. 따라서 어떤 탭의 자바스크립트가 굉장히 바쁘게 동작하고 있더라도 다른 탭에는 영향이 별로 없게 된다.

나아가서 한 개의 탭이 죽어버리더라도 전체 브라우저가 죽는 일은 없게된다.

메모리 관점에서 기존의 멀티쓰레드 방식은 처음에는 메모리를 덜 사용한다. 하지만 사용자가 오랫동안 많은 탭을 열고 닫고 하면, 하나의 프로세스 내에서 반복된 메모리 할당, 재할당 특히 프레그멘테이션 등이 계속 발생하게되어 결국 브라우저는 점점 더 많은 메모리를 필요로하게된다.

사용자 삽입 이미지

그러나, 크롬의 멀티프로세스 방식에서는  탭을 닫고 열때마다 프로세스가 깔끔하게 새로 시작하게된다. 따라서 초기에 필요로하는 메모리는 좀 더 많지만 오랫동안 사용하더라도 프레그멘테이션 등의 문제가 없다.

그리고 크롬의 Task manager를 사용하면, 특정 사이트를 표시하고 있는 탭의 프로세스가 지나치게 부하가 높거나 특정 탭에서 사용하는 플러그인에 문제가 있는 지를 알 수 있으며 그러한 탭을 닫아버릴 수있다.

테스트


구글 크롬은 구글의 거대한 컴퓨팅 자원을 이용하여 엄청나게 테스트를 하고 있다.
새로운 빌드가 만들어질 때마다, 20-30분 내에 수 만개의 서로 다른 페이지들에 대해서 테스트를 수행한다.

사용자 삽입 이미지


또 매주 '크롬봇'이 수백만개의 페이지를 테스트한다.
(세상에 널린 수십억개의 페이지들 중에서 수백만개의 페이지를 선택하는 것 역시 구글의 축적된 데이터를 이용한다. 즉, 페이지 링크등을 통해 가장 많은 사람들이 방문하는 사이트들을 우선적으로  테스트한다.)

이러한 방식으로 크롬 팀은  문제들을 더 빨리 발견하고 해결하고 있다.

이외에도 크롬 팀은 다양한 자동화 테스팅 기법들을 사용하여 더 튼튼하고 안전한 브라우저를 만들기 위해 노력하고 있다.

2장 속도 (웹킷과 V8)


구글 크롬은 렌더링을 위해서 오픈소스 인 WEBKIT 엔진을 사용한다.

사용자 삽입 이미지

이미 웹킷을 사용하고 있는 구글폰 안드로이드팀에 따르면 웹킷은 메모리를 효율적으로 사용하고 디바이스에 임베드하기에도 좋으며, 전체적으로 간결성을 유지하고 있어 새로운 부라우저 개발에서 베이스 코드로 사용하기에 적합하다고 한다.


자바스크립트를 위해서 크롬은 V8이라는 Virtual Machine을 사용한다. V8팀은 덴마크에 있으며 이들은 Virtual Machine 전문가 집단이다.

아래는 V8팀의 말이다.

버추얼머신은 안정정과 플랫폼 독립성을 제공한다. 과거에 자바스크립트를 위한 버추얼 머신들은 성능과 인터액티비티가 그리 중요하지 않던 때에 웹페이지를 위한 기본적이고 작은 프로그램 수행을 타겟으로 디자인되었다.

하지만, 현재 우리는 GMAIL과 같은 큰 규모의 많은 어플리케이션들을 사용하고 있으므로 기존의 단순한 방식은 더 이상  적당하지 않다.


그래서 우리는 정말 빠른 엔진을 만들기 위해 완전히 바닥부터 새로 만들기로 했다.

사용자 삽입 이미지

V8에서 빠른 속도를 위해 도입한 개념 중 하나는 'Hidden class transition'이다.

자바스크립트는 클래스라는 개념이 없고 모두가 오브젝트이다.  새로운 오브젝트에 동적으로 속성들을 추가해가는 방식으로 동작한다.

하지만 V8에서는 실행이 계속됨에 따라 동일한 속성들을 가진 오브젝트들이 숨겨진 공통의 클래스를 공유하게 하고, 이를 기반으로 최적화를 할 수 있다.

사용자 삽입 이미지

V8이 자랑하는 또 한 가지 특징은 'Dynamic Code Generation'(동적 코드 생성)이다.

일반적인 자바스크립트 엔진은 수행을 위해서 소스크드를 보고(파싱) 자신이 이해하고 수행할 수 있는 내부적인 표현으로 변환한다.
그리고 실제 실행은 이 내부표현을 이용해서 하게된다. 하지만 이 방식에서는
동일한 부분이 반복 수행될 때마 이 내부표현이 반복해서 이해되고(interpretation) 수행되어야 한다는 단점이 있다.

그러나 V8에서는 자바스크립트 코드에서 바로 머신코드를 생성하여 실행한다. 따라서 수행을 위해서 내부코드를 생성하고 반복적으로 이해하는 과정이 없게된다.

끝으로 기존 자바스크립트 엔진의 또 다른 문제는 'Garbage Collection'이다.

사용자 삽입 이미지

자바스크립트를 포함한 최근의 객체 지향 언어들은 메모리 관리를 자동으로 해준다.

기존의 Garbage collection 방식에서는 이를 위해서 프로그램의 실행스택에서 메모리 포인터 처럼 보이는 것들을 찾아내는 과정이 필요하다. 그런데 어떤 값들은 메모리 포인터인지 혹은 일반 정수값인지 정확히 판단할 수 없는 경우가 많다.


V8에서는 'Precise garabage collection'이라는 방식을 사용한다. 이 방식에서는 어디에  포인터가 있는지를 정확히 알고 있으며, 이를 통해서 여러가지 성능 개선이 가능하다.

이러한 성능 개선들을 통해서, V8엔진을 사용하면 웹 화면상에서 더 부드러운 드래그엔드랍과 같은 UI구현이 가능해진다.

V8은 구글 크롭을 위한 특정한 API들을 포함하고 있지만, 코어 부분은 특정 브라우저에 한정되어 있지 않다. 따라서 어떤 브라우저도 원한다면 V8을 사용할 수 있다.

사용자 삽입 이미지


3장 검색과 User Experience


탭의 위치

구글 크롬 역시 사용자 인터페이스는 탭 중심이며, 탭이 매우 중요하다고 생각했기 때문에 탭의 위치를, 기존 브라우저와 달리, 브라우저의 최상단인 주소입력창 위로 올렸다.

사용자 삽입 이미지


이에 따라 각 탭은 별도의 주소 입력창과 제어 버튼들을 가지게 된다.


옴니박스

크롬의 주소 입력창은 옴니박스(Omni box)라고 부르는데, 이름이 암시하듯이 추천, 검색, 최근 많이 방문한 페이지, 추천 페이지 등 많은 기능을 가지고 있다.


예를 들어, 옴니박스에서는 방문했던 모든 페이지에 대한 풀 텍스트 검색이 가능하다. 이 기능을 이용하면 어제 방문했던 페이지의 주소를 기억해서 다시 방문하지 않더라도, 검색을 통해서 찾을 수 있다.


옴니박스는 자동  완성 기능도 당연히 제공하며, 아주 짧은 몇 글자만 입력하더라도 동작한다. 만약 c만 입력했다고 하면 c로 시작하는 사이트중 최근에 사용자가 많이 방문했던 사이트로  예를 들면 cnn.com으로 이동한다.


아마존이나 위키페디아 등 사이트 내에 있는 검색 박스를 브라우저에서 바로 이용하는 기능도 있는데 예를 들어 "Search Amazon: Zamfir" 와 같은 검색이 가능하다.

사용자 삽입 이미지


탭 초기 화면

브라우저에 새로운 탭을 열면서 사용자가 기대하는 것은 무엇일까? 어떤 특정 사이트로 이동하거나 또는 검색을 원할 것이다. 그래서 크롬은 사용자의 최근 방문한 9개의 사이트의 썸네일과 최근에 검색한 검색 사이트들을 보여준다. ( 기존의 브라우저들은 미리 정해진 사이트나 빈 페이지를 보여준다.)

사용자 삽입 이미지

프라이버시 모드

구글 크롬에는 프라이버시 모드를 제공한다. 프라이버시 모드에서 일어난 모든 일은 어떠한 기록에도 남지 않으며, 그 탭을 닫으면 해당 쿠키나 세션들도 즉시 지워진다.


팝업창 제어

크롬에서는 팝업창으로 장난 치기가 어렵다. 크롬에서는 모든 팝업창이 그 팝업을 띄운 탭의 범위 안에 포함되어야 하며, 처음에는 제목만 작게 표시된다. 만약 그것이 사용자가 원하는 것일 경우에는 사용자가 드래그 하여 원래의 크기로 볼 수 있다.

사용자 삽입 이미지


4장 보안, Sandboxing, 안전한 브라우징

Sandboxing

구글은 Sandboxing 이라는 것을 통해서 악성소프트웨어를 방지한다.  Sandboxing은 악성 소프트웨어가 사용자의 PC에 설치되거나 하나의 탭이 다른 탭에 영향을 끼치지 못하게 막는다. 또 사용자 디스크에 파일을 작성하거나 문서 폴더등의 내용을 읽지 못하도록 한다.

따라서 각 탭의 프로세스는 각각 감옥에 갇힌 것과 같아서 어떠한 나쁜 짓도 할 수 없다.

어떤 탭에서 나쁜 일이 일어난다면, 그 탭을 닫기만 하면 아무 문제가 없다.

사용자 삽입 이미지

사용자 삽입 이미지


플러그인과 보안

그런데 이러한 보안 정책에 있어 유일한 예외는 바로 플러그이다. 플러그인은 브라우저보다 동등한 또는 더 강한 권한을 가지고 수행될 수 도 있다.(예를 들어 플래쉬를 이용하면 디스크의 파일을 읽거나 쓸 수 있다.)

 

사용자 삽입 이미지


플러그인의 코드는 크롬에서 만든 것이 아니므로 더 안전한 실행을 위해, 플러그인을 수행하기 위한 프로세스는 해당 탭의 고유 프로세스와는 별도로 존재한다.

사용자 삽입 이미지


피싱 방지

피싱은 Sandboxing으로 해결할 수 없다. 이에 해결하기 위해서 크롬은 계속해서 해로운 사이트의 주소들을 구글로 부터 업데이트받는다. 그리고 사용자가 해로운 사이트에 접속하려고 하면 경고를 보낸다.


구글은 악성 사이트 주소 제공 서비스를 무료로 제공할 뿐 아니라 공개 API를 통해서 누구나 사용할 수 있도록 한다.


구글은 또한 의도하지 않게 나쁜 요소를 포함했을 수도 있는 웹사이트를 위해서 그러한 사이트의 운영자에게 경고를 보낸다.

사용자 삽입 이미지


5장 Gears, 표준 그리고 오픈 소스


구글 크롬에는 Gears가 포함되어 있다. Gears를 통해 개발자들은 여러가지로 브라우저의 기능을 확장할 수 있다. 크롬이 사용자를 위한 것이라면 Gears는 개발자를 위한 것이라고 할 수 있다. (Gears에 대해서 더 알고 싶다면 이 곳 참고)


구글 크롬 브라우저는 완전히 오픈 소스로 개발되었으므로 누구라도 원하는 기능을 돈을 지불하거나 허락을 받지 않고 가져다 사용할 수 있다.

구글 크롬이  여러 오픈 소스 프로젝트들의 이용하고 있듯이, 다른 브라우저들도 구글의 크롬 브라우저에 적용된 기술들을 이용하여 더 개선 될수 있기를 기대하며, 이를 통해 전체적으로 웹과 인터넷이 더 발전할 수 있기를 기대한다.

사용자 삽입 이미지


(끝.)



이상으로 구글 크롬 코믹스의 요약을 마칩니다.  이제 몇 시간 후면 크롬을 다운 받아서 사용해볼 수 있겠군요.


구글이 크롬에 대해서 소개한 많은 기능들을  잘 구현하고 앞으로 더 발전시켜서, 구글이 기대하는 대로 크롬이 웹 전체의 발전을 위한 디딤돌이 되어 줄 지, 아니면 웹 개발자가 테스트 해야 할  또 하나의 브라우저에 그치고 말 지는 아직 알 수 없습니다.


그리고 크롬이 MS나 Firefox에 어떤 영향을 어떻게 미치게 될 지도 지금은 알 수 없습니다. 하지만 크롬으로 인해 당분간 강호는 어지러운 시기를 겪을 것이라는 사실은 분명하겠지요. 구글의 더 강력해질 패권이 두렵기는 하지만, 어떻든 모두가 서로 좋은 영향을 받아서 발전하는 기회가 되기를 기대합니다.

[ikspres.com 옮김]