[Node.js] 입문

미누·2023년 3월 27일
0

Node.js

목록 보기
2/2

Node.js

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

출처 - [엘리스 강의 자료]

profile
Dev Notes, with bit of JS?

0개의 댓글