-
Node.js & NPM개발/Study 2021. 8. 3. 15:56
node.js 개념 정리했던 medium 글을 이전해왔다. 해당 글은 Node.js 교과서라는 책 기반으로 포스팅했다.
Node.js란?
아래는 공식 사이트에서 설명하는 노드이다.
Node.js는 Chrome의 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다. Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.
런타임: 특정 언어로 만들어진 프로그램들을 실행할 수 있는 환경
이벤트 기반: 이벤트가 발생할 때 미리 지정해준 작업을 수행하는 방식 (ex. 클릭, 네트워크 요청)
이벤트 루프 관련 설명은 JSCONF event loop 영상을 보면 좋습니다. 이전에 setTimeout(0) 을 썼던 궁금증에 대해 해소시켜주는 영상이었습니다.
논블로킹 I/O : 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 태스크 큐를 거쳐 호출 스텍으로 올라오기를 기다리는 방식
싱글스레드: 하나의 스레드를 갖는 프로세스. 여기서 스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 일컬음.
프로세스: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
※ 노드는 스레드를 늘리는 대신, 프로세스 자체를 복사해 여러 작업을 동시에 처리하는 멀티 프로세싱 방식을 택함
노드의 장점
- 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용한다.
- I/O 작업이 많은 서버로 적합하다.
- 멀티 스레드 방식보다 쉽다.
- 웹서버가 내장되어 있다.
- 자바스크립트를 사용한다.
- JSON 방식과 호환하기 쉽다.
노드의 단점
- 싱글 스레드라서 CPU 코어를 하나만 사용한다.
- CPU 작업이 많은 서버로는 부적합하다.
- 하나뿐인 스레드가 멈추지 않도록 관리해야 한다.
- 서버 규모가 커졌을 때 서버를 관리하기 어렵다.
- 어중간한 성능
현재 노드의 사용범위는 서버에 한정되지 않는다. 사용 범위가 늘어나며 웹, 모바일, 데스크탑 애플리케이션의 개발에도 사용되기 시작했다.
npm이란?
NPM(Node Package Manager)
npm 은 자바스크립트 프로그래밍 언어를 위한 패키지 관리자로, 자바스크립트 런타임 환경 Node.js의 기본 패키지 관리자이다.
이전에는 따로 환경변수를 설정해줘야 했으나 최근에는 Node.js를 설치하면 기본적으로 npm 명령어를 사용할 수 있다. (윈도우 pc에서 종종 node를 설치했음에도 npm 명령어가 작동하지 않는다면 환경변수를 확인할 것)
프로젝트 경로에서 터미널을 켠 후 npm init 을 입력하면 package name(프로젝트/패키지 이름), version(버전), description(설명), entry point, test command, git repository, keywords(키워드), author(작성자), license(라이센스) 등을 입력받는다. (그냥 enter 키를 누르면 default 값으로 지정된다.)
해당 입력 없이 바로 시작을 원하는 경우에는 npm init 바로 뒤에 f(--force), -y(--yes) 중 하나의 플래그를 덧붙여 주면 된다.
package.json 은 프로젝트 정보와 의존성(dependencies)을 관리하는 문서이다.
sample)
{ "name": "test-react", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^12.8.3", "react": "^17.0.2", "react-dom": "^17.0.2", "react-scripts": "4.0.3", "web-vitals": "^1.1.2" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } }
여기서 scripts는 run 명령어를 통해서 실행할 것들이고, dependencies는 설치할 모듈들을 의미한다.
해당 파일을 통해 npm i (npm install)하여 동일한 개발 환경을 구축할 수 있게 해주고, node_modules/* 폴더를 git에 업로드하지 않아도 되게 해준다. 혹시라도 .gitignore 파일에 /node_modules 가 추가되어 있지 않다면 꼭 추가하도록 하자.
npm 명령어들이 궁금하다면 터미널에 npm help를 입력해보면 된다.
자주 쓰는 명령어
npm install [패키지명@버전]
- 패키지를 설정하는 명령어. 버전의 경우 특정 버전을 설치해야 할 때 사용하면 된다.npm update
- 설치한 패키지를 업데이트npm uninstall —save [패키지명]
- 패키지를 삭제npm start
- package.json의 scripts에 있는 start 명령어를 실행
추가로 읽어보면 좋은 글, 참고한 글
npm과 yarn (npm 명령어 관련)
https://velog.io/@blackb0x/npm과-yarn
npm과 yarn 명령어 비교
https://ui-tricks.netlify.app/posts/2020-03-10-npm-yarn/
npm과 npx의 차이점
https://velog.io/@kimkyeseung/번역-그래-npx-npm말고-차이점-설명
npm
'개발 > Study' 카테고리의 다른 글
VSC[Visual Studio Code] Extension 정리 (0) 2021.08.12