본문 바로가기
📌 Front End/└ Node.js

[Node.js] Node 개념 및 기본 명령어

by 쫄리_ 2024. 8. 9.
728x90
반응형

Node.js

JavaScript의 Runtime(실행기) : 브라우저 없이도 사용할 수 있는 JS 실행기

  1. Node.js는 Chrome V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경으로 
    주로 서버사이드 어플리케이션 개발에 사용되는 소프트웨어 플랫폼이다.
  2. Node.js는 브라우저 외부 환경에서 자바스크립트 어플리케이션 개발에 사용되며
    이에 필요한 모듈, 파일 시스템, HTTP 등 Built-in API를 제공한다.
  3. Node.js는 javascript를 사용해 개발한다.

📌 제작된 과정

원래 JS는 구글에서 개발한 V& 엔진이라는 웹브라우저 내부에서 실행되는 

JS엔진을 통하여 웹브라우저에서만 사용가능하였다. 

하지만, 구글이 오픈소스로 풀어버린 이후 브라우저 바깥으로 JS를 빼버리게 된 것이 Node.js이다.


📌 오해

Node는 웹서버가 아니다. Node 자체로는 아무것도 하지 않는다.
Node.js는 그저 코드를 시행할 수 있는 하나의 방법에 

불과한 그저 javascript 런타임일 뿐입니다.

 

* 런타임 : 프로그램이 실행되고 있을 때 존재하는 곳.
                즉, 컴퓨터 내에서 프로그램이 실행되면 그것이 바로 프로그램의 런타임이다.
                단순히 말해서 프로그래밍 언어가 구동되는 환경이라고 이해


📌 한계

브라우저에서 벗어났기 때문에 document / window 객체는 사용 불가능합니다.


📌 장점 & 단점

장점

  • Node.js는 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 
    높은 요청 처리 성능을 가지고 있다.
    + 이해 더하기
    Node.js의 모든 API는 비동기 방식으로 동작하여
    Non-blocking I/O가 가능하고
    단일 스레드 이벤트 루프 모델을 사용하여
    보다 가벼운 환경에서도 높은 요청 처리 성능을 가지고 있다.
    즉, 요청이 많거나 오래 걸리는 요청이 있어도
    멈추거나 요청 대기시간이 없다.
  • 코드가 짧고 쉬움

 

단점

  • 처리 속도가 떨어질 수 있다.
  • 수학 연산이나 이미지처리 같은 라이브러리가 부족할 수 있다.
  • Node.js가 제공하는 Non-blocking I/O 처리 방식은 
    다른 언어에서도 비슷하게 구현 가능하다.

📌 컴파일 언어 vs 런타임(인터프리터) 언어

Node.js는 JavaScript를 실행하는 런타임 환경이고, JavaScript는 인터프리터 언어입니다.

 

📜 컴파일러(Complier) 언어

  • 전체를 번역하고 실행하고 CPU가 알아들을 수 있는 언어(0110)입니다. 
  • 번역이 되면 실행기 없이도 앱 동작 가능하다. 속도가 빠르다.
  • 언어 : C/C++

📜 인터프리터(Interpreter)(런타임) 언어

  • 중간중간 실행 가능하고 명령이 오면 즉각 실행 가능하다. 
  • 실행에 필요한 것들을 모아놓은 환경을 뜻하는 런타임에 걸맞게 
    실행기가 있어야만 프로그램이 동작 가능하다. 
    컴파일에 비해 상대적으로 느리다.
  • 언어 : Python / JS

Node.js 특징

Node.js는 웹 서버를 비롯한 다양한 서버 측 응용 프로그램 개발에 사용되며, 
JavaScript를 사용하여 전체 스택의 웹 애플리케이션을 개발할 수 있게 해줍니다.

비동기 이벤트 기반 I/O 작업을 비동기적으로 처리하여 
여러 작업을 동시에 처리
할 수 있습니다. 
이는 Node.js가 대규모 데이터 처리나 
실시간 애플리케이션에 적합하게 만듭니다.
단일 스레드 단일 스레드 모델을 기반으로 하되, 
이벤트 루프를 통해 여러 작업을 동시에 처리할 수 있습니다.
모듈 시스템 CommonJS 모듈 시스템을 따르며, 
모듈 간의 코드를 재 사용하기 쉽게 해줍니다.
간편한 패키지 관리 npm(Node Package Manager)을 통해 
다양한 패키지를 손쉽게 관리하고 사용할 수 있습니다.
확장성 비동기적인 자연으로 인해 대규모 애플리케이션에 적합하며,
클러스터링과 로드 밸런싱을 통해 확장성을 높일 수 있습니다.

 


Node.js 설치

Node.js 설치 페이지 → LTS버전 사용
LTS버전은 Long Term Support의 약자로 안정적인 버전으로 

3년간 유지보수 / 업데이트를 지원합니다.

 

https://nodejs.org/en/

 

Node.js — Run JavaScript Everywhere

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org


📌 Node.js 설치 확인

설치가 정상적으로 완료되었는지 확인합니다.
터미널에서 아래 명령을 실행 입력합니다.

node -v

Node.js가 정상적으로 설치 되었다면 위처럼 노드의 버전이 표시됩니다.

 


Node 와 NPM 

Node Framework이 컴퓨터에 설치되면 Node 와 NPM 두 개의 소프트웨어가 설치됩니다.


NODE와 NPM SW 제어를 위해서는 각각 고유 명령어를 사용해야하며
NODEnode 명령어

NPMnpm 명령어

통해 관련 SW를 사용해 소스를 실행하거나 각종 오픈소스 패키지의 설치 및 관리를 진행합니다.

NODE 향후 자바스크립트로 개발한 소스를 실행시키고 
결과물을 확인할수 있는 런타임환경을 제공해주는 SW
NPM
Node
Package Manager
오픈소스로 개발
각종 자바스크립트 또는 노드 기반 SW(패키지,라이브러리)를 
오픈소스저장소에서 여러분의 로컬 개발 컴퓨터 환경 또는 서버 서비스환경,

그리고 개발 프로젝트 소스등에 손쉽게 설치하고 사용
오픈소스 패키지 SW를 관리해주기 위한
Node Package Manager(NPM) 소프트웨어

 


Node.js 기본 명령어

  • node 명령어
  • npm 명령어
  • npx 명령어

1. node 명령어

nodejs를 실행하는 명령어

 

📌 node 파일명

파일명에 적힌 코드를 실행한다.

ex) 터미널 → node test.js

 

📌 node -v

노드 버전 확인 명령어

ex) v20.14.0


2. npm 명령어

Node.js 기본 패키지 관리자(Node Pacackage Manager)

npm 은 자바스크립트 프로그래밍 언어를 위한 패키지 관리자이다.
세상에는 많은 자바스크립트 프로그래머들이 있고, 

그들이 유용한 자바스크립트 패키지들을 이미 만들어 두었고, 

그런 코드들이 공개되어 있는 것이 바로 npm입니다.


npm은 Node.js 생태계에서 중요한 역할을 하며, 

개발자들이 라이브러리와 모듈을 효율적으로 활용하여 

프로젝트를 개발할 수 있도록 도와줍니다.

npm에 업로드된 노드 모듈을 패키지라고 부릅니다. 

모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지도 다른 패키지를 사용할 수 있습니다. 

이러한 관계를 의존 관계라고 합니다.

패키지 설치 npm을 사용하여 프로젝트에 필요한 패키지를 설치할 수 있습니다. 
이를 통해 외부 라이브러리나 모듈을 
프로젝트에 쉽게 통합할 수 있습니다.
의존성 관리 프로젝트에 사용된 패키지의 의존성을 자동으로 관리합니다. 
즉, 특정 패키지를 설치할 때 
해당 패키지가 의존하는 다른 패키지도 함께 설치됩니다.
버전 관리 npm은 패키지의 버전을 관리하고 
다양한 버전의 패키지를 사용할 수 있도록 지원합니다. 
이를 통해 프로젝트가 특정 버전의 패키지에 의존할 수 있습니다.
스크립트 실행 npm을 사용하여 프로젝트에 정의된 스크립트를 실행할 수 있습니다. 
이를 통해 테스트 실행, 빌드 프로세스 등을 자동화할 수 있습니다.
패키지 공유 npm 레지스트리를 통해 
개발자들은 자신이 개발한 패키지를 공유할 수 있습니다. 
이를 통해 커뮤니티와 협업하여 패키지를 공유하고 재 사용할 수 있습니다.

 


📌 package.json 생성

package.json이란 현재 프로젝트에 관한 정보와 패키지 매니저(npm, yarn)을 통해 

설치한 모듈들의 의존성을 관리하는 파일입니다.
간단하게 '현재 프로젝트에 대한 정보를 저장하는 파일' 입니다.

npm init 명령이 실행되면 package.json 관리저장소 생성됩니다.

npm init -y
npm init	// 각각의 내용을 입력하면서 package.json 생성
npm init -y	// 내용 입력 없이 바로 package.json 생성

 


📌 npm을 이용한 확장 모듈(패키지) 설치

확장 모듈을 설치하기 위해 터미널에서 npm install이라는 명령어를 사용해야 하고, 

npm install 명령어에는 지역(local) 설치와 전역(global) 설치 옵션이 있습니다.
옵션을 별도로 지정하지 않으면 지역으로 설치됩니다.

 

다운로드된 패키지들이 '📁node_modules' 라는 폴더에 저장된다.
https://www.npmjs.com 정의되어있는 업로드된걸 다운로드 받는다.

ex) npm i typescript

npm install
npm i		// install을 i로 줄여서 사용가능
Command Effect
npm install
npm install --save
패키지 설치, 프로젝트의 dependencies 항목에 추가
npm install --save-D
npm install --save-dev
패키지 설치, 프로젝트의 devDependencies 항목에 추가
npm install -g
npm install --global
패키지를 시스템의 node_modules에 추가(글로벌 설치)

📥 지역(local) 설치

현재 폴더에 패키지를 설치합니다.

지역(local)으로 설치된 패키지는 해당 프로젝트에서만 활용됩니다.
노드 모듈은 📁./node_modules에 그리고 실행파일들은 '📁./node_modules/.bin'에 설치됩니다.

// ▶ 단일 dependencies 설치
npm install <module_name> --save
npm install <module_name>		// --save를 생략하여 설치 가능
npm i <module_name>

// ▶ 단일 devDependencies 설치
npm install <module_name> --save-dev
npm install <module_name> -D		// --save-dev를 -D로 줄여서 설치 가능
npm i <module_name> -D

// ▶ 여러 패키지 동시 설치
npm install <module_name> <module_name> <module_name>		// dependencies 설치
npm i <module_name> <module_name> <module_name>			// dependencies 설치

npm install <module_name> <module_name> <module_name> -D	// devDependencies 설치
npm i <module_name> <module_name> <module_name> -D		// devDependencies 설치

 


🚩 플래그 종류 (특정 패키지 설치할 경우)

npm에서 플래그(Flag)

특정한 옵션 또는 설정을 전달하기 위해 npm 명령어와 함께 사용되는 특별한 인자(argument)다.

한 마디로, 우리가 터미널에 입력하는 명령의 옵션이 바로 플래그다.
일반적으로 플래그는 "-" 또는 "--" 로 시작하며, 다양한 옵션을 지정할 수 있다.

npm에서는 다양한 플래그를 제공하여, 

사용자가 자신의 개발 환경에 필요한 설정을 유연하게 조정할 수 있도록 지원한다.

이러한 플래그를 사용하면 패키지 설치, 업데이트, 삭제 등의 작업을 더욱 쉽고 효율적으로 할 수 있다.

 

  • -g (--global 플래그)
  • -D (--save-dev 플래그)

📥 전역(global) 설치  '-g'

모든 프로젝트가 공통으로 사용하는 패키지는 전역(global)에 설치합니다.

ex) npm i -g name1 name2

// ▶ 단일 설치
npm install <module_name> --global
npm install <module_name> -g		// --global을 -g로 줄여서 설치가능
npm i <module_name> -g

 

📁 전역 설치 경로

  • 🖥️ macOS
    /usr/local/lib/node_modules
  • 🖥️ 윈도우
    c:\Users\%USERNAME%\AppData\Roaming\npm\node_modules
  • ⬇️ 정확한 설치 경로 확인
    npm root -g

 


📥 개발용(dev) 패키지 설치  '-D'

-D 플래그를 사용하면 개발 전용 패키지 devDependencies 목록에 추가한다.

-D 플래그는 기본 -P 와 동일하게 프로젝트의 '📁node_modules' 폴더에 패키지를 설치하지만,

패키지명을 dependencies 가 아닌 'devDependencies' 에 기록한다는 차이가 있습니다.

ex) npm i -D react

npm install 패키지명 -D

 

❓ devDependencies와 dependencies의 차이

      - dependencies : 실제 코드에도 포함되며, 앱 구동을 위해 필요한 의존성 파일들
      - devDependencies : 실제 코드에 포함되지 않고, 개발 단계에만 필요한 의존성 파일들

 


📌 설치된 확장 모듈(패키지) 관리

모듈 설치 후 최신 버전에 대한 업데이트나 필요없는 모듈 삭제 등의 관리가 필요합니다.

 

📦 설치된 모듈패키지 업데이트

설치 되어있는 모듈에 대한 버전 업데이트를 할 수 있습니다.

'-g'를 옵션을 붙히면 글로벌 업데이트

npm update <module_name>

 

📦 특정 버전으로 모듈 설치 및 업데이트

모듈을 특정 버전으로 설치하거나 이미 설치되어있는 모듈을 특정 버전으로 업데이트 할 수 있습니다.
버전을 특정하지 않으면 항상 최신 버전으로 자동 설치되는데 

해당 모듈의 최신 버전이 버그가 많고 호환성이 떨어지는 경우 

임의로 몇 단계 낮은 버전의 모듈을 설치하는 경우가 종종 있습니다.

npm install <module_name>@<version>
npm i <module_name>@<version>

// npm install gulp@4.0.1
// npm i gulp@4.0.1

 

📦 설치된 모듈패키지 삭제

설치한 모듈을 삭제할 수 있습니다.

'-g'를 옵션을 붙히면 글로벌 삭제

npm uninstall <module_name>

 

📦 사용하지 않는 패키지모듈 삭제

prune은 프로젝트와 관련 없는 npm package를 제거 할 때 사용한다.

1) '📁package.json' 파일dependencies에 패키지들을 코드 지운다.

2) 터미널 → 'npm prune' 해당 패키지 삭제된다. (node_modules파일 안 해당 패키지 삭제됨)

npm prune

 

📦 패키지모듈 정보 확인

패키지의 세부 정보를 파악하고자 할 때 사용하는 명령어 입니다.
전역(global) 또는 지역(local)으로 설치가 되지 않은 패키지의 정보 확인도 가능하며, 

만약 패키지가 npm에 등록되어있지 않다면 404에러 메시지를 출력합니다.

npm info <module_name>

 

📦 설치된 패키지버전 확인

현재 설치된 패키지 버전뿐만 아니라 dependencies 구조 표시

ex) 추가적으로 더 설치해보자 → npm i ts-node react-router
      ├── react-router@6.26.0
      ├── ts-node@10.9.2
      └── typescript@5.5.4
               * ts-node가 기존에 깔려있어도 해당 명령어 날리면 호환되는 버전으로 업데이트 된다.

npm ls

 


📌 npm 명령어 정리

터미널에서 npm 명령어를 실행하면 

npm으로 활용할 수 있는 모든 명령어를 확인할 수 있습니다.

npm	// npm만 입력 후 엔터
명령어 설명
npm init package.json 생성
npm install
npm i
npm 모듈을 로컬(현재 프로젝트 내부)에 설치

● 옵션으로 --save / -S, --save-dev / -D를 사용 가능
--save / -S
자동으로 dependency에 추가됨
--save-dev / -D
devDependencies에 추가. 개발 환경에서만 사용하는 모듈
npm uninstall moduleName 설치한 모듈 삭제
npm dedupe 중복된 모듈 정리
npm root node_modules의 위치를 알려줌
npm oudated 오래된 패키지의 존재 유무를 알려줌
npm ls (+ 패키지명) 패키지 조회
(패키지의 유무와 어떤 dependecies인지 알려줌)
npm cache (clean --force) npm 내의 cache 확인 (캐시 삭제)
npm rebuild npm 재 설치
npm -v
npm - version
버전 확인
npm start package.json의 
scripts에 있는 start명령어 실행
npm stop 실행 중인 npm 중지
npm restart 재 시작
npm run (명령어) 그 이외의 scripts 실행
npm config (list) npm 설정 조작 (현재 설정 조회)

 

 


3. npx 명령어

노트패키지 실행 명령어 (Node Package eXecute)

npx는 명령줄에서 직접 로컬로 설치된 명령줄 도구를 실행할 수 있도록 

npm에서 제공하는 명령어/툴입니다.

npx는 npm@5.2.0에서부터 사용할 수 있게 되었습니다. 

Node.js 도구를 전역에 설치하지 않고도 실행할 수 있게 해줍니다.

npm을 좀 더 편하게 사용하기 위해서 npm에서 제공해주는 하나의 도구입니다.

npx는 외부 라이브러리를 설치하는게 아닌 실행하는 개념이다.

주로 프로젝트를 새로 실행하는경우 미리 완성된 외부 라이브러리를 실행하여 세팅한다. 
(react-create-app .. 등등)

 

npm = Package Manager (관리) - 노드 패키지 매니저로 외부 라이브러리를 관리한다. 
npx = Package Runner (실행) - 노드 페이지 Excute로 외부 라이버러리를 실행한다. 

 

📌 npx 패키지 실행

'📁 node_modules/.bin ' 폴더에 있는 바이너리를 실행시킨다. 

만약 이것이 없다면 이를 위한 Node.js 패키지를 임시로 설치한다.

ex) npx ts-node test.ts → 'test.ts'파일 실행해줌

npx 패키지명 내프로젝트명

📌 npm 와 npx 차이

  • npm : 패키지 관리자, 전역적
  • npx  : 패키지 실행자, 일회성

💡 npm (Node Package Manager)

        패키지를 로컬의 node_modules에 설치하여 프로젝트의 의존성을 관리합니다.

        ● npm install express : express 패키지를 설치
        ● npm install -g typescript : TypeScript를 전역으로 설치

 

💡 npx (Node Package Execute)

        패키지를 일시적으로 실행하고 로컬에 저장하지 않습니다.

        ● npx create-react-app my-app : create-react-app 패키지를 설치하지 않고 React 프로젝트 생성
        ● npx eslint . : 설치하지 않은 ESLint를 실행

        ● npx http-server : 설치하지 않은 http-server를 실행하여 간단한 웹 서버 실행

 

npm npx
npm을 통해 패키지를 실행하려면
package.json에 해당 패키지를 지정하고
로컬에 설치해야 한다.
패키지는 패키지를 설치하지 않고도 실행할 수 있으며
npm패키지 러너이므로 아직 설치되지 않은 
패키지가 있으면 자동으로 설치 된다.
npm에서
create-react-app을 사용하려면
npm install create-react-app 다음
create-react-app myApp(설치필요)
명령을 사용한다.

npm install -g create-react-app
create-react-app my-app
➡️ 먼저 create-react-app을 전역으로 설치한 다음
➡️ 새로운 리액트 프로젝트를 생성한다.
npx에서는
npx create-react-app myApp처럼
설치하지 않고 사용할 수 있다.
이 명령은 모든 앱의 수명 주기에서 
한 번만 필요하다.

npx create-react-app my-app

➡️ create-react-app을 전역으로 설치하지 않고
➡️ 최신 버전을 즉시 실행하여
      새로운 리액트 프로젝트를 생성.
npm은 패키지를 설치하는데
사용하는 도구
npx는 패키지를 실행하는데
사용하는 도구
npm에서 사용하는 패키지는
전역적(Globally)으로 설치(--save 옵션)되므로
장기적으로 관리에 주의 필요
npx에서 사용하는 패키지는
전역적으로 설치되지 않으므로
장기적 관리에 주의 필요

📌 npx 동작방식

  1. NPX로 실행하고자 하는 패키지가 현재 실행 경로에 존재하는지 파악한다.
  2. 만약 존재한다면, 패키지를 실행해준다.
  3. 없다면, 패키지가 존재하지 않는다는 의미이므로 
    패키지의 최신 버젼을 설치하고 실행해준 뒤 
    자동으로 삭제해줍니다.

728x90
반응형