(21.11.04) Node.js 요약
작은 지식이라도, 하루에 하나씩.
한 줄 요약
🦄본문 자체가 요약입니다!🦄
본문
Node.js란?
1. 웹 서버란 요청을 처리하고 적절한 결과를 보내주는 프로그램
2. Node.js는 서버나 프레임워크가 아니라, 자바스크립트의 런타임이다. 쉽게 말해서 웹 브라우저 밖에서 자바스크립트 코드를 실행 할 수 있도록 (특히 서버에서) 도와주는 환경이다.
3. Node.js를 사용하면 좋은 서비스
- 제작할 앱이 리얼타임일 경우
- 커스터마이징이 많이 필요한 경우
- 자바스크립트 API를 사용해야할 경우
- 빠른 실행과 성능이 중요한 경우
4. Node.js의 특징은, 비동기 방식을 이용한다는 것이다. 한 번에 하나씩 순차적으로 일을 해나가는 동기적 방식과는 다르게, 비동기적 방식은 한번에 여러 일을 시작하고 진행한다. 또한, 다른 작업의 유무와 관계 없이 일을 수행 할 수 있게 하는 논블로킹 방식을 채택하여, 결국 논블로킹/비동기 (NonBlocking-Async) 방식이 되는데, 이 덕분에 실행 속도가 엄청나게 빠르다.
5. 싱글 스레드인 Node.js가 속도감 있는 논블로킹/비동기 방식을 이용할 수 있는 것은 "이벤트 루프"에 있는데, Node.js는 작업을 수행하고 응답을 기다리는 대신, 작업이 종료되면 이벤트를 발생시키고 콜백 큐에 등록합니다. 이벤트 큐는 콜 스택이라는 함수의 호출을 기록하는 저장소를 계속 감시하는데, 콜 스택이 비게 되면 콜백 큐의 작업을 콜 스택으로 밀어넣습니다.
따라서, Node.js는 아래와 같이 동작하며, 이 방식이 효율적이기 때문에 빠른 속도를 가질 수 있습니다.\
Node.js 동작 방식
- 감시자인 "이벤트 루프"가 어떤 이벤트가 있는지 계속 감시하고 있다가, 이벤트가 감지되는 순간 그 작업을 위해 작업 스레드를 생성합니다.
- 작업 스레드는 일종의 작업 공간으로, 여기서 작업이 수행됩니다. 이 시점에서 이벤트 루프는 처리 작업을 작업 스레드에 맡기고 다시 다른 이벤트가 없나 감시하기 시작합니다.
- 작업 스레드는 작업을 위임 받을 때, 콜백 함수라는 것을 받습니다. 콜백 함수는 작업이 끝나면 실행하는 함수입니다.
- 작업 스레드가 작업을 마치게 되면, 콜백 함수를 실행하고 싶다고 이벤트 루프에게 응답을 보냅니다.
- 응답을 받는 이벤트 루프는 콜백함수의 결과를 클라이언트에 전송하여 우리가 볼 수 있는 결과로 바꿔줍니다.
만약에 Node.js가 블로킹/동기(Blocking-Sync) 방식으로 사용된다면, 어떤 작업에 대한 완료 응답이 올 때까지 기다리면서 자원을 낭비할 것입니다.