node.js
node.js는 javascript runtime
자바스크립트 코드를 실행할 수 있게 해줌
자바스크립트로 서버 돌리는 방법
1. back 폴더에 app.js 생성
// back/app.js
const http = require('http'); // npm에서 설치를 안해도 node가 제공하는 모듈임
http.createServer((req, res) => {
});
http.listen(3000);
자바스크립트로 http를 가지고 코딩을 해주면 app.js를 실행하는 순간
node runtime이 코드를 실행해서 http가 서버 역할을 해주는 것이지 node자체가 서버는 아님
node는 서버가 아님
🍋 node에서는 import export 안쓰고 require와 module.exports 사용함 |
2. 터미널에서 back폴더로 가서 npm init
(프로젝트가 있으면 항상 npm init을 해서 package.json을 만들어야함)
package name: react-nodebird-back
author: parkbogum
만들면 back폴더안에 packag.json 생성됨
3. back/app.js
요기에 백엔드 서버 만들예정(만든다기보다는 실행)
// back/app.js
const http = require('http');
const server = http.createServer((req, res) => {
console.log(req.url, req.method);
res.end('Hello node');
});
server.listen(3000);
👉 터미널에 node app.js 입력
터미널이 멈춘것 같은 느낌이 들면 실행 된 상태!
확실하게 확인하고 싶다면 console.log추가해주고 다시 실행시켜보기!
// back/app.js
const http = require('http');
const server = http.createServer((req, res) => {
console.log(req.url, req.method);
res.end('Hello node');
});
server.listen(3000, () => {
console.log('서버 실행 중');
});
4. localhost:3000 url 들어가보기
// back/app.js
const http = require('http');
const server = http.createServer((req, res) => {
console.log(req.url, req.method);
res.write('<h1>Hello node1</h1>');
res.write('<h2>Hello node2</h2>');
res.end('<h3>Hello node3</h3>'); // 마지막은 end로! 한번만 사용해야함!
});
server.listen(3000, () => {
console.log('서버 실행 중');
});
req : 브라우저나 프론트 서버에서 온 요청 정보가 들어있음
res : 응답할 정보가 들어있음
페이지 내용 변경있을시 서버 재시작 필요!
프론트는 next에서 업데이트를 해주는데 백엔드는 안됨
5. 작동 원리
// back/app.js
const http = require('http');
const server = http.createServer((req, res) => {
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.end('<h3>Hello node3</h3>');
});
server.listen(3000, () => {
console.log('서버 실행 중');
});
createServer에서 요청 method나 url에 따라서 응답을 해줌
res.write('<h1>Hello node1</h1>');
res.write('<h2>Hello node2</h2>');
res.end('<h3>Hello node3</h3>');
요청 한 번당 응답 한 번이 기본임
아예 안보내도 안됨(무조건 보내야함)
응답을 안 보내면 특정 시간(30초 정도) 후에 브라우저가 자동으로 응답 실패 처리
그렇다면 여러개의 데이터가 필요한 경우?
1️⃣ 한번 요청을 보내서 여러개의 데이터를 동시에 묶어서 한번에 응답을 하거나
2️⃣ 요청을 여러번 보내서 거기에 각각 조금씩 응답을 여러번 하거나
그렇다고 응답을 두번 보내면 안됨!(res.end는 한번만 사용)
👉 기본 node http 보다 코드를 깔끔하고 구조적으로 짤 수 있는 express를 사용하는것 추천
❓백엔드와 프론트엔드 서버를 나누는 이유❓
프론트엔드에서도 처리할 순 있지만 나누는 이유는 대규모 앱이 되었을 경우를 대비하기 위함
요청이 많이오는 서버만 따로 늘리는것 가능(자원을 아낄 수 있음)
SSL은 프론트엔드가 담당하고 백엔드는 api 서버로 데이터만 db에서 가져와서 가공하거나 그대로 전달해 줌
'프로그래밍 > NodeJS' 카테고리의 다른 글
express 사용하여 get, post, delete 요청 (0) | 2021.05.04 |
---|---|
express로 라우팅하기 (0) | 2021.05.04 |
[nodemon 에러] nodemon 실행 안됨 (0) | 2021.04.29 |
[VSCode 실행시 에러] nodemon : 'nodemon' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바.. (0) | 2021.04.27 |
webpack (0) | 2021.02.09 |