Notice
Recent Posts
Recent Comments
초코레
[Node.js] 노드에 대하여 본문
Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.
- 노드 공식 사이트
노드는 자바스크립트 애플리케이션이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있다.
자바스크립트 런타임
- 런타임 : 특정 언어로 만든 프로그램을 실행할 수 있는 환경
- 노드는 오픈소스 자바스크립트 엔진인 V8과 비동기 I/O libuv 라이브러리를 사용한다.
- libuv 라이브러리는 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현하고 있다.
이벤트 기반(event-driven)
- 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
- 특정 이벤트가 발생할 때 무엇을 할지 미리 등록한다 = 이벤트 리스너에 콜백 함수를 등록한다
- 노드는 이벤트 기반 방식으로 동작하므로 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함수를 호출한다.
논블로킹 I/O
- 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 태스트 큐를 거쳐 호출 스택으로 올라오기를 기다리는 방식
- 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것
- 같은 작업을 더 짧은 시간 동안 처리할 수 있다.
- 노드는 싱글 스레드라는 한계로 I/O 작업을 할 때 논블로킹 방식으로 동작한다.
싱글 스레드
- 노드는 싱글 스레드이므로 논블로킹이 중요하다.
- 싱글 스레드는 한 번에 한 가지 일밖에 처리하지 못하므로 어떠한 작업에서 블로킹이 발생하면 다음 일을 처리하지 못한다.
- 노드는 프로세스 자체를 복사해 사용해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 사용한다.
- 이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정한다. 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 불린다.
- 태스크 큐 : 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간. 콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐라고도 부른다.
- 백그라운드 : 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳
- 프로세스 : 운영체제에서 할당하는 작업의 단위. 노드나 브라우저와 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
- 스레드 : 프로세스 내에서 실행되는 흐름의 단위. 하나의 프로세스는 스레드를 여러 개 가질 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 즉, 같은 메모리에 접근할 수 있다.
'Backend > Node.js' 카테고리의 다른 글
[Node.js] ES2015(ES6) 이상의 자바스크립트 문법 (0) | 2019.06.06 |
---|