이 문서는 추후 내용이 추가될 예정입니다.
node.js라는 이름에서 알 수 있듯이 node는 javascript와 연관된 언어입니다.
node.js 공식 페이지를 한 번 살펴봅시다.
Node.js는 Chrome V8 Javascipt 엔진으로 빌드된 Javasciprt 런타임입니다.
이런 문구가 설명으로 적혀있는 걸 볼 수 있습니다.
이 문구를 이해하려면 런타임이 무엇인지 알아야 합니다.
런타임은 프로그램이 실행되고 있는 때를 말합니다.
즉, 컴퓨터 내에서 프로그램이 기동되면, 그것이 바로 그 프로그램의 런타임입니다.
결론부터 말하자면 런타임은 프로그래밍 언어가 구동되는 곳을 뜻합니다.
즉, Node.js는 자바스크립트가 구동되는 환경이라는 뜻이죠.
원래 자바스크립트는 웹브라우저에서만 동작이 가능했었는데
Node.js의 탄생으로 그 동작 영역이 확장되었다고 이해할 수 있겠습니다.
유저가 서버에 요청을 할 시에만 작업을 수행합니다.
웹사이트에 방문자도 없고 호출요청도 없는데 서버를 계속 굴리고 있으면 자원이 낭비되는 경향이 있겠죠.
하지만 Node.js는 이벤트리스너를 통해 이벤트가 발생할 시에만 작동합니다.
아래 예시 코드를 봅시다.
request와 response가 있습니다.
이 코드는 request가 들어와야지만(listen())
reponse를 내놓습니다.
const http = require('http');
const testServer = http.createserver((request, response) => {
response.writeHead(200);
response.end('hello node');
});
testServer.listen(3000);
싱글 스레드는 node js라기 보다는 javascript의 특징이라고 볼 수 있는데,
동시에 여러가지 작업을 수행하지 못하고 한 번에 하나씩 처리하는 방식을 일컫습니다.
양치질하면서 세탁기 돌리면서 설거지하고 등등의 일들을 동시에 한다면 멀티스레드,
양치질 끝내고 세탁기 돌리고, 세탁 끝나면 설거지하고.... 이렇게 차례대로 일을 처리하는 것이 싱글스레드인 셈이죠.
싱글스레드는 일을 정해진 순서대로 해야 하기 때문에 시간이 오래 걸릴 수 있습니다.
양치질은 얼마 안걸리니 금방 끝나겠지만, 세탁기를 작동시키고 세탁이 끝날때까지 아무것도 못하고 기다려야하기 때문이죠.
하지만 논 블로킹 방식의 싱글스레드라면 얘기가 달라집니다. 논 블로킹이란 무엇일까요?
논 블로킹은 이름 그대로 작업에 있어 막힘이 없습니다.
선 작업이 마무리될때까지 기다리지 않아도 되기 때문입니다.
(여기서 I/O란, file system, network 의 Input / Output)
function countToTen(){
console.log('10초 뒤 실행됨');
}
console.log('처음 실행됨');
setTimeout(countToTen(), 10000);
console.log('마지막에 실행됨');
위 코드를 보면,
순서로 콘솔에 찍힐 것 같지만,
'10초 뒤에 실행됨'은 결과값을 내놓는데 오래 걸리기 때문에 우선순위가 밀리고,
그 다음 작업을 우선시 함으로써 막힘 없이 코드가 처리됩니다.
이 설명을 뒷받침하기 위해서는
javascript의 이벤트 루프(호출스택, 태스크큐)에 대한 설명이 필요한데,
이벤트 루프는 다음 포스트에서 다뤄보도록 하겠습니다.
출처
(1) http://www.terms.co.kr/runtime.htm
Node. js / 라우터 분기 처리 / 쿠키 수집 part 2 (0) | 2020.07.21 |
---|---|
Node.js / 라우터 분기 처리 / 쿠키 수집 (0) | 2020.07.20 |
Node.js / crypto module(단방향 암호화) / 해시 생성 (0) | 2020.07.17 |
모듈 사용해보기 / Javascript / Node.js (0) | 2020.07.15 |
Node.js 설치와 기본 실행법 (MacOS) (1) | 2020.06.30 |
댓글 영역