[엘리스 SW트랙 4기] 5주차 - Day 21 : Node.js

랸나·2023년 3월 27일
0
post-thumbnail

1. Node.js 이해

등장 배경

  • Web의 발전에 의해서 발생.

  • WEB 1.0 > WEB 2.0 > 크롬을 위한 V8엔진 등장 > 고성능 JAVASCRIPT 실행 가능 > 브라우저 외부에서 자바스크립트를 활용해보자! > Node js 탄생

  • Browser의 JS vs Node.js

    Browser의 JSNode.js
    브라우저에서 실행크로스 플랫폼 실행
    웹 내부 제한된 동작제한 없는 동작
    웹 프론트 개발자의 언어다양한 어플리케이션 개발

2. Node.js의 특징

Node.js 특징 한줄 요약 :

싱글쓰레드 - 비동기 - 이벤트 기반

  • 싱글쓰레드 : 쓰레드란, 명령을 실행하는 단위. 한개의 쓰레드는 한 번에 한 가지 동작만 실행 가능

  • 싱글쓰레드의 장/단점

    장점단점
    쓰레드가 늘어나지 않기 때문에 리소스 관리에 효율적쓰레드 기반의 작업들의 효율이 떨어짐 Ex) CPU 연산 작업

    따라서 node.js는 비동기 작업을 활용하여 쓰레드 작업 최소화함.

  • 출처 : 엘리스 SW 엔지니어 트랙

이벤트 기반이란?

  • 비동기 동작의 완료를 처리하는 방법
  • 비동기 방식은 특정 동작을 실행한 후, 해당 동작을 전혀 신경쓰지 않음.
  • 대신 해당 동작이 완료될 경우 실행할 함수를 미리 등록함.
  • 비동기 동작이 완료가 되면 미리 등록된 함수를 실행.

싱글쓰레드 이기 때문에 비동기 동작 필요, 비동기 동작을 구현하기 위해 이벤트 기반

3. Node.js 시작하기

  • LTS (Long-Term Support 버전) 설치하기.

4. ES6

  • ECMAScript
  • let, const
  • Arrow Function
  • class
  • destructing (구조분해할당)

5. 비동기 코딩

  • Callback / Promise / Async - Await

Callback

- db.getUsers((err, users) => {
  	console.log(users);
});
  • 비동기동작 수행
  • 이벤트 등록 /실행 (쿼리가 완료되면 오류가 있는지, 혹은 유저목록의 결과로 미리 등록된 callback함수를 실행)
  • 참고 - callback 표준 (에러와 결과를 같이 전달하는 것이 표준.)

Promise

db.getUsersPromise()
  .then((users) => {
	return promise1(users);
	})
  .then(r1 => promise2(r1))
  .catch(.....);
  • 프로미스 함수는 동작이 완료되면 then에 등록된 callback실행
  • 오류 발생하면 catch에 등록된 callback실행
  • Chaining 을 사용해 코드를 간결하게
  • Short-hand 표현 방법으로 더욱 간결하게
    • Return 생략 가능
    • 인자가 하나인 경우는 ()생략 가능.

Async / Await

async function doSomething(() => {
	const r1 = await promise1();
  	const r2 = await promise2(r1);
  	const r3 = await promise(r1,r2);
  	...
    return r3;
	});

doSomething().then(r3 => {
	console.log(r3)
	});
  • async함수 내에서 promise함수의 결과는 await으로 받음.
  • awiat한 promise함수가 완료될 떄까지 다음 라인으로 넘어가지 않음.
  • 순차적 프로그래밍처럼 작성 가능
  • async함수의 return은 Promise

  • 출처 : 엘리스 SW 엔지니어트랙

  • 출처 : 엘리스 SW 엔지니어트랙
  • promise1과 promise2는 각 1초,2초 소요되는 비동기 함수.
  • sync예제는 3초 소요 / parallel 예제에서는 2초의 시간 소요
  • Promise.all은 함수를 동시에 실행시키고 등록된 모든 함수가 마무리되면 결과값을 한꺼번에 반환.

6. 이벤트 루프

이벤트 루프

  • 이벤트를 처리하는 반복되는 동작

  • 브라우저와 Node.js의 작동 방식은 큰 차이가 없음.

  • Call stack(LIFO)

  • Message Queue(setTimteout과 같은 자연실행 함수를 등록하는 FIFO큐, 콜스택이 비어있을 경우 등록된 함수를 콜스택에 추가)

  • 출처 : 엘리스 SW 엔지니어트랙
  • Job Queue( Promise에 등록된 콜백을 등록하는 FIFO큐, 상위 함수가 종료되기 전에 콜스택이 비어있지 않더라도 잡큐에 등록된 콜백을 콜스택에 추가)
    업로드중..
  • 출처 : 엘리스 SW 엔지니어트랙
setTimeoutPromise
콜스택이 비어있을 때 실행상위함수가 종료되기 전에 실행됨
profile
백엔드개발자

0개의 댓글