글모음

‘MongoDB 2.4’ 꼬리말(tag)이 달린 글들

MongoDB 2.4 New Feature : V8 JavaScript Engine

글 : 이승용

MongoDB 2.4 버전에서 우리가 주목할 점은 hashed-index와 자비스크립트 엔진이 구글의 V8 엔진으로 변경되었다는 점이다. Hashed-index에 대해서는 저번 글에서 간단하게 살펴보았고, 이번에는 자비스크립트 V8 엔진에 대해서 살펴보기로 한다.

MongoDB의 자바스크립트 엔진은 버전 2.4가 발표되기 전에 모질라의 SpiderMonkey 엔진을 사용하고 있었다. 한가지 우리가 집고 넘어가야 할 점은 버전 2.4 이전에 자바스크립트 엔진을 V8로 사용하지 못하는 것은 아니었다는 점이다. 실제로 10gen은 MongoDB의 자바스크립트 엔진을 SpiderMonkey와 V8 둘 중에 하나로 빌드 할 수 있도록 제공하고 있었다.

이 두 자바 스크립트 엔진의 가장 큰 차이점은 멀티 쓰레드와 속도이다. SpiderMonkey 엔진은 멀티 쓰레드를 지원하지 않지만 V8 엔진보다 빠르고, V8 엔진은 멀티 쓰레드를 지원한다. 10gen은 MongoDB 버전 2.4 이전까지 SpiderMonkey를 유지하고 있었던 것은 쓰레드 환경보다는 자바 스크립트 엔진의 빠른 속도가 더 중요시 되었기 때문으로 보인다. 실제로 MongoDB는 $where, mapreduce, group, eval 문으로 작성된 질의를 자바스크립트 엔진을 이용하여 처리하고 있기 때문에, 무엇보다 빠른 속도의 자바스크립트 엔진이 필요했을 것이다.

하지만, 10gend은 MongoDB의 락 시스템이 global lock에서 database lock으로 변경되고, 또 앞으로 collection lock으로 변경될 것이라는 로드 맵을 보여주고 있다. 락 시스템의 변경은 데이터베이스에서 병렬 처리를 위한 가장 핵심이 되는 항목이다. 락 범위가 크다는 것은 락 선점 시간이 커지기 때문에 동시 처리가 줄어들게 되는 반면, 자원을 독점하여 빠른 처리를 할 수 있다. 하지만, 멀티 코어에 따른 하드웨어의 발전은 범위 큰 락에 의한 CPU 활용도가 떨어지는 현상을 유발하게 되었고, MongoDB도 락 범위의 축소와 함께, CPU 활용도를 늘리는 정책으로 선회한 것으로 보인다.

필자의 개인적인 의견으로도, V8 엔진을 사용하는 것이 바람직하다고 보인다. 자바 스크립트로 동작하는 MapReduce를 수행할 때, 많은 시간을 걸리는 MapReduce 작업이 끝날 때까지 질의를 수행하지 못한다는 것은 끔직한 일이기 때문이다. 인터넷 자바스크립트 엔진의 성능 비교 사이트의 자료를 보면 SpiderMonkey가 V8보다 약 30% 정도 빠르다고 나온다. 하지만 실질적인 테스트를 수행해 보면, 15% 정도의 차이가 있다. 하지만, 동접 처리를 할 수 있는 장점에 비한다면 15%의 속도 문제는 그다지 큰 문제점으로 보이지 않는다.

개발자들이 MongoDB 버전 2.4를 사용할 때 주의할 점은, V8 자바스크립트 엔진은 ECMAscript 5th edition을 지원하고 있기 때문에, 기존 SpiderMonkey가 가지고 있던 비표준 기능은 사용할 수 없다는 것이다. 따라서, 기존에 작업하였던 자바스크립트 로직에서 syntax error가 발생할 수 있음에 주의하자.


  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
Categories: 미분류 Tags: , ,