노드를 통해 다양한 자바스크립트 어플리케이션을 실행할 수 있지만, 노드는 서버 어플리케이션을 싱행하는데 제일 많이 사용된다.
서버는 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말함.
노드는 자바스크립트 런타임이다. 런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻함.
이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다. 이벤트로 클릭이나 네트워크 요청등이 있을 수 있다.
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 한다. 이것을 이벤트 리스터에 콜백 함수를 등록한다고 표현한다.
ex) 버튼을 누르면 경고창을 띄운다. -> 클릭 이벤트 리스너에 경고 창을 띄우는 콜백 함수를 등록한다.
노드도 이벤트 기반 방식으로 동작하므로 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함수를 호출한다.
이벤트 기반 모델에서는 이벤트 루프라는 개념이 등장함. 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단한다.
논블로킹이란 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함을 뜻함.
자바스크립트는 싱글 스레드기에 모든 코드가 시간적으로 이득을 볼 수 있는 것은 아니다. 현재 노드 프로세스 외의 다른 컴퓨팅 자원을 사용할 수 있는 I/O 작업이 주로 시간적 이득을 많이 본다.
I/O는 입력/출력을 의미함.
자바스크립트와 노드에서 논블로킹이 중요한 이유는 바로 싱글 스레드이기 때문. 한 번에 한 가지 일밖에 처리하지 못하므로 어떠한 작업에서 블로킹이 발생하면 다음 일을 처리하지 못함.
노드도 싱글 스레드를 여러 개를 사용해 멀티 스레딩과 비슷한 기능을 하게 할 수 있다. 하지만 엄밀히 말하면 멀티 스레딩이라기보다는 멀티 프로세싱에 가까움.
운영체제에서 할당하는 작업의 단위이다. 노드나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
프로세스 내에서 실행되는 흐름의 단위이다. 하나의 프로세스는 스레드를 여러 개 가질 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 즉, 같은 메모리에 접근할 수 있다.