Node.js란?
Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 논블로킹(Non-blocking) I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.
자, 이를 쉽게 이해하기 위해 그림으로 살펴보자!
Node.js의 등장 배경
Node.js vs Browser
Node.js로 할 수 있는 것들
Node.js의 특징
싱글 쓰레드 - 비동기 - 이벤트 기반 👌
쓰레드란?
명령을 실행하는 단위
한 개의 쓰레드는 한 번에 한 가지 동작만 실행 가능
장점 - 쓰레드가 늘어나지 않기 때문에 리소스 관리에 효율적
단점 - 쓰레드 기반의 작업들의 효율이 떨어짐 ex) CPU 연산 작업
⇒ Node.js는 비동기 동작을 활용하여 쓰레드 기반의 작업을 최소화!
비동기 동작의 완료를 처리하는 방법
비동기 방식은 특정 동작을 실행한 후, 해당 동작을 전혀 신경 쓰지 않음.
대신, 해당 동작이 완료될 경우 실행할 함수를 미리 등록.(=이벤트를 등록)
비동기 동작이 완료 되면 미리 등록된 함수(=이벤트)를 실행.
이벤트 루프(Event loop)란?
이벤트를 처리하는 반복되는 동작
즉, Node.js가 비동기-이벤트 동작을 처리하는 일련의 반복 동작을 일컫음.
💥이벤트 루프에 대한 이해 = 비동기 코딩에 대한 이해도 증가이벤트 루프의 구성요소
콜스택 동작 순서
메시지큐 동작 순서
잡큐의 동작 순서
💥 잡큐 - Promise는 상위함수(그림 B)가 종료되기 전에 실행
모듈(Module System)
- 각 소스 코드를 독립적인 객체(모듈)로 묶어서 관리하는 방식
- 각 소스 코드 간 scope 간섭을 없애고 각자의 소스 코드가 독립적인 scope를 갖도록 해줌
- 용도/책임/역할 등에 따라 코드를 분리하여 관리 가능
module.exports = adder; // const a = require('./adder'); module.exports = { adder, } // const { adder } = require('./adder');
*두 가지 모듈 방식
ES6 - CJS(Common JavaScript)
*import vs require
JSON 데이터 처리하기
- JSON.parse(JSON 형식의 문자열)
: JSON 형식의 텍스트를 자바스크립트 객체로 변환- JSON.stringify(JSON 형식의 문자열로 변환할 값)
: 자바스크립트 객체를 JSON 텍스트로 변환
require를 통해 json 파일 가져오기
- json 파일을 require를 통해 가져온 경우, 자동으로 js객체로 파싱
// sample.json { "name": "Someone else", "lastName": "Kim", } // testSample.js const sample = require('./sample.json'); console.log(sample); // 결과 // { name: "Someone else", lastName: "Kim" }
대표적인 API
출처 - [엘리스 강의 자료]