728x90

오늘은 node.js에 대한 강의를 들었다.

Node.js의 설계

Node.js의 정의

- Javascript를 브라우저가 아닌 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경입니다.

V8 엔진

- 구글이 개발하여 구글 크롬 브라우저에서 사용하는 자바스크립트 엔진입니다. Node.js에서 이 엔진을 활용함으로써, 우리는 브라우저 환경 이외에서도 자바스크립트를 사용할 수 있게 되었습니다.

libuv

- 비동기 작업인 회원가입의 정보 입력이나 이런 순간에 비동기 작업으로 흘러가는 순서를 동기작업으로 바꿔주는 역할을 한다. async/await과 같은 역할을 한다고 생각하면 

 

Node.js의 특징

- 논 블로킹 I/O (Non-Blocking Input/Output)

●I/O데이터입력(Input) / 출력(Output)을 의미하며, 이는 여러분이 파일을 저장하거나, 불러오는 것을 “I/O 처리를 한다.” 라고 표현할 수 있습니다.

 

● 블로킹(Blocking) I/O: 한 번에 하나의 작업만을 처할 수 있으며, 호출된 함수가 자신의 작업을 모두 마칠 때 까지 호출한 함수에게 제어권을 넘겨주지 않습니다.(예를 들어, 파일을 읽는 동안에는 다른 작업을 함께 수행할 수 없습니다.)

 

● 논 블로킹(Non-blocking) I/O: 시스템 호출이 완료되기를 기다리지 않고 바로 다음 작업으로 즉시 넘어갈 수 있는 방식이므로 호출된 함수는 작업의 완료 여부와 상관없이 즉시 제어권을 호출한 함수에게 반환합니다.

(예를 들어, 파일을 읽는 동안에도 동시에 연산을 하는 것처럼 다른 작업을 함께 수행할 수 있습니다.)

 

-싱글 스레드(Single thread)

● 스레드란 ? 프로그램이 동작할 때, CPU나 프로세서를 사용하는 단위(ex)스레드를 여러개 사용할경우 여러가지의 작업을 동시에 함)

 

● Node.js의 경우 싱글 스레드 즉 하나의 단일 스레드를 사용하지만 I/O작업이 발생할 경우 비동기적으로 작업을 처리하여, 여러가지 작업을 동시에 처리 가능

 

●싱글스레드의 장점의 경우 스레드 생성의 관리에 대한 부담을 줄이고, 여러스레드가 동시에 공유하는 자원에 접근하는 문제인 Race condition을 방지할 수 있다.

 

-호출스택(Call Stack)

●Javascript에 코드를 실행하면 호출 스택에 해당하는 함수를 추가하고 함수가 완료되면 호출스택에서 제거(Pop)시키는 형태를 가지고있다.

 

●비동기작업때 호출스택이 함수가 끝날 때까지 기다리는 것을 막기 위해서 node.js에서는 이벤트루프(event loop) 와 이벤트 큐(event queue)를  사용한다.

 

-이벤트 루프(Event Loop)

● 이벤트 루프는 JavaScript의 비동기 작업이 동기작업이 되도록 비동기 작업들을 모아서 관리하고 순서를 정해주는 도구이다

● 이벤트 루프를 활용하면, 자바스크립트는 시간이 오래 걸리는 작업을 이벤트 큐에 넣어 비동기적으로 처리하고, 그 동안 호출스택에서는 다른 작업을 처리할 수 있다.

 

패키지 매니저(Package Manager)

-Node.js에서 코드의 재사용성을 높이기 위해 작성된 독립적인 코드 조각을 “모듈”이라고 하는데, 이런 모듈을 패키지 매니저를 통해 공유하기 위해 만든 것을 패키지라고 한다.

 

-패키지매니저는 패키지를 손쉽게 다루는 작업을 안전하고, 편리하게 사용하기 위해 만든 툴이다. 패키지의 설치, 업데이트, 삭제등을 할 수 있고, 패키지간의 의존성을 관리해준다.

 

-Node.js의 대표적인 패키지 매니저는 npm, yarn이 있다.

 

npm

-npm은 node package manager로 가장 기초적인 패키지 매니저이다.

-누구나 쉽게 이용 가능하다.

yarn

-npm의 부족한 부분을 보완하여 페이스북에서 제작한 편리한 기능과 보안 성능이 향상된 패키매니저이다.

-패키지 설치 속도가 빠르다.

npm과 yarn을 동시에 사용할 시 버전이 달라서 오류가 발생할 수 있음

 

package.json이란

-node.js 프로젝트의 가장 핵심적인 파일이고, 프로젝트에 대한 정보와 설치한 패키지들의 버전을 관리할 때 사하는 파일이다.

-동일한 패키지라도 버전에 따라 기능이 다르기 때문에 특정 버전을 설치하고 관리해야 할 때 필요하다.

- pakage.json에는 프로젝트명, 작성자, 라이센스 정보등의 일반적인 프로젝트 정보 뿐만 아니라, 스크립트를 실행 할 수 있는 필드 또한 포함되어있다.

 

package-lock.json 또는 yarn.lock이란

-lock 파일에는 package.json에서 정의한 파일 이외에도 모듈에 들어있는 패키지들의 버전과 의존 관계의 정의된 파일을 가지고 있다.

 

yarn 설정하기

-yarn 설치하기

●터미널에 npm install -g yarn을 입력하여서 yarn을 설치한다.

-yarn 시작하기

●새로운 프로젝트나 패키지를 만들때 yarn init을 통해 해당 하는 패키지를 제작할 수 있다.

다음과 같은 정보를 가지고 있음

●yarn add기능을 통해서 패키지를 설치할 수 있다. (ex : yarn add express => express란 패키지를 설치한다.)

node_modules 파일안에 add한 패키지한 정보가 들어간다. 이 node_modules는 윈도우나 맥환경에 따라 다르기 때문에 공유하기 힘들다. 그래서 공유할때는 node_modules 파일을 지우고 공유함

 

-yarn 명령어

yarn을 입력하면 해당하는 yarn.lock과 pakage.json을 기반으로 패키지를 다운받는데 위의 말과 이어서 node_modules파일을 지운 공유 파일을 사용할 경우 yarn명령어를 통해 해당하는 node_modules패키지를 다운받을 수 있다.

 

npm과 yarn 명령어 정리