7주차 - node.js 시작, npm

시유야·2023년 4월 10일
0
post-thumbnail

01 Node.js이해하기

특징 한줄 요약

싱글 쓰레드 - 한 번에 한가지 동작만 수행함
비동기
이벤트 기반
쓰레드 : 명령을 실행하는 단위 . CPU 리소스를 많이 차지함

  • 싱글쓰레드의
    : 장점 - 쓰레드가 늘어나지 않아서 리소스 관리에 효율적
    : 단점 - 쓰레드 기반의 작업들의 효율이 떨어짐
    그래서 node.js 는 비동기 동작으로 쓰레드 기반의 작업을 최소화한다.

기본적으로 싱글쓰레드 이기 때문에 작업을 실행해 놓고 완료를 기다리지 않고, 새로운 작업을 실행한다.
특정 동작을 실행한 후 해당 동작을 전혀 신경쓰지 않다가
완료가 되면 실행할 함수를 미리 등록(이벤트 등록)해놔서 그 함수가 실행될 수 있게 한다.

05 비동기 코딩

callback

db.getUsers((err, users) => {
  console.log(users);
});

<코드해설>
db.getUsers()는 db에서 유저목록 찾아오는 비동기 동작 수행
쿼리가 완료되면 user를 console에 찍는 callback함수 실행
콜백함수의 첫번째 파라미터로 err, 두번째 파라미터로 결과를 같이 전달하는 것이 표준으로 자리잡혀 있음

Promise

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- await

async함수 내에서 promise함수의 결과를 await로 받음(== return 이 promise)

  • await한 promise함수가 완료될 때 까지 다음 라인으로 넘어가지 않음
  • 마치 순차적 프로그래밍처럼 작성이 가능

promise.all

promise함수를 동시에 실행시키고 등록된 모든 함수가 마무리되면 결과값을 한꺼번에 반환한다

06 이벤트 루프

이벤트를 처리하는 반복적인 동장 루프

구성요소

  • call stack : 작성된 함수들이 등록되는 LIFO(후입선출)스택 ..작성된 순서대로 쌓음
    이벤트 루프는 콜스택이 비어있을 때까지 스택의 함수를 실행

  • message Queue : setTimeout같이 지연실행 함수를 등록하는 FIFO(선입선출)큐
    정해진 timing이 끝나고, 콜스택이 비어있으면 등록된 함수를 콜스택에 추가

  • job Queue : promise에 등록된 콜백을 등록하는 FIFO Queue
    콜스택이 비어있어야 등록된 함수를 콜스택에 추가한다.

messsage queue를 확인하기 전에 job queue를 먼저 확인한다.

07 NPM 사용법

프로젝트 생성

npm init : 프로젝트 디렉토리 생성 하고, 그 디렉터리 안에서 npm init 명령어 사용하면 -> package.json 파일이 생성됨

  • package.json :
    프로젝트 관련 정보들이 저장되는 파일

의존성 관리

dependency에서 프로젝트 내에서 사용하는 라이브러리를 관리함.
라이브러리 : 특정 기능을 수행하는 코드의 묶음 === 패키지라고도 함

npm install

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 : 프로젝트 종료

08 node.js 모듈

  • 패키지 = 모듈의 집합

node.js의 기본 제공 모듈 -

console

log, warn, error 함수로 커맨드라인에 로그 레벨 표시
time, timeLog, timeEnd 함수로 시간 추적

process

arch(아키텍쳐 확인), argv(변수확인), env(환경 확인)
abort, kill, exit

fs

파일 입출력 하기 위해 사용
readFile, writeFile
-Sync함수로 동기 동작
watch 파일/폴더 변경 이벤트 감지

http

createServer 함수로 서버생성
request함수로 htp요청 생성

외에도 기본제공 모듈을 찾아보세요.

profile
i'm happy enough.

0개의 댓글