엘리스 22일차 화요일 온라인강의 비동기+node.js

치즈말랑이·2022년 5월 3일
0

엘리스

목록 보기
23/47
post-thumbnail

setTimeout에서 딜레이 시간 0일때는 실행중인 스크립처리가 종료된 이후 setTimeout의 콜백함수가 실행된다.
참고 : https://benfatto.tistory.com/34
https://velog.io/@edie_ko/javascript-eventloop

01

Node.js 개념

원래 자바스크립트는 웹상에서만 사용가능한 언어였다.
WEB 1.0은 단방향 통신 위주, WEB2.0은 사용자와 상호작용이 가능했는데 고성능의 자바스크립트가 필요했고, V8엔진이 등장했다.
이걸 브라우저 외부에서 사용하고자 하는 움직임이 있었고, 그렇게 Node.js가 탄생했다.
즉, Node.js는 자바스크립트를 어느 환경에서나 실행할 수 있게 해주는 실행기이다.

특징:
1. 크로스 플랫폼 실행 가능 (브라우저 외)
2. 제한 없는 동작 (웹 내부에 국한x)
3. 다양한 어플리케이션 개발 (프론트 개발뿐만아니라 백엔드와 같은 다양한 목적)

Node.js 특징

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

스레드
명령을 실행하는 단위, 한개의 스레드는 한번에 한가지 동작만 실행 가능

싱글스레드
장점: 스레드가 늘어나지 않아서 리소스 관리에 효율적
단점: 스레드 기반 작업의 효율이 낮음 ex) cpu 연산 작업

-> Node.js는 비동기 동작으로 스레드 기반의 작업을 최소화 한다.

비동기
동작을 실행한 후 완료가 되기를 기다리지 않는 방식
다른 동작을 바로 실행 가능

특정 동작을 실행한 후 해당 동작을 전혀 신경쓰지 않지만, 그 동작이 완료될 경우 실행할 함수를 미리 등록해둔다.
완료되면 등록한 함수 실행 -> 이벤트 기반 동작 방식

Node.js 시작하기

Node.js는 빠르게 개발중
LTS: Long-Term Support 버전, 안정적이고 오래지원하는 버전

ES6

ECMAScript 버전 6 이후를 통틀어 일반적으로 ES6라고 부름
JavaScript의 표준 문법, 버전 6이후로 현대적인 문법 추가됨

Node.js는 ES6의 모든 문법을 지원하지는 않는다.
자주 사용되는 유용한 ES6문법은 지원된다.
1) let, const

2) Template String

3) arrow function

4) class

5) destructing

비동기 코딩

비동기 - 이벤트 기반 동작을 코드로 구현
Node.js에서 비동기동작을 세가지 방법으로 구현
1) Callback: 전통적인 자바스크립트의 이벤트 기반 코딩 방식
2) Promise: callback의 단점을 보완한 비동기 코딩 방식
3) Async-Await: promise의 단점을 보완한 비동기 코딩 방식

Callback

콜백지옥: 코드가 길어짐

Promise

프로미스지옥: 콜백지옥과 유사

Async-Await



callback 지옥 -> promise chaining으로 해결
promise 지옥 -> async-await으로 해결

Async-Await 권장

이벤트루프: 이벤트를 처리하는 반복되는 동작(loop)

Node.js가 비동기-이벤트 동작을 처리하는 일련의 반복 동작
자바스크립트의 일반적인 동작방식으로 node.js만의 것이 아니다.


setTimeout은 콜스택이 비어있을때 실행됨
PRomise는 상위함수가 종료되기 전에 실행됨

Http 서버 켜기

const http = require('http');
const fs = require('fs');

http.createServer((req, res) => {
	res.writeHead(200, {"Content-Type": "text/html"});
  	const file = fs.readFileSync('car.txt', 'utf-8');
  	res.write('와우');
  
  	res.end();
}).listen(8080);
profile
공부일기

0개의 댓글