Node_1 정보

매듭이란 무엇입니까?

  • JavaScript 엔진으로 구축된 JavaScript 런타임 환경
  • Node에서 다양한 JavaScript 응용 프로그램을 실행할 수 있지만 Node는 서버 응용 프로그램을 실행하는 데 가장 일반적으로 사용됩니다.

  • 노드는 JavaScript 프로그램이 서버 역할을 할 수 있는 도구를 제공하기 때문에 서버 역할을 할 수 있습니다.

    • 서버란 무엇입니까?
      • 네트워크를 통해 클라이언트에게 정보 또는 서비스를 제공하는 컴퓨터 또는 프로그램
      • 클라이언트는 요청을 보내는 주체입니다.

        이것은 브라우저, 데스크톱 프로그램, 모바일 장치 또는 다른 서버에 요청을 보내는 서버일 수 있습니다.

      • 요청 수신 및 응답 => 서버, 응답이 반드시 예일 필요는 없지만 아니오일 수 있습니다.

      • 요청을 받을 뿐만 아니라 요청을 보내기도 합니다.


        => 이때 요청을 보낸 서버 = 클라이언트 역할
    • 지속 ?
      • 특정 언어로 작성된 프로그램이 실행될 수 있는 환경.
      • 노드는 컴퓨터에서 JavaScript 프로그램을 실행할 수 있습니다.

      • 노드를 JavaScript 실행자로 생각할 수 있습니다.

  • 노드는 V8과 함께 libuv라는 라이브러리를 사용합니다.

    V8과 libuv는 C와 C++로 구현되어 있고, 코딩된 자바스크립트 코드는 Node에 의해 V8과 libuv에 자동으로 연결되기 때문에 Node를 사용할 때 C와 C++를 몰라도 괜찮습니다.

    • V8 ?
      • 웹 브라우저 구축을 위한 기반을 형성하는 오픈 소스 JavaScript 엔진입니다.

      • libuv?
      • 노드에 대해 구현합니다.

이벤트 기반

  • 이벤트 기반
    • 이벤트 발생 시 미리 정의된 동작을 수행하는 방법
    • 이벤트에는 클릭 또는 네트워크 요청이 포함될 수 있습니다.

    • 이벤트 기반 시스템에서는 특정 이벤트가 발생했을 때 어떻게 해야 하는지 미리 등록해 두어야 합니다 => 이벤트 리스너에 콜백 함수를 등록합니다.

    • 노드는 또한 이벤트를 기반으로 작동합니다.

    • 이벤트가 발생하면 이벤트 리스너에 등록된 콜백 함수가 호출되어 이벤트가 발생하지 않았거나 발생한 이벤트를 모두 처리했다면 다음 이벤트가 발생할 때까지 기다립니다.

      • 여러 이벤트가 동시에 발생할 때 콜백 함수가 호출되는 순서 이벤트 루프심사 위원
      • 노드는 JavaScript 코드를 위에서 한 줄씩 실행하고 함수 호출을 찾으면 호출된 함수를 호출 스택으로 푸시합니다.

function first() {
    second();
    console.log('첫 번째');
}

function second() {
    third();
    console.log('두 번째');
}

function third() {
    console.log('세 번째');
}
first(); 
/* 
	세번째 => 두번째 => 첫번째 순서대로 찍힌다 
	anonymous 함수는 처음 실행 시의 전역 콘텍스트(global context)를 의미 
	콘텍스트는 함수가 호출되었을 때 생성되는 환경을 의미하며, 
	자바스크립트 코드는 실행 시 기본적으로 전역 콘텍스트 안에서 돌아간다.

함수는 실행되는 동안 호출 스택에 머물러 있다가 실행이 완료되면 호출 스택에서 지워진다.

호출스택 anonymous => first() => second() => third() 순서대로 쌓이고 third() => second() => first() => anonymous 순서대로 실행된다.

anonymous 콘텍스트까지 실행이 모두 완료되었다면 호출스택은 비게된다.

*/ function run() { console.log('3초 후 실행'); } console.log('시작'); setTimeout(run, 3000); console.log('끝'); /* 시작 => 끝 => 3초후 실행 호출스택으로 설명하긴 힘들다.

setTimeout 함수의 콜백인 run이 호출 스택에 언제 들어가는지 알기 어렵기 때문.. 파악하려면 이벤트 루프, 태스크 큐(task queue), 백그라운드(background) 를 알아야 한다.

*/
  • 이벤트 루프: 이벤트 발생 시 호출되는 콜백 함수를 관리하며, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 합니다.

    노드가 종료될 때까지 이벤트 처리 작업을 반복하기 때문에 루프라고 합니다.

  • 배경: setTimeout 및 이벤트 리스너와 같은 타이머가 대기하는 곳입니다.

    동시에 여러 작업을 수행할 수 있는 JavaScript 이외의 언어로 작성된 프로그램이라고 해도 과언이 아닙니다.

  • 태스크 큐: 이벤트 발생 후 타이머 또는 이벤트 리스너 콜백 함수가 백그라운드에서 태스크 큐로 전송됩니다.

    콜백 대기열은 고정된 순서로 배열되기 때문에 콜백 대기열이라고도 합니다.

    콜백은 일반적으로 실행되는 순서대로 정렬되지만 경우에 따라 순서가 뒤바뀔 수 있습니다.




호출 스택에 함수가 너무 많으면 3초가 지나도 실행 함수가 실행되지 않을 수 있습니다.

이는 이벤트 루프가 호출 스택이 비어 있을 때만 작업 대기열에서 호출 스택으로 실행 함수를 가져오기 때문입니다.