Node.js와 Express기초

김민석·2026년 3월 4일

Node.js

express

node.js 기반 웹 프레임워크 요청에 따른 응답을 줌

express 기본구문

const express = require('express')
const app = express();
const port = 3000;
app.get('/',function (req,res) {
  res.send('Hello World')
}) 

app.listen(port)

localhost: 3000 접속시 hello world 보임

port

한 서버안에서 여러개 port 사용이 가능
http :80
https : 443

HTTP 메소드

요청의 목적, 종류를 알리는 수단

  • GET
  • POST

requset와 response

Get params와query

app.get('/user/:id',(req,res)=> {
	const params = req.params;
 	console.log(params.id); // q.id 는 query값으로 {id : 해당 id 값} 
  	const q = req.puery;
  	console.log(q); // localhost:3000/?q=sdfsdf 이면 sdfsd 가 나옴 
});  

Post params와 body

app.get('/user/:id',(req,res)=> {
	const params = req.params;
 	console.log(params.id); // q.id 는 quer메일y값으로 {id : 해당 id 값} 
  	const body = req.body;
  	console.log(body); // 전달해준 json값 
});  

CORS

CORS 설정 해줘야함. 안그럼 오류남 백엔드와 프론트 끼리

const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors()); // 비워놓을시  모든 요청 허용

미들웨어

미들웨어는 양 쪽을 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하는 소프트웨어, 네트워크를 통해서 연결된 여러 개의 컴퓨터에 있는 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어. 미들웨어를 잘 사용하면 애플리케이션 흐름 자유자재로 조정 가능.

body-parser

const express = require('express')
const bodyParser = require('body-parser')

const app = express()

// 폼 데이터 
app.use(bodyParser.urlencoded())

// json 파일
app.use(bodyParser.json())

app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(String(JSON.stringify(req.body, null, 2)))
})

원래는 parse하고 막 복잡했던 코드를 쉽게 request.body로 사용할 수 있게 해줌.

compression

Node.js 기반 압축 미들웨어

var compression = require('compression')
var express = require('express')

var app = express()

// compress all responses
app.use(compression())

정적파일 사용시

app.use(express.static('public');

위 코드를 사용하면 public 파일에 있는 정적 파일 즉 이미지 같은 파일들을 사용할 수 있음.

에러처리


app.get('*',function(req, res, next){
  fs.readdir('./data', function(err, filelist){
    if(err) {
      next(err)
    }
    req.list = filelist;
    next();
  });
});


app.use(function(req,res,next) {
  res.status(404).send("Sorry can't find!");
} 

// 에러를 핸들링하기 위한 미들웨어
app.use(function(err,req,res,next) {
	console.error(err.stack)
  	res.status(500).send("Sever Error");
}
       

여기서 err는 next()를 통해서 받을 에러가 담긴다. 위 코드에서 err를 통해 next(err)를 전달해주면 아래 에러를 핸들링하기 위한 미들웨어를 통해 생긴 에러에 대한 값을 반환 해주는 형식.

라우터 분리

routes폴더 생성 후 분리할 즉 공통적인 라우터들을 모아 하나의 js 파일로 분리 그다음 main.js 다시 와서

var topicRouter = require('/routes/topic');
app.use('/topic',topicRouter);

topic으로 시작하는 주소들에게 topicRouter라는 미들웨어 적용 시킨다는 뜻. 그 다음 해당 topic.js 파일에서

var express = require('express');
var router = express.Router()
// 그외 코드

module.exports = router

여기서 원래 topic/create 등등 붙었던 것들을 toplic을 뺴주고 하면된다. 이렇게하면 하나의 js 파일에 코드들을 모아놓는 것이 아닌 라우터별로 나눌 수 있다.

Express 보안

  • Express 최신버전 유지하기
  • HTTPS 추천
  • Use Helmet 사용
  • use Cookies securely
    • express-session
    • cookie-session

이 두 모듈의 주요 차이점은 쿠키 세션 데이터를 저장하는 방식입니다. express-session 미들웨어는 세션 데이터를 서버에 저장하며, 쿠키 자체에는 세션 데이터가 아니라 세션 ID만 저장됩니다. 기본적으로 express-session은 인메모리 스토리지를 이용하며, 프로덕션 환경용으로 설계되지 않았습니다. 프로덕션 환경에서는 확장 가능한 session-store를 설정해야 합니다.

이와 반대로 cookie-session 미들웨어는 쿠키 기반의 스토리지를 구현하며, 하나의 세션 키가 아니라 세션 전체를 쿠키에 직렬화합니다. cookie-session은 세션 데이터의 크기가 상대적으로 작으며 (오브젝트가 아닌) 원시 값으로 쉽게 인코딩 가능할 때에만 사용하십시오. 브라우저는 하나의 쿠키당 4,096바이트 이상을 지원하도록 되어 있지만, 한계를 초과하지 않도록 보장하려면 하나의 도메인당 4,093바이트의 크기를 초과하지 마십시오. 또한, 클라이언트에서 쿠키 데이터를 볼 수 있으므로, 쿠키 데이터를 안전하게 또는 모호하게 유지해야 할 이유가 있는 경우에는 express-session을 선택하는 것이 더 나을 수 있습니다.

express generator

npm install -g express-generator를 실행하면 express를 쉽게 생성할 수 있다.
기본 세팅을 다 해줌.

profile
나만의 기록장

0개의 댓글