1. What is Spider Monkey?

   Spider Monkey는 JavaScript를 동적으로 처리해주는 JS엔진으로써 Mozilla재단에 의해 Open Source로 개발되었다.

   따라서 누구나 자신의 C/C++ Program에 JavaScript Engine을 embed 할 수 있다.
2. Spider Monkey Universe
   Spider Monkey를 통해 JavaScript를 처리하기 위해서는 반드시 3가지의 구성요소(JSRuntime, JSContext, JSObject)가 
필요하다. 이때 3가지 구성요소의 대략적인 관계는 아래 그림과 괕다.
위의 그림과 같이 일반적인 Application의 경우 하나의 Runtime을 갖는다. 하나의 Runtime에는 다수의 Context가 
존재할 수 있고 Context위에는 Script에서 사용하는 Object나 String등이 존재하게 된다. 
Runtime : 사용자가 사용하는 Object나 Variable, Context등을 관리하기 위해 사용되는 Memory공간이다.
            Code Ex) JS_Runtime *rt = JS_NewRuntime(8 * 1024 * 1024);
                             함수의 인자는 JS_Engine에 요구하는 메모리 양(byte)이다.
                             만약 Runtime이 요구한 메모리를 모두 사용했을 경우 Garbage Collector가 자동으로 호출된다.
                             JS_DestroyRuntime(rt); // runtime을 해제할 때 사용되는 함수
Context : JavaScript Code와 Object와 관련하여 많은 일이 이루어지는 공간이다. 대표적인 작업으로는 Script를 
compile하고, execute 하는 작업과 Object의 property값을 설정하고 얻어오는 작업, JavaScript Data의 Type변환 등이 
이루어지는 공간이다. 
            Code Ex) JS_Context *cx = JS_NewContext(8 * 1024);
                             함수의 인자는 Script가 요구하는 variable이나 object를 모두 처리할 수 있을 만큼 충분히
                             큰 양이어야 한다. Script의 실행이 종료되면 context는 freed되거나 다른 script에게 할당된다.
                             JS_DestroyContext(cx); // context를 해제할 때 모든 정보가 사라지게 된다.
Object : 실제 JavaScript에서 사용하는 Object의 경우 아래의 Code를 통해 생성할 수 있다.
            Code Ex) global = JS_NewObject(cx, &global_class, NULL, NULL);
                             이때 함수의 첫번째 인자인 cx가 Object가 생성되는 context를 나타낸다.
위의 그림과 같이 JS_Engine(Spider Monkey)은 하나의 Runtime위에 다수의 Context를 생성한 뒤 

Context에서 Script를 처리하여 Runtime안에 Object를 생성한다.