ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js 구동방식 (1)
    Node.js 2016. 5. 29. 14:06




    Node.js 에 관한 설명은 수도 없이 많으니 간단하게 구동 방식만 알아보도록 하자.


    노드는 플랫폼에서 비차단 연산을 지원하기 위해 자바스크립트의 사건 구동 특질을 이용한다.

    자바스크립트는 이벤트 구동 언어이며, 이는 특정 이벤트에 코드를 등록한 다음에 이벤트가 발생하면 

    해당 코드가 실행 될 것임을 의미한다.


    이런 개념은 나머지 프로그램의 실행을 차단하지 않고 비동기식 코드를 자연스럽게 실행하게 만든다.

    이를 이해하기 위해 예제를 보자.

    다음 Java 코드를 보자.


      <script type="text/javascript">
        System.out.print("First");
        String test = System.console().readLine();
        System.out.print("Second" + test);
      </script>
    


    위를 보면 1행과 2행을 실행한 후에 사용자가 입력하기 전까지는 3행을 실행하지 않는다.

    이는 I/O 연산이 프로그램 나머지 동작을 차단하는 동기식 프로그래밍 기법이다.

    but 자바스크립트는 이렇게 동작하지 않는다.


    다음 Html 을 보자.

      <script type="text/javascript">
       First Test 
       
       
    
      
      </script>
    


    간단한 텍스트 입력 후 alert 창으로 그메시지를 보여주는 예제이다.

    여기서 살펴볼 핵심 함수는 addEventListener() 메소드다. 

    보이듯이 인수를 2개 받는데 이벤트 이름과 이벤트를 전송하고 나면 실행 될 익명함수, 즉 콜백 함수이다.

    addEventListener() 메소드 뒤에 나오는 나머지 코드들은 콜백 함수 구현에 무관하게 실행된다.


    브라우저는 단일 스레드 이므로, 이 예제에서 동기식 프로그램을 사용할 경우에는 페이지에 있는 모든 것을 

    멈추게 만들어, 모든 웹 페이지가 엄청나게 느리게 반응하도록 만들고 , 일반적인 웹 경험을 악화시킬 것 이다.


    다행히 이렇게 동작하지 않고 , 브라우저는 단일 스레드를 관리해 전체 자바스크립트 코드를 내부 루프 , 

    흔히 이벤트 루프라고 부르는 곳에서 수행한다.








    이벤트 루프는 단일 스레드 루프로 브라우저가 무한 실행한다.

    이벤트가 전송 될 때마다 , 브라우저는 이를 이벤트 큐에 추가한다.

    그러면 루프가 큐에서 다음 이벤트를 가져오고, 처리기를 수행하고 다음 이벤트를 가져오고 , 이를 반복한다.

    브라우저는 일반적으로 사용자가 생성한 이벤트를 처리하는 반면 , 노드는 다양한 곳에서 생성된 다양한 이벤트 

    유형을 처리해야만 한다. 


    (2) 에서는 간단하게 동기식과 비동기식 웹서버의 차이를 알아보며 노드에서 가장 중요한 디자인 패턴인 

    클로저 에 대하여 알아보자.


    (1) 끝. 



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

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

    댓글