웹브라우저, 속도에 대한 타협은 이제 없다.

크롬에서 눈에 띄는 것은 무엇보다 구글이 자체적으로 만든 자바스크립트 엔진 V8 이었다. 기존의 자바스크립트가 '인터프리터'에 충실해 바이트코드로 바꾸고 JIT을 동원하였지만 느린 속도를 가질 수 밖에 없었다. 반면, V8은 바로 x86 코드로 컴파일을 해버린다1. 그래서 타 브라우저의 스크립트 엔진보다 훨씬 빠른 성능을 얻을 수 있었고, 이는 브라우저 간 새로운 속도 경쟁을 유발시킨 아주 좋은 예가 되었다. 자바스크립트를 직접 네이티브 코드로 바꾸는 방법이 전혀 새로운 방법인 것은 아니지만 비약적인 성능 향상을 얻은 것은 주목할 만하다. 다른 업체들도 이와 유사한 방법으로 스크립트 성능을 높이려 하니 점점 이 경쟁은 치열해질 것이다.

Google Chrome comic: Page 14

자바스크립트는 이제 이렇게 속도 문제에 대한 실마리를 풀었다. 남은 것은 플래쉬와 실버라잇으로 대표되는 RIA 분야일 것이다. 웹 브라우저 클라이언트 환경은 좌측에 HTML, 우측에 ActiveX2를 극단으로 놓고 점점 우측으로 진화하는 과정으로 볼 수 있다. 과거에는 쉽게 안 될 것 같았던 HD급 동영상 재생도 이제는 실버라잇 같은 플랫폼에서 훌륭하게 구현 된다. 미국 NBC가 이번 베이징 올림픽 인터넷 생중계를 실버라잇 기반으로 구현했었다. 또, C/C++로 만들어진 퀘이크 게임이 Adobe Flash 위에서 돌아가는 동영상을 본 분들도 많을 것이다. C/C++로 만들어진 코드를 Flex로 크로스 컴파일해 작동시킨 것이었다.3 RIA가 어떤 것을 원하는지 여실히 보여주는 예다.

결국 RIA 플랫폼이 요구하는 것은 (1) 네이티브 코드 수준의 강력함, (2) Static HTML과 같은 안전함 그리고 (3) 플랫폼 및 브라우저 독립성일 것이다. ActiveX는 (1)는 손쉽게 구현하지만 (2)에서 고전을 면치 못하고 (3)은 불가능이다. 이 목적을 모두 충족시키는 기술이 앞으로 새로운 RIA 기술이 되지 않을까? 한 마디로 ActiveX 처럼 바로 exe를 실행시키면서도 완벽하게 샌드박싱 된, 즉 시스템을 함부로 건들일 수 없는 제한적인 네이티브 바이너리를 실행할 수 있는 기술이 그것이다. 이미 비스타와 IE에서도 Protected Mode 라는 것을 두어 ActiveX가 나쁜 짓을 하는 것을 최대한 막으려고 하는데 결국 같은 맥락으로 볼 수 있을 것 같다.

크롬의 V8이 자바스크립트를 바로 네이티브 바이너리로 바꿨듯이, 지금의 RIA를 거쳐서 구현되고 있는 여러 풍부한 웹 환경도 결국 네이티브 실행 파일을 바로 실행할 수 있는 방향으로 진화할 것 같다.

내가 생각하는 것은 C/C++로 그냥 코딩을 하는데 컴파일하면 바로 웹 브라우저에 척하고 붙는 (써 넣고 보니 ActiveX와 비슷) 그런 방법론이다. 대신 플랫폼 독립적이고 키보드 후킹이나 디스크 포맷 같은 일은 못할 것이다. 물론, RIA를 위한 C/C++ SDK 및 컴파일러가 필요할 것이다. 예를 들면, 퀘이크를 크로스 컴파일해 액션스크립트로 바꾸어 플래쉬 위에서 돌리는 것이 아니라, 컴파일을 새로 하여 바로 컴퓨터 위에 돌리는 것이다. 비록 웹 브라우저를 통하는 것처럼 보이지만 코드는 바로 CPU 위에서 작동할 것이다.

아무리 컴퓨터가 빨라졌다고 하지만 그에 따라 컴퓨터가 보여줘야 할 내용도 같이 복잡해지고 있다. 여전히 컴퓨터 프로그램에 있어 속도는 최고의 가치가 아닐 수 없다. 이번 V8을 보면서 더더욱 이런 생각을 한다. 특히 웹 브라우저 기반의 플랫폼을 꿈꾸는 구글이라면 더더욱.

 

세 줄 요약:

  1. 안전한 네이티브 바이너리를 바로 브라우저에서 실행시키는 기술이 새로운 RIA의 대안이 될 것 같다.
  2. ActiveX는 보안으로는 문제 투성이지만 나름 RIA의 목표 중 하나를 잘 보여주고 있다.
  3. 마이크로소프트 익스플로어는 언제 쯤 정신차릴까?

 

1 그래서 크롬 64비트 버전이 당장 나올 수 있는 것이 아니다. V8은 네이티브 코드 변환 외에도 여러 프로그래밍 언어 차원의 최적화도 하고 있다. Dynamic type의 자바스크립트를 마치 정적 타입으로 간주하는 최적화를 쓰고 있다. 왜냐면 비록 자바스크립트가 동적 타입이라지만 대부분 C/C++/Java처럼 코딩하기 때문이다.

2 물론 IE-윈도우에 종속적인 ActiveX를 우측 끝으로 볼 수는 없지만 대충 그 의미는 충분히 이해하실 듯. AcitveX를 잘 모르시는 분들은 어디 별나라에서 온 기술로 이해하는데, 컴맹을 위해 설명하자면, 윈도우 실행 파일을 웹을 통해 실행시켜주는 그런 무시무시한 놈인 것이다. 문제는 ActiveX가 만들어질 당시 웹을 통한 바이러스 전파를 생각하기 쉽지 않았다는 것. 프로그래밍틱하게 얘기하면 ActiveX는 윈도우 곳곳에서 사용되는 COM 객체일 뿐. OLE automation을 구현하기 위해 IUnknown, IDispatch 등을 구현한 COM 객체다. 엑셀 파일을 워드에 붙일 수 있는 그 기능 그거다.

3 참고 링크를 보면 "어떠한 C/C++ 코드도 플래쉬 혹은 Adobe AIR에서 돌아가는 ActionScript로 컴파일 해주는 기술" 이라고 적혀있다. 글을 쓰신 분이 "Any C or C++ code"라고 적었는데 물론 이것을 그대로 받아들이면 곤란할 것이다. 파일을 마구 지우라는 코드도 그대로 액션스크립트로 바꿀 수는 없는 노릇 아닌가?

by object | 2008/09/15 13:14 | 컴퓨터 | 트랙백 | 덧글(6)
트랙백 주소 : http://minjang.egloos.com/tb/2059498
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 몽몽이 at 2008/09/15 13:57
제 생각엔 RIA의 각 업체들이 지멋대로 만들어내기 전에, 웹 어플이 로컬 자원에 접근하는 인터페이스에 대한 추상적인 표준화 작업이 선행되어야 한다고 봅니다.
오픈웹이란데서 온라인 결제에 대해 소송하구 그런건 잘 아시지요? 그쪽의 대안은 사실상 Java더군요.
그런데 전 ActiveX든 Java든 로컬 자원에 접근하는 체계 자체가 표준화되지 않았다는게 더 근본적인 문제로 보고 있는데 그쪽 생각은 다르더군요.
분명 아무 파일에나 접근할 수 있게 해선 안될 거지만 인증서나 private key와 같은 경우도 있으므로 이런걸 포괄적으로 포용해서 더 추상적인 수준에서 접근 통제가 결정되어야 할겁니다.
이건 말씀해주신, RIA 업체들이 추구하는 당면 과제와는 좀 방향이 다를테지요... 설령 결국 각 RIA 기반에서 그런 문제에 대한 솔루션이 제시가 되더라도 제각각으로 나오면 개발자에게는 재앙이라 할 수 있겠지요.
자칭 IT 선진국이라는 대한민국... 관이든 민이든 좀 선도적인 자세로 대처했으면 얼마나 좋을까요?
Commented by object at 2008/09/15 14:39
방향이 다릅니다. 제가 생각하는 것은 ActiveX 적인 방향, 즉 일단 바이너리를 그냥 실행시킨다, 그리고 보안을 생각하자 입니다. 반면 RIA는 과거 단순한 플래쉬에서 시작해서 점점 바이너리 수준으로 실행 영역을 확장시키는 것이지요. 근본적으로는 RIA와 같은 추상화를 완전히 걷어내는 것이죠.

웹브라우저에 의한 로컬 자원에 대한 접근을 '표준화'하는 것은 좀 힘들지 않을까요? 아니면 이미 있는데 아무도 안 쓰는 것이 아닐까요. 일단 극단적으로 실버라잇이나 플랙스 둘 중 하나가 시장을 장악해버리면 그게 사실상 표준이 되는 것이죠.
Commented by sloth at 2008/09/16 06:29
갈수록 세상 만사(?) 가 복잡해져 가네요
Commented by 가짜집시 at 2008/09/16 10:33
바이너리를 직접 실행한다는 차원에서는 불완전하고 후진 Netscape Plugin Interface 를 대폭 수정하여 강력하고 안전한 표준 플러그인 모델을 만드는 쪽이 현실적이지 않나 싶습니다. 보안성은 여전히 문제지만, 적절한 sandboxing 기준이 있다면 벤더들이 구현할 수 있을테죠.
Commented by object at 2008/09/23 07:03
NPAPI도 사실 같은 주소 공간에 올라가는 바이너리로 볼 수 있습니다. 만약 순수 계산만 하는 로직이라면 일반 바이너리랑 차이도 거의 없겠죠. 그러나 제가 알기로 NPAPI를 사용하면 결국 소프트웨어 레벨에서 모든 것이 제어되는 것 같은데요. 예를 들어, 제공하는 API에 맞춰 함수를 만들어야 하고 그런 식인 것 같습니다. 제가 드린 말씀은 플러그인 API 차원에서 출발하여 점점 기능을 확장시키기 보다는, 아예 밑 바닥 원초적인 바이너리에서 올라오는 방향이죠. 물론 보안을 위해 대표적으로 syscall 같은 명령어를 다른 명령어로 대체하는 컴파일이 필요하고, 실제 작동 시에는 이걸 다이나믹하게 바꿔주는 VM 같은 것이 필요할 것입니다. VMware Workstation이 사용하는 방법이기도 하지요.

이것의 이점은... NPAPI 같은 걸 쓴다면 소프트웨어의 전체적인 구조를 바꿔야 하는데 이 방법은 그렇게 하지 않아도 될 수 있다는 점 정도가.. 이게 막강한 점이 많은 예에서 나오듯이 퀘이크 같은 게임을 바로 컴파일 한 뒤 돌릴 수 있겠죠.
Commented by NoBody at 2008/10/02 21:06
Native Binary가 실행된다면 어떻게 해도 보안문제는 해결할 수 없습니다. 전용 compiler와 SDK를 사용하는 것은 binary를 생성하는 방법을 제공하는 것일 뿐, binary의 functionality를 제약하는 방법은 아니니까요.

Functionality의 제약을 위해서 VM위에서 실행한다면 Binary code라고 해도 최근의 script language보다 빠를까요?

:         :

:

비공개 덧글

<< 이전 페이지 다음 페이지 >>





by 김민장 2008 이글루스 TOP 100
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04
저도 아들 돌잔치때 돌잡이 ..
by 박상욱 at 01/18
미국 대학원 원서 작성중에 p..
by 태클사이야 at 01/13
TO: 박PD 로그인 하지 않아..
by 박응용 at 01/10
http://gigglehd.com/zbx..
by dhunter at 12/28
우와.. 좋네요. 태반이 ..
by 윤광배 at 12/17
항상 좋은 글 잘 보고 있습니..
by y2k at 11/23
글이 좋아서 제 블로그에 담..
by 쏭섭 at 11/23
최근 등록된 트랙백
조엘 스폴스키의 강연 (Sta..
by 인덕원칸타타
[Redis] sds.c를 분..
by 조급하지말고 천천히
메뉴릿
이글루 파인더

website counter

Add to Google

rss

skin by 이글루스