Elice SW engineer - TIL day 22

Circlewee·2022년 5월 3일
0

Elice SW 2 TIL

목록 보기
19/31

1. Node.js

1.1 Node.js의 등장 배경

  1. 단방향 통신 위주였던 WEB 1.0과 달리 WEB 2.0에서는 사용자와 상호작용이 늘었고 그 결과 고성능의 JS가 필요해 V8엔진이 등장하게 되었다.
  2. 오픈 소스 프로젝트였던 V8을 이용해 JS를 어느 환경에서나 실행할 수 있게 해주는 Node.js가 개발되었다.

1.2 Node.js의 특징

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

  • 싱글쓰레드는 한번에 하나의 작업밖에 수행하지 못하지만 리소스 관리에 효율적이다.
    Node.js는 비동기 동작으로 쓰레드 기반의 작업을 최소화한다
  • 이벤트는 비동기 동작의 완료를 처리하는 방법으로 비동기 동작이 완료되면 함수를 큐에 등록해 뒀다가 나중에 실행하는 방식

1.3 ES6

  • ECMAScript 6버전 이후를 통틀어 부르는 이름
  • 현대적인 문법이 많이 추가되었으며 이는 생산성 향상에 도움을 준다.
  • 많이 사용하는 문법
    1. let, const
    2. templete string
    3. arrow function
    4. class
    5. destructing

1.4 비동기 코딩

  • callback, Promise, async-await의 방법을 이용해 비동기를 구현할 수 있다.
  • 각각의 방법마다 장단점이 있기 때문에 상황에 따라서 유연하게 사용할 수 있어야한다.
const promiseFunc = () => {
  const [result1, result2] = await Promise.all([promise1(), promise2()])
  console.log(result1, result2);
}

const asyncFunc = async () => {
  const result1 = await promise1();
  const result2 = await promise2();
  console.log(result1, result2);
}
  • promise1의 실행 시간이 1초, promise2가 2초 소요되는 함수라고 가정하면 promiseFunc()는 실행시간이 2초지만 asyncFunc()는 3초의 시간이 소요된다.

1.5 이벤트 루프

1.5.1 구성요소

  1. Call Stack: 작성된 함수들이 등록되는 LIFO 스택. 이벤트 루프는 콜스택이 비어있을 때까지 스택의 함수를 실행
  2. Message Queue: setTimeout같은 지연실행 함수를 등록하는 FIFO 큐. 정해진 시간이 끝나고 콜스택이 비어있을 경우 등록된 함수를 콜스택에 추가
  3. Job Queue: Promise에 등록된 콜백을 동록하는 FIFO 큐. 상위 함수가 종료되기 전에 콜스택이 비어있지 않더라도 잡큐에 등록된 콜백을 콜스택에 추가
function a() {
  function b() {
  	setTimeout(() => {
  		console.log('b');
  	}, 0)
    
    promiseFunc().then(c => console.log(c));
    
    console.log('d');
  }
  b();
  console.log('a');
}
// d -> c -> a -> b
  1. d: 앞의 비동기 처리로 인해 제일 먼저 실행된다.
  2. c: setTimeout의 timeout이 0이어도 메시지 큐에 등록되고 잡 큐는 상위 함수가 종료되기 전에 콜스택에 추가되기 때문에 실행됨
  3. a: b함수의 실행이 끝났기 때문에 실행
  4. b: 콜스택이 비었기 때문에 메시지 큐에서 콜백 함수를 가져와서 실행
profile
공부할 게 너무 많아요

0개의 댓글

관련 채용 정보