본문 바로가기

🐸 Node.js 란?

공식 문서에 따르면,
"Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다." 라고 설명하고 있다.

 

💡 Chrome V8 JavaScript 엔진

구글에서 제작한 자바스크립트 엔진
여기서 자바스크립트 엔진이란 자바스크립트 코드를 실행하는 프로그램 또는 인터프리터를 뜻한다.

 

💡 JavaScript 런타임

런타임은 프로그래밍 언어가 구동되는 환경을 말한다.
즉, JavaScript 언어가 구동되는 환경.

 

종합하자면,
Node.js는 Javascript 를 실행 시킬 수 있도록 하는 오픈소스 서버 환경이다.
로컬 컴퓨터에서 JavaScript 로 개발을 하고싶다면 Node.js 를 설치해야한다.

 

🤓 Java를 개발하기 위해 JRE(JVM) 를 설치하는 것과 같은 원리이다!

🐸 Node.js 특징

  • 무료이다.
  • OS 에 종속적이지 않다.
  • 비동기 프로그래밍을 사용한다.
  • 단일 스레드(single-threaded)
  • non-blocking

🐸 Node.js 설치

Node.js 공식 홈페이지에서 다운로드 가능하다.

설치 후 node -v 를 명령 프롬프트(CMD) 창에서 실행시켜보면
현재 설치된 node의 버전이 나올텐데, 이러면 Node.js 가 정상적으로 설치되었다는 의미이다.

node -v 실행 결과

🐸 HTTP 서버 구축 및 실행

const http = require('http');

const server = http.createServer((request, response) => {
    response.writeHead(200, {'Content-Type':'text/html'});
    response.end('Hello node.js!');
});

server.listen(8080, () => {
    console.log('Server is running');
})

Node.js로 간단한 HTTP 웹 서버를 구축해보자.


파일을 하나 파서 위와 같이 입력해준다.
나는 server.js 라고 파일을 생성했다.

const http = require('http');

Node.js의 내장 http 모듈을 http 변수에 담아온다.

const server = http.createServer((request, response) => {
    response.writeHead(200, {'Content-Type':'text/html'});
    response.end('Hello node.js!');
});

http 모듈에 정의 되어 있는 createServer 함수로 서버를 생성한다.


response.writeHead 메소드는 http 응답 객체에 헤더를 정의하는 메소드이다.


200이라는 숫자값은 웹서버에 들어오는 어떤 요청에 대해 정상적으로 값을 리턴할 때 사용하는 http 상태 코드이다.
즉, 오류가 없이 서버에서 처리가 정상적으로 완료되면 200 코드를 담아서 응답헤더를 설정해 주게 될 것이다.

 

{'Content-Type' : 'text/html'} 값은 응답 컨텐츠의 타입이 텍스트이고 html 형태라는 것을 정의한다.

 

response.end() 메소드는 'Hello node.js!' 라는 컨텐츠를 담아 브라우저에 전달한다.

server.listen(8080, () => {
    console.log('Server is running');
})

server.listen() 메소드로 포트 8080으로 서버를 실행하고, 서버가 실행될 때 'Server is running'이라는 문구를 콘솔에 띄우게 한다.

 

Node.js는 CLI(command line interface)에서 node 명령어로 실행가능하다.
파일을 생성한 위치로 이동하여 아래 명령어를 실행시켜보자.

> node server.js

node 서버 실행 시 결과 화면

'Server is running'이라는 콘솔 문구가 정상적으로 출력되는 걸 확인할 수 있었다!🎉

브라우저로 8080 포트로 접속했을 때 결과 화면

8080포트로 접속했을 때 브라우저에서도 Hello node.js! 문구가 정상적으로 출력되는 걸 확인할 수 있었다!!🎉

🐸 NPM이란?

NPM은 node package manager의 줄임말이다.
말 그대로 노드 패키지 관리자라는 뜻.

Node.js 를 설치하면 자동으로 설치된다.

 

💡 Node Package

Node.js 환경에서 사용가능한 모듈(라이브러리)를 의미한다.

모듈/라이브러리 관련해서는 예전에 포스팅한 적 있다. 이 게시글을 참고!

쉽게 설명하기 위해 예를 들자면...
안드로이드 폰으로 어플을 다운 받기 위해 우린 구글 플레이 스토어를 이용한다.
여기서 안드로이드는 Node.js 가 되겠고,
어플은 패키지,
구글 플레이 스토어는 NPM이라고 할 수 있겠다.

 

NPM은 즉, Node.js 환경에서 사용 가능한 패키지를 다운 받을 수 있게 하는 도구이다.
다운 받아진 모듈들은 ./node_modules 에 설치된다.
아래 명령으로 모듈을 다운 받을 수 있다.
(installi 로 줄여 쓸 수 있다.)

> npm install [모듈 이름]
옵션 설명
-P, --save, --save-prod, --production default 옵션이기 때문에 생략가능. package.jsondependencies 에 모듈이 정의된다.
-g, --global 프로젝트가 아닌 시스템 전역적으로 모듈이 설치된다.
전역 node_modules폴더 경로는 npm root -g 를 통해 찾을 수 있다.
-g 옵션 사용 시 package.json에 의존성 목록이 기록되지 않는다.
-D, --save-dev 개발용으로만 사용되는 모듈을 설치할 때 사용한다.
package.jsondevDependencies 에 모듈이 정의된다. 배포 시 해당 모듈들은 포함되지 않는다.

이 외에도 다른 옵션들은 공식문서에서 확인할 수 있다.

 

💡 npx? yarn?

npx : 
npm에서 제공하는 것으로, npm이 설치되어 있다면 npx 도 자동으로 설치되어 있다. (npm 5.2 버전부터)
글로벌한 모듈 및 보일러플레이트(자주 변경되는 모듈)을 관리할 때 사용된다. 
yarn: 속도나 안정성 측면에서 npm보다 좋은 노드 패키지 관리자이다. 따로 install 해줘야한다. 
페이스북에서 리액트 개발 시 불편한 점을 개선하기 위해 개발하였다.

🐸 package.json이란?

npm install 옵션을 설명하면서 package.json에 대해 언급했는데,
이 package.json 에 대해 알아보자.

 

package.json이란 패키지 매니저(npm, yarn)을 통해 설치한 모듈들의 의존성을 관리하는 JSON 형식의 파일이다.
name, version, description, author, license 등 프로젝트 정보 및 설치한 모듈을 정의할 수 있다.

 

모듈을 관리하는 파일이기 때문에,
npm으로 모듈 다운로드 시 package.json 에 입력된다.
정의된 모듈들을 다운로드 받고 싶다면 npm install 시켜주면 된다.

 

보통 Node.js 를 필요로하는 프레임워크로 프로젝트를 생성할 시,
자동으로 package.json이 만들어진다.
하지만 그냥 Node.js 환경에서 npm 모듈을 추가하고 관리하고 싶을 땐 아래 명령어로 직접 만들어줘야한다.

npm init

🐸 package-lock.json이란?

package.json이 모듈의 버전을 관리하는 파일이란 건 알았다!

그럼 함께 보이던 package-lock.json은 뭘까?

 

package-lock.json 은 package.json 과 같이 모듈의 버전을 관리하는 파일이다.

node_modules 나 package.json이 수정될 때마다 자동 생성된다.

 

🤓 package.json 과 package-lock.json 의 차이

👉 package.json은 모듈의 버전을 정의할 때, '~4.16.1' 또는 '^2.16.0' 같은 version range 를 사용한다.

(정확한 버전도 표기 가능)

👉 package-lock.json 은 정확한 버전을 명시하고 있다.

 

💡 version range

버전의 이상, 미만 등을 나타낼 수 있는 방법

🤓 package-lock.json 이 필요한 이유

package.json에 명확한 버전을 입력하면 package-lock.json이 필요 없지 않을까?

하지만 package.json에 항상 명확한 버전을 입력한다면,

모든 개발자의 환경에서 버전 업데이트가 일어날 때마다 npm install을 해줘야한다.

 

각자 미묘하게 다른 버전은 pacakge.json의 version range 라는 이점을 사용해 개발하고,

버전 문제로 큰 버그가 생긴다면 package-lock.json으로 버전을 명확히 일치시켜 해결할 수 있다.

 

package-lock.json 이 존재한다면, npm install  시 packag.json이 아닌 package-lock.json 의 버전대로 install 된다!

🐸 NVM이란?

Node Version Manager.
말 그대로 노드 버전을 관리해주는 도구이다.

 

여러 프로젝트를 진행하다보면,
어떤 프로젝트는 오래 되어서 ES5/6을 지원하지 않는 Node.js 버전을 사용하고 있고,
어떤 프로젝트는 구현 시작한지 얼마되지 않아 최신 Node.js 버전을 사용하는 경우가 있다.
이럴 때 Node.js 버전을 휙휙 바꿨으면~ 싶은데,
그때 사용하는 게 바로 NVM 이다.

 

NVM 은 여기 서 설치할 수 있다.
공식문서에 굉장히 잘 나와 있지만,
NVM 사용법에 대해 간단히 알아보자.

버전 확인

nvm -v 

위 명령어로 nvm 의 버전을 확인할 수 있다.
버전이 제대로 뜬다면 nvm 이 올바르게 설치되었다는 뜻이다.
2022년 8월 8일을 기준으로, 1.1.9 버전이 제일 최신 버전이다.

 

🚨 참고
Windows 10 환경에서 1.1.9 버전에 nvm use 명령어가 수행되지 않는 버그가 있다. 참고
다운그레이드하거나, 관리자 권한으로 명령 프롬프트를 열어 실행하면 잘 작동되니 알아둘 것!

Node.js 다운로드

nvm install [version] 

위 명령어로 원하는 버전의 Node.js 를 다운 받을 수 있다.

install 된 Node.js 확인

nvm list

다운 받은 Node.js 목록을 확인할 수 있다.

Node.js 버전 변경

nvm use [version]

다운 받은 Node.js 중 사용하고픈 버전을 use 하면 된다.

🐸 Express.js 란?

Express는 라우팅과 미들웨어 기반인 경량형 Node.js 웹 프레임워크이다. 

쉽게 설명하자면, 

Node.js  서버 구축을 쉽게 도와주는 프레임워크이다.

(프레임워크 개념을 잘 모르겠다면 이 게시글을 참고!)

 

Express 는 프레임워크라 각종 라이브러리를 내장하고 있다.

때문에 좀 더 편하게 서버 구축이 가능하다.

Express 설치

npm install express

간단한 Express 서버 구현

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

위와 같은 js 파일을 작성하고, node 명령어로 실행시키면 Express 서버가 작동한다.

node index.js

이번 포스팅에선 Node.js, NPM, NVM에 대해서 알아보았다.

댓글/하트/피드백은 언제나 환영입니다!👼

 

 

참조

 

 

Seize the day!

Spring MVC | Spring Boot | Spring Security | Mysql | Oracle | PostgreSQL | Vue.js | Nuxt.js | React.js | TypeScript | JSP | Frontend | Backend | Full Stack | 자기계발 | 미라클 모닝 | 일상