이전 글에서 웹 서버인 Nginx에 대해 살펴 봤으니 이번엔 백엔드를 환경을 구축할 Node.js를 알아 보고 환경 구축까지 진행해 보겠습니다.
Node.js는 Chrome V8 javascript 엔진으로 빌드된 Javascript Runtime이다.
이게 무슨 말인가...
Node.js는 Chrome의 V8 엔진을 이용해 Javascript로 브라우저가 아닌 서버를 구축하고 서버에서 JS가 작동되도록 해주는 런타임 환경(플랫폼)이라는 말이다!!
Node.JS의 강점 중 하나는 바로 Non-Bloking I/O 입니다.
Blocking I/O vs. Non-blocking I/O
- Blocking I/O: 한 번에 하나의 작업만 처리하고, 해당 작업이 완료될 때까지 다음 작업으로 넘어가지 않습니다. 대표적으로 동기식 I/O 작업이 여기에 속합니다.
- Non-blocking I/O: 여러 작업을 동시에 처리하며, 작업이 완료되기를 기다리지 않고 다음 작업으로 계속 진행 합니다. 비동기식 I/O 작업이 여기에 속합니다.
Non-Bloking I/O은 모든 요청을 한번에 받되, 순서와 상관없이 처리 속도가 빠른 것부터 결과를 보여줍니다.
Node.js의 Event Loop
- Node.js는 이벤트 루프(Event Loop)라는 메커니즘을 사용하여 Non-blocking I/O를 구현 합니다.
- 이벤트 루프(Event Loop)란 비동기 I/O 작업을 처리하고 단일 스레드에서 여러 작업을 동시에 처리할 수 있도록 도와주는 핵심 메커니즘입니다.
- 이벤트 루프는 이벤트를 계속해서 감지하고, 이벤트가 발생하면 해당 이벤트에 대한 콜백 함수를 실행 합니다.
비동기식 콜백(Callback):
- Node.js에서는 비동기식 작업을 수행할 때 콜백 함수를 사용 합니다.
- 예를 들어, 파일을 읽는 작업을 비동기식으로 수행할 때 다음과 같이 콜백 함수를 사용하게 됩니다.
- 아래 코드에서 파일을 읽는 동안 프로그램은 다음 작업으로 넘어가며, 파일 읽기가 완료되면 콜백 함수가 실행됩니다.
const fs = require('fs');
// 비동기식 파일 읽기
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
console.log('Reading file...');
Node.js 설치하기
설치 경로 : https://nodejs.org/en
Node.js를 설치하게 되면 node와 관련된 package를 관리해주는 npm(Node Package Manager) 까지 함께 설치 됩니다.
npm 으로 Express 프레임 워크를 설치 해줍니다.
Express란 HTTP와 관련된 컴포넌트를 기반으로 하는 웹 어플리케이션 프레임워크 이며 Node.js를 사용해 쉽게 서버를 구성할 수 있게 만든 클래스와 라이브러리를 가진 프로그램 입니다.
저는 Visulstudio Code환경에서 터미널에 다음 명령어를 입력해 설치 했습니다.
npm init는 패키지(애플리케이션)를 생성(초기화) 해주는 명령어 이며
--save 명령어는 package.json의 "dependencies"에 "express" 항목을 추가해 줍니다.
npm 버전 5.0.0부터는 기본적으로 --save패키지가 섹션에 자동으로 추가되므로 플래그가 더 이상 필요하지 않습니다 .
npm init
npm install express --save
package.json : 이 파일은 프로젝트에 대한 여러 가지 정보와 의존성 패키지, 스크립트 등을 정의하는데 사용됩니다.
main 항목을 server.js로 변경해 줍니다.
{
"name": "node_server",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"express": "^4.18.2"
}
}
package-lock.json
node_modules에 있는 모듈들에 대한 버전 정보들을 가지고 있습니다. 이 버전 정보들은 설치되는 모듈 간의 의존성 처리에 사용됩니다. 그리고 npm install 명령어를 이용해 모듈들을 설치할 때마다 package-lock.json 파일은 업데이트됩니다.
Node.js의 패키지(애플리케이션)에 Entry Point 파일 만들기
Entry Point 파일은 프로젝트의 메인 파일(entry point)이 되는 파일이며 package.json의 main항목에서 설정할 수 있습니다.
Express를 설치한 폴더에 server.js 파일을 생성합니다.
파일 만들기
const express = require('express')
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('hello from Node.js Server!')
})
app.listen(PORT, () =>{
console.log(`Server is running on http://localhost:${PORT}`);
})
- require() : 다른 모듈을 가져옵니다. 현재 코드에서는 express를 가져옵니다.
- app : express 어플리케이션을 만들기 위해 가져온 express를 호출합니다.
- PORT : 서버가 실행될 포트 번호를 3000으로 지정합니다.
- app.get(): HTTP GET 요청이 '/' 경로로 오면 서버는 'hello from Node.js Server!'라는 텍스트를 응답으로 보냅니다. 이는 간단한 라우팅을 설정하는 부분입니다.
- app.listen(): 서버를 특정 포트(3000)에서 실행합니다. 서버를 시작하고 해당 포트에서 들어오는 요청을 수신할 수 있도록 합니다.
Entry Point 파일 생성이 완료 되었다면 이제 npm start로 server.js를 실행합니다.
웹 브라우저에서 http://localhost:3000을 입력합니다.
nodemon 모듈 설치하기
nodemon은 NodeJS의 파일이 수정되는걸 감지해 자동으로 리로드 해주는 편리한 도구입니다.
npm install nodemon
package.json scrpit 변경
"start": "nodemon index.js"
'BACK END' 카테고리의 다른 글
Docker + Node.js + Nginx 1 (0) | 2023.12.10 |
---|---|
Node.js Multer (2) | 2023.12.10 |
HTTP multipart/form-data (1) | 2023.12.10 |
Nginx 분석 (0) | 2023.12.09 |
Android Studio MySQL 연동 1 (1) | 2023.12.08 |