Blog

[Node.js] 1. 기본 환경구축 및 Express 프레임워크 설치

Category
Author
citeFred
citeFred
PinOnMain
1 more property
Node.js로 백엔드 구성하기
Table of Content

Node.js란?

Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. -Node.js는 공식 홈페이지-
Node.js는 비동기 이벤트 기반 JavaScript 런타임이다. - MDN
JavaScript는 HTML을 동적(Dynamic)하게 바꿔주는 기능을 하게 하는 스크립트이다.
2008년에 구글이 V8 엔진을 사용하여 크롬을 출시했는데, V8 엔진은 엄청 빨랐고, 오픈 소스로 코드도 공개되었. 그 기능을 좀 더 더해서 V8 엔진 기반에 노드 프로젝트를 시작했고, Node.js(V8)이 등장했다.
웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다.
쉽게 말해 JavaScript 기반 런타임 환경으로 브라우저 내에서 말고도 다른 환경에서 자바스크립트를 사용할 수 있게 해주는 실행환경이다.
Node.js가 자바스크립트를 컴퓨터에서 쉽게 실행시켜줬기 때문에 자바스크립트를 프로그래밍 언어처럼 사용하기 시작했다.

Node.js를 서버로 만드는 이유?

Node.js의 핵심은 크게 3가지이다.
1.
Non-blocking I/O
2.
코드가 매우 짧고 쉬워서 빠른 개발 가능
3.
웹서비스 제작에 적합
여기서 특히 Non-blocking I/O 특징을 통해 Node.js로 구현하면, 요청이 많거나 오래 걸리는 요청이 있어도 멈추거나 요청 대기시간이 없다는 것이다.
말이 어렵지만 동기방식 vs 비동기방식의 차이를 알아야 하는데, Node.js는 비동기 10를 지원하며 Single-Thread 기반으로 동작하는 서버이기 때문에 요청을 처리하면서 다음 요청을 받을 수 있다.
병렬처리를 Thread 로 처리하지 않으므로 Multi-Thread가 갖는 근원적인 문제에서 자유로운 특징이 있다.(멀티스레드는 스레드 1개의 오류가 전체 프로세스에 영향을 주는 등)

Node.js 환경 구축(MacOS기준)

1. Homebrew를 통한 NVM 설치

brew install nvm
Shell
복사
그리고 nvm 이 설치되어있는지 nvm -v 을 쳐보면 command not found : nvm 이라고 뜰 것이다.

2. bash_profile 혹은 zshrc에 nvm 환경변수 추가

nvm이 설치 되었지만 현재는 nvm이라고 터미널에 입력하면 인식하지 못하는 상태이다.
우선 nvm의 설치 경로를 확인해야 한다.
맥OS기준 homebrew 설치 경로는 /usr/local/Cellar/nvm/0.39.7 처럼 나타난다. 환경마다 일부 상이 할 수 있다 직접 finder를 통해서 경로를 확인할 필요가 있다. 일부 환경은 /opt/… 처럼 경로가 나타나기도 하기 때문에 본인의 homebrew를 통한 패키지 설치 경로는 평상시 알아두는것이 좋다.
여기서 nvm.sh 파일의 경로, nvm 파일의 경로를 확인해두어야 한다.
/usr/local/Cellar/nvm/0.39.7/nvm.sh
/usr/local/Cellar/nvm/0.39.7/etc/bash_completion.d/nvm
vim ~/.zshrc
Shell
복사
vi에디터를 통해 터미널의 환경변수/패스 설정이 필요하다.(타 GUI 에디터도 상관없다.)
다음과 같이 두개의 경로의 파일명, 확장자를 정확히 확인하고 각각 입력한다.
export NVM_DIR="$HOME/.nvm" [ -s "/usr/local/Cellar/nvm/0.39.7/nvm.sh" ] && \. "/usr/local/Cellar/nvm/0.39.7/nvm.sh" # This loads nvm [ -s "/usr/local/Cellar/nvm/0.39.7/etc/bash_completion.d/nvm" ] && \. "/usr/local/Cellar/nvm/0.39.7/etc/bash_completion.d/nvm" # This loads nvm bash_completion
Shell
복사
이후 :wq로 저장한 뒤 아래 명령어로 환경변수 설정을 적용시켜준다.
source ~/.zshrc
Shell
복사
터미널을 재시작한 뒤 nvm -v로 nvm의 환경 변수 설정이 적용된 것을 확인한다.

3. nvm 을 통한 Node.js 설치

nvm이 설치 되었으면 이를 통해 Node.js를 설치한다.
특정 버전을 명시적으로 설치 할 수도 있다.
nvm install v18.15.0
Shell
복사
lts버전(long term support)을 설치 할 수도 있다. 본인은 lts버전을 설치하고자 한다.
nvm install --lts
Shell
복사

4. Node.js, npm 설치 버전 확인

패키지, 라이브러리 등을 설치하면 항상 버전을 확인하여 정상적으로 설치된 것을 확인해야 한다. 특히 CLI 환경은 가독성이 떨어지기 때문에 더블체크는 필수이다.
node -v
Shell
복사
npm -v
Shell
복사
설치된 Node 목록을 보면 다음과 같다.
nvm ls
Shell
복사

5. Node.js 작동 확인

터미널을 통해서 간단한 Node.js 설치 상태와 정상 작동을 확인해보고자한다.
node
Shell
복사
명령어를 통해서 node 콘솔을 진입하게 된다. 이 상태가 node 런타임이 실행되고 있는 상태인 것이다.
console.log('hello')
Shell
복사
위 명령어를 입력하면 JavaScript에서 로그를 확인하던 것이 실행중인 환경처럼 나타나게 된다. 이것이 node가 실행중인 상태의 정상적인 모습이다.
VSCode 에디터를 통해 실습할 프로젝트에서 index.js라는 파일을 생성했다. 아래처럼 로그 명령어를 삽입하고 저장한 상태이다.
node app.js
Shell
복사
위 명령어를 사용하면 app.js라는 파일이 실행되는 것을 확인 할 수 있다. 이는 마치 Java에서 명령어로 자바 파일을 실행하는 것(JRE)과 비슷한 느낌이다. 결과적으로 동일한 것이라는 것 java Application.java

Express.js란?

오픈 소스 소프트웨어로 출시되었다. 웹 애플리케이션, API 개발을 위해 설계되었다. Node.js의 사실상의 표준 서버 프레임워크로 불리고 있다. - 위키백과
Express는 웹 및 모바일 애플리케이션을 위한 일련의 강력한 기능을 제공하는 간결하고 유연한 Node.js 웹 애플리케이션 프레임워크입니다. - https://expressjs.com/ko/ 공식 홈페이지
Node.js는 실행환경이라 하면 Express.js는 웹 어플리케이션을 만들 수 있는 프레임워크로 쉽게 웹 서비스를 구축 할 수 있는 도구(라이브러리 등)을 가지고 있다.

1. Express.js 설치

공식 홈페이지의 안내 처럼 npm을 통해 간단하게 설치 할 수 있다.
npm install express --save
Shell
복사
터미널에서 위 명령어로 설치하고 나면 해당 프로젝트 폴더에 package-lock.json, package.json이 생성되고 node_modules 폴더가 생성된다.

2. git, .gitignore 설정

우선 해당 프로젝트 폴더를 git으로 관리하기 위하여 초기화해준다.
git init
Plain Text
복사
Express를 설치하면서 추가된 기본 프레임워크 라이브러리들이 node_modules 폴더에 생성된다. 이 파일은 package.json을 통해서 자동으로 해당 환경에 설치되기 때문에 이 파일은 git에서 추적을 멈추고 github로도 업로드할 필요가 없다. 따라서 아래처럼 .gitignore 파일을 작성하여 불필요한 파일의 추적을 제거한다.
node_modules
Shell
복사

NVM vs NPM?

두 용어가 나타나서 혼동될 수 있지만 풀어쓰면 명확해진다.

nvm - Node Version Manager

nvm 은 Node.js 를 설치하는 툴이라 이해하자.
Node.js 의 각 버젼을 유지하면서 시스템을 구성해야 하는 경우를 위해 사용하는 경우에 많이 이용된다. 다시말해 같은 시스템 안에서 여러 Node.js 를 사용하기 위해 버젼별로 Node.js 환경을 격리시키는 역할

npm - Node Package Manager

node에서 다양한 라이브러리를 다운로드하는 패키지 매니저로 보면 된다.
노드 패키지 매니저. 간단하게 얘기하면 npm 서비스를 통하여 Node.js 로 개발된 프로그램을(npm 패키지) 편리하게 설치, 업데이트 및 삭제를 해 주는 프로그램이다.
Node.js 를 설치하면 npm 도 같이 설치된다.
Java를 기준으로 생각하면 maven과 같이 다양한 패키지들을 다운로드 할 수 있는 경로로도 알고 있으면 된다. Java의 MavenCentral처럼 npm에서도 다양한 라이브러리 의존성(node진영에선 주로 모듈이라고 부르는것 같다.)들을 검색하고 다운로드 할 수 있다.
모듈과 패키지, 라이브러리 모두 결국 함수의 집합이다. 물론 정확한 개념은 차이가 있지만 메인언어의 진영마다 통상적으로 부르는 용어의 차이가 존재하는것으로 보인다. 자바진영에서는 코드상의 동작과 관련된 개념은 대부분 메서드라는 명칭을 쓰지만 JS진영에서는 대부분 함수(function)이라고 부르는 것처럼 라이브러리나, 모듈이나 결국 특별한 기능을 하는 함수의 집합이라고 보는게 편하다.
Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio