ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js 구동방식 (2)
    Node.js 2016. 5. 30. 10:19




    (1)에 이어서 바로 예제 시작 


    PHP 를 예로 보자 

      <script type="text/javascript">
         $output = mysql_query('SELECT * FROM TESTS');
          echo($output);
      </script>
    


    SELECT 문을 수행하기 위해 데이터베이스에 질의를 시도 하는데, SELECT * FROM TESTS 의 질의 결과가 나오기 

    전 까지 어떠한 연산도 차단하게 된다.

    이는 결국 스레드가 다른 프로세스를 기다리며 농땡이 친다는 것을 의미한다. (일해라 핫산!)


    이런 문제 해결을 위해 많은 웹 플랫폼이 일반적으로 연결 당 단일 스레드를 사용하는 Thread pool 시스템을 

    구현해왔다. 


    (스레드 풀에서 스레드들이 대기를 하며 즐거워 하는 모습이다.(?))


    이런 멀티스레드 유형이 처음에는 직관적이지만 장점만 있을수는 없는 법, 당연히 단점이 존재한다.

    스래드 관리가 복잡해 지고 위에서 언급한 것 처럼 놀고 있는 스레드가 시스템 자원을 낭비하고 

    확장이 쉽지가 않다는 점이다.


    다음은 차단형 웹 서버인 apache 와 비 차단형 웹 서버인 nginx의 동시 요청 처리 능력 비교 그래프이다.

    (출처 : blog.webfaction.com)




    보다시피 apache 의 요청 처리능력이 nginx의 요청처리 능력보다 훨씬 빨리 감소한다는 사실을 볼 수 있다.


    이번엔 메모리 할당에 관한 그래프이다.

    이걸 보면 이벤트 구동 아키텍처는 웹 어플리케이션을 구축하는 과정에서 자바스크립트의 바동기 동작 방식을

    지렛대로 삼아 서버의 부하를 엄청나게 줄일 것 이다.

    자바스크립트가 이를 가능케 하는 방법은  Closer 라는 독특한 디자인 패턴 때문이다. 


    클로저(Closure) 에 대하여


    (2) 끝

    (3) 에서는 Node.js의 핵심 표준인 CommonJS 에 대하여 알아보자. 







    'Node.js' 카테고리의 다른 글

    Node.js 구동방식 (3)  (1) 2016.06.01
    Node.js 구동방식 (1)  (0) 2016.05.29

    댓글