Node.js
는 서버가 아닌JavaScript
실행기
Node.js
는 V8
이라는 JavaScript
엔진 위에서 동작하는 JavaScript Runtime
으로 JavaScript
를 서버에서도 사용할 수 있도록 만든 프로그램이다.
서버를 구성할 때는 Node.js
가 자체적으로 제공하는 http
모듈을 사용한다.
즉 Node.js
는 JavaScript
를 사용하기 때문에 Front-End
, Back-End
모두 같은 언어로 처리할 수 있다.
서버에 비대칭적으로 많은 양의 요청이 오는 경우에 CPU, 메모리...등이 부족해서 서버가 터지는 현상이 발생한다.
그래서 대규모 프로젝트에서는 특정 API에 요청이 집중되었을 때를 대비하여 Server Scaling
작업을 한다.
Server Scaling
은 새로운 컴퓨터를 생성해 기존 컴퓨터를 복사하여 한쪽으로 몰리는 요청을 분산시켜 문제를 해결한다.
하지만 Server Scaling
은 한쪽에 집중되는 요청만을 위해 필요없는 부분까지 복사하기 때문에 불필요한 낭비가 발생한다.
그래서 프로젝트에서는 Front
, Back
을 분리하여 Front
에서는 SSR(Server Side Rendering)
, Back
에서는 API
서버로서 데이터만 가공하여 전달하는 역활만 담당한다.
서버의 기본은 Front
서버가 요청을 보내면 응답을 하는것이다.
즉 요청과 응답은 1:1
대응되어야 하며 응답을 보내지 않는다면 특정 시간(30초정도) 후에 브라우저가 자동으로 응답 실패로 처리한다.
또한 여러 데이터가 필요하다면 한번에 묶어서 응답하거나, 여러번 요청을 보내 조금씩 응답하는 방법을 사용해야 한다.
Node.js
를 사용해 서버를 구현하는 방법은 다음과 같다.
프로젝트에 Front
와는 개별적인 Back
폴더를 생성한 뒤 아래 명령어를 통해 package.json
파일을 생성한다.
npm init
루트 디렉토리에 app.js
파일을 생성하여 아래와 같이 http
모듈을 생성한다.
이 때 주의해야할 점은 Front
와 달리 Node.js
에서는 Webpack
을 사용하지 않기 때문에 import
문이 아닌 require
문을 그대로 사용한다.
const http = require('http');
// req(request) = 브라우저, 프론트서버에서의 요청에 대한 정보
// res(response) = 응답에 대한 정보
const server = http.createServer((req, res) => {
// req.url = URL 경로
// req. method = HTTP가 지원하는 요청 방식
console.log(req.url, req.method);
if (req.method === 'GET') {
if (req.url === '/api/posts') {
}
} else if (req.method === 'POST') {
if (req.url === 'api/post') {
}
} else if (req.method === 'DELETE') {
if (req.url === 'api/post') {
}
}
res.write('<h1>Hello Node1</h1>');
res.write('<h2>Hello Node2</h2>');
res.write('<h3>Hello Node3</h3>'); // write는 여러줄사용할때
res.end('<h4>Hello Node4</h4>'); // end는 마지막에만
});
server.listen(3065, () => {
console.log('서버 실행 중');
});
아래 명령어를 통해 http
모듈을 실행하면 모듈 Runtime
이 코드를 실행하여 http
가 서벼역활을 다음과 같이 수행한다.
node app.js
Node.js
가 실행하는 파일이 속한 디렉터리를 감시하며 파일이 수정되면 자동으로 애플리케이션을 재시작하는 확장 모듈
서버의 코드를 변경하면 서버는 이전 코드를 기억하고 있기 때문에 자동으로 반영이 되지 않는다.
그래서 코드를 수정하면 서버를 재실행해야하는 번거로움이 있는데 Nodemon
을 사용하면 이러한 단점을 해결하여 재시작 없이 코드를 자동 반영 할수 있다.
Nodemon
은 Node Monitor
의 약자로, 이름 그대로 디렉터리를 감시하면서 파일이 수정되면 자동으로 노드 애플리케이션을 재시작한다.
Nodemon
을 설치npm i -D nodemon
package.json
의 scripts
부분을 아래와 같이 수정"scripts" {
"dev": "nodemon app"
}
Nodemon
을 실행npm run dev
Node.js 공식문서
Node.js 교과서 - 조현영
React로 NodeBird SNS 만들기 - 제로초