일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- http
- express 프로젝트 시작하기
- mongoose populate
- res.status
- await
- css 기초
- 웹개발
- 자바스크립트
- node.js란
- Axios put
- 파이썬
- mongoose create
- CSS
- req.queries
- mongoose update
- req.get
- promise
- javascript
- Axios delete
- req.params
- res.render
- mongoose delete
- res.set
- HTML
- 프론트엔드
- mongoose find
- Axios get
- async
- req.body
- Axios post
- Today
- Total
모스카토
Node.js 기초 본문
1. Node.js 이해하기
Node.js 등장 배경
web 2.0에서 사용자와 상호작용이 증가하면서 구글에서 v8 엔진(오픈소스) 개발 -> 자바스크립트 실행 속도가 빨라짐 -> v8 엔진을 사용해 Node.js가 개발됨.
Node.js 는 자바스크립트를 어느 환경에서나 실행할 수 있게 해주는 실행기이다.
기존에는 JavaScript를 브라우저에서만 실행할 수 있었다. 웹 프론트 개발자의 언어로 사용됐다.
Node.js로 인해 크로스 플랫폼(어느 환경에서든) 실행 가능해졌다. 동작의 제한이 거의 없어서 다양한 어플리케이션을 개발할 수 있게 됐다.
2. Node.js 특징
싱글 쓰레드의 한계를 대체하기 위해 비동기 방식을 사용하고, 비동기 구현을 위해 이벤트 기반의 동작 방식을 사용한다.
1. 싱글 쓰레드
* 쓰레드 : 명령을 실행하는 단위
① 쓰레드에 cpu 리소스를 낭비하지 않는다.
② 싱글 쓰레드는 한번에 한가지 동작만 수행가능하다.
③ 쓰레드 기반의 작업 효율이 떨어진다.
→ 비동기 동작으로 쓰레드 기반 작업을 최소화한다.
2. 비동기
: 동작을 실행한 후 완료될 때까지 기다리지 않는 코드 실행 방식.
→ 다른 동작을 바로 실행할 수 있다.
3. 이벤트 기반
비동기 동작을 실행 -> 그 동작이 완료되면 실행할 함수를 미리 등록 -> 완료 후 등록된 함수를 실행.
이벤트 : 완료되면 실행할 함수
3. Node.js 시작하기
빠르게 변화하고 있어서 가장 최신의 LTS 버전을 사용하는 것이 좋다.
lts : long term support, 안정적으로 오래 지원하는 버전.
4. ES6
= ECMAScript 버전 6 이후를 통틀어서 es6라고 부른다.
ECMAScript : ECMA에서 발표하는 JavaScript의 표준 문법
버전 6 이후에 현대적인 문법들이 많이 추가되어서 6 이후를 통틀어 es6라고 한다.
node.js는 빠르게 최신 ECMAScript를 지원한다. 하지만 모든 문법을 지원하지는 않는다.
ES6 문법
① let, const : 상수와 변수 구분
② Template string : 백틱 ( ` ) 으로 문자열 사이에 변수 삽입과 줄바꿈이 가능해짐.
let number = 10
let sentence = `My number is ${ number }`
console.log(sentence)
③ arrow function : 기존의 function 키워드 없이 그냥 변수처럼 함수를 선언 가능.
const add = (a,b) => return a+b
④ class
⑤ destructing : object나 배열에서 값을 꺼내고 넣을 때 여러 변수를 나열하여 한번에 꺼낼 수 있다.
let obj = {name: 'elice', age: 20}
let {name, age} = obj
let arr = ['A', 'B', 'C']
let [f, s, t] = arr
5. 비동기 코딩
Node.js에서 비동기 동작을 구현하는 세가지 방법에 Callback → Promise → Async/Await 가 있다.
① Callback : 전통적인 JavaScript 이벤트 기반 코딩 방식
db.getUsers((err, users) => {
if (err) {
...
return;
}
async1(users, (r1) =>{
async2(r1, (r2)) => {
async3(r2, (r3) => {
...
});
});
});
});
② Promise : callback의 단점을 보완
db.getUsersPromise()
.then((users) => {
return promise1(users);
})
.then(r1 => promise2(r1))
.catch(...);
Promise.all( [ promise1( ), promise2( ) ] ) : promise함수를 동시에 실행시키고, 등록된 모든 함수가 마무리되면 결과값을 한번에 반환한다. -> 소요시간이 줄어든다.
③ Async/Await : Promise의 단점을 보완
async function doSomething() => {
const r1 = await promise1();
const r2 = await promise2(r1);
const r3 = await promise3(r1, r2);
...
return r3;
}
doSomething().then(r3 => {
console.log(r3)
})
try catch를 사용할 수 있다.
async function doSomething(msg){
try{
const r = await promise1();
console.log(r)
} catch(e){
console.error(e);
}
}
* callback 기반 함수를 Promise 함수로 변경하는 방법
function getUsersPromise(params){
return new Promise((resolve, reject) => {
getUsers(params, (err, users) => {
if(err) {
reject(err);
return;
}
resolve(users);
});
});
}
① 반환값을 Promise객체로 생성
② Promise객체 생성시, resolve, reject를 인자로 받는 함수를 등록.
③ 해당 함수 안에서 콜백기반 비동기 함수를 실행
④ 콜백함수의 결과는 resolve, 에러는 reject로 전달.
6. 이벤트 루프
: 이벤트를 처리하는 loop
브라우저와 Node.js 모두 이벤트 루프를 사용한다.
이벤트 루프 구성
① Call Stack : 작성된 함수들이 순차적으로 등록되는 스택.
② Message Queue : setTimeout 같은 지연실행 함수를 등록하는 큐.
정해진 timing이 끝나고 콜스택이 비어있을 때 콜스택에 등록된 함수를 추가한다.
③ Job Queue : Promise에 등록된 콜백함수를 등록하는 큐.
콜스택이 비어있지 않아도 상위함수가 종료되기 전에 콜스택에 함수를 추가한다.
'엘리스 ai트랙' 카테고리의 다른 글
익스프레스 시작하기 (0) | 2022.02.18 |
---|---|
NPM과 모듈 (0) | 2022.02.16 |
Axios API 사용하기 (0) | 2022.02.12 |
sql로 데이터 다루기2 (0) | 2022.02.11 |
async / await 와 API (0) | 2022.02.10 |