싱글 쓰레드 - 한 번에 한가지 동작만 수행함
비동기
이벤트 기반
쓰레드
: 명령을 실행하는 단위 . CPU 리소스를 많이 차지함
기본적으로 싱글쓰레드 이기 때문에 작업을 실행해 놓고 완료를 기다리지 않고, 새로운 작업을 실행한다.
특정 동작을 실행한 후 해당 동작을 전혀 신경쓰지 않다가
완료가 되면 실행할 함수를 미리 등록(이벤트 등록)해놔서 그 함수가 실행될 수 있게 한다.
db.getUsers((err, users) => {
console.log(users);
});
<코드해설>
db.getUsers()는 db에서 유저목록 찾아오는 비동기 동작 수행
쿼리가 완료되면 user를 console에 찍는 callback함수 실행
콜백함수의 첫번째 파라미터로 err, 두번째 파라미터로 결과를 같이 전달하는 것이 표준으로 자리잡혀 있음
Promise함수는 동작이 완료되면 then에 등록된 콜백 실행 .
오류 발생시 catch에 등록된 콜백 실행
function getUsersPromise(params) {
return new Promise((resolve, reject) => {
getUsers(params, (err, users) => {
if(err) {
reject(err);
return;
}
resoleve(users);
});
});
}
<코드해설>
콜백기반 함수를 프로미스 함수로 변경하기
Promise는 resolve, reject 두가지 함수를 가짐
async1 함수의 실행 결과에 따라 resolve, reject로 분리
reject는 catch에 등록된 콜백 실행하고,
resolve는 then에 등록된 콜백실행한다.
async함수 내에서 promise함수의 결과를 await로 받음(== return 이 promise)
promise함수를 동시에 실행시키고 등록된 모든 함수가 마무리되면 결과값을 한꺼번에 반환한다
이벤트를 처리하는 반복적인 동장 루프
call stack
: 작성된 함수들이 등록되는 LIFO(후입선출)스택 ..작성된 순서대로 쌓음
이벤트 루프는 콜스택이 비어있을 때까지 스택의 함수를 실행
message Queue
: setTimeout같이 지연실행 함수를 등록하는 FIFO(선입선출)큐
정해진 timing이 끝나고, 콜스택이 비어있으면 등록된 함수를 콜스택에 추가
job Queue
: promise에 등록된 콜백을 등록하는 FIFO Queue
콜스택이 비어있어야 등록된 함수를 콜스택에 추가한다.
messsage queue를 확인하기 전에 job queue를 먼저 확인한다.
npm init
: 프로젝트 디렉토리 생성 하고, 그 디렉터리 안에서 npm init 명령어 사용하면 -> package.json 파일이 생성됨
dependency
에서 프로젝트 내에서 사용하는 라이브러리를 관리함.
라이브러리
: 특정 기능을 수행하는 코드의 묶음 === 패키지라고도 함
npm i
로 줄여서 쓸 수도 있음
$ npm install [package-name]
: 추가된 패키지는 package.json> dependendencies안에 추가됨 > node_modules디렉터리에 저장됨.
$npm i [package-name] --save-dev
: 배포 전까지만 사용하는 의존성 라이브러리 추가
devDependencies에 추가됨
다른 사람이 만든 프로젝트를 내 컴퓨터에 다운받아서 실행할 때에는 $npm install
명령어로 dependencies와 devDependencies에 있는 라이브러리가 모두 설치됨
$npm install --productioin
: 배포 시 개발용 의존성 포함하지 않고 다운
$npm i [package-name]@[version]
~1.13.0 - 1.13.x 버전 설치
^1.13.0 - 1.x.x버전 설치 (가장 왼쪽 버전만 고정)
1.13.0 - 1.13.0에 해당하는 버전만 설치
package-lock.json 파일은
프로젝트에 의존성을 추가하면 자동으로 최신버전으로 추가가되는데, 설치된 버전을 고정하는 역할을 해주는 파일이다. (의존성 버전 확인!)
$npm install [패키지명] --global
: 전역 패키지 저장소에 저장된 패키지 (node_modules디렉터리에 저장되지 않는다)
$npm remove [패키지명]
: 삭제
package.json의 script에 선언된 스크립트를
npm run [스크립트명]
명령어로 실행할 수 있다.
(스크립트 실행)
npm test
: 코드 유닛테스트 등에 사용
npm start
: 프로젝트 실행
npm stop
: 프로젝트 종료
log, warn, error 함수로 커맨드라인에 로그 레벨 표시
time, timeLog, timeEnd 함수로 시간 추적
arch(아키텍쳐 확인), argv(변수확인), env(환경 확인)
abort, kill, exit
파일 입출력 하기 위해 사용
readFile, writeFile
-Sync함수로 동기 동작
watch 파일/폴더 변경 이벤트 감지
createServer 함수로 서버생성
request함수로 htp요청 생성
외에도 기본제공 모듈을 찾아보세요.