Node.js의 이해
노드는 js 런타임.
전반적으로 노드로 서버를 실행하는 방법 다룸.
- 서버
노드는 서버 애플리케이션 실행에 제일 많이 사용.
서버는 네트워크 통해 클라이언트에 정보 제공하는 프로그램.
클라이언트 --요청--> 서버
클라이언트 <--응답-- 서버
노드는 js 프로그램이 서버로서 기능하기 위한 도구를 제공.
왜 노드? -> 노드의 특성 알아야 함.
- js 런타임
런타임이란 특정 언어로 만든 프로그램들을 실행할 수 있는 환경
== 프로그래밍 언어가 구동되는 환경
== 프로그램이 실행되고 있을 때 존재하는 곳
쉽게 말해 노드는 js 실행기로 봐도 무방.
기존에는 js프로그램을 웹 브라우저 에서만 실행할 수 있었음.
브라우저는 js 런타임을 내장하고 있으므로 js 코드 실행 가능.
브라우저 외의 환경에서 사용하기 위해 노드 사용
노드는 V8, libuv 라이브러리 사용
libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있음
- 이벤트 기반
이벤트(클릭, 네트워크 요청 등) 발생 시 미리 지정해둔 작업 수행
특정 이벤트 발생 시 무엇을 할 지 미리 등록해두어야 함. == 이벤트 리스너에 콜백 함수를 등록
ex) 클릭 이벤트 리스너에 경고창 띄우는 콜백 함수 등록해두면 콜백 함수 실행되어 경고창 뜸
- 이벤트 루프: 이벤트 발생 시 호출할 콜백 함수들 관리하고 실행 순서 결정. 노드 종료까지 작업 반복하므로 loop.
- 백그라운드: setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳. js 아닌 다른 언어로 작성된 프로그램.
- 태스크 큐: 이벤트 발생 후, 백그라운드에서 테스크 이벤트 리스너의 콜백 함수 보냄. 정해진 순서대로 줄 서있으므로 콜백 큐라고도 부름.
- 논 블로킹 I/O
I/O는 입출력(input, output)을 의미
파일 접근이나 네트워크 요청 등이 I/O의 일종.
이러한 작업을 할 때 노드는 논 블로킹 방식으로 처리하는 방법을 제공.
블로킹: 이전 작업 끝나야만 다음 작업 수행.
논 블로킹: 이전 작업이 완료될 때까지 기다리지 안고 다음 작업을 수행함. 더 짧은 시간에 처리할 수 있지만 모두 동시에 처리가능한 작업 전제.
배치 순서에 따라 성능 크게 달라짐. 따라서 논 블로킹 방식으로 코딩하지 않으면 의미 퇴색됨.
// 블로킹 방식의 코드
function longRunningTask() {
// 오래 걸리는 작업
console.log('작업 끝');
}
console.log('시작');
longRunningTask();
console.log('다음 작업');
// setTimeout 사용해 코드를 논 블로킹 방식으로
function longRunningTask() {
// 오래 걸리는 작업
console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');
setTimeout(콜백, 0)은 코드 논 블로킹으로 만드는 기법중 하나.
ㄴ 사실 노드에서는 다른 방법 주로 사용하긴 함
ㄴ 3.4.3절의 setImmediate 참조
이벤트 루프 이해했다면 setTimeout의 콜백 함수(longRunning)가 태스크큐로 보내지므로 순서대로 실행되지 않음.
-
논 블로킹과 동시가 같은 의미가 아님
동시성은 동시 처리 가능한 작업을 논 블로킹 처리해야 얻을 수 있다. -
싱글 스레드
-
프로세스
프로세스는 운영체제에서 할당하는 작업의 단위.
노드나 웹 브라우저는 개별 프로세스. 프로세스 간에는 메모리 등 공유x -
스레드
스레드는 프로세스 내에서 실행되는 흐름의 단위
스레드는 부모 프로세스의 자원(데이터) 공유
노드가 싱글 스레드라는 말은? 엄밀히 말하면 스레드 1개 아님
노드 실행 시 먼저 프로세스 하나 생성됨
프로세스에서 여러개 스레드 생성하는데 사용자가 하나만 직접 제어 가능
그래서 싱글 스레드라고 여겨짐. -
-
서버로서의 노드
노드는 싱글 스레드, 논 블로킹 모델을 사용하므로 노드 서버도 동일한 모델.
서버에는 I/O요청이 많이 발생
노드는 libuv 라이브러리 사용해 I/O작업을 논 블로킹 방식으로 처리
따라서 스레드 하나가 많은 수의 I/O를 혼자 감당 할 수 있다
but 노드는 cpu부하가 큰 작업에는 적합x. 작성한 코드가 모두 한 스레드에서 처리되기 때문
이러한 특성 => 개수 많지만 크기는 작은 데이터 주고받는데 적합
노드의 큰 장점은 언어로 js를 사용한다는 것
웹 브라우저도 js 사용하므로 한 언어로 웹 사이트 개발 할 수 있음
Author And Source
이 문제에 관하여(Node.js의 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bluesun147/Node.js저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)