Express
Http Web Server
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res)=>{
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});
server.listen(port, hostname, ()=>{
console.log(`Server running at http://${hostname}:${port}/`);
});
Express
http 모듈에 많은 기능을 포함하는 모듈, 뷰 템플릿을 지원한다.
express-generator를 이용하면 router, view, model, 필수 미들웨어, 에러 미들웨어등 서버를 만들 때 마다 해야하는 작업을 자동으로 생성해준다.
// 기본 서버 구축
const express = require('express');
const app = express();
const port = 3000;
//app.get의 첫 번째 매개변수는 url이다 :이름으로 지정하면 req.params.name으로 파라미터를 받을 수 있다.
app.get('/', (req, res)=>{
res.send('Hello World!');
});
// app.use만으로 로그를 찍어보면 2번 찍히는 경우가 있다. 원인은 브라우저가 favicon.ico를 같이 요청하기 때문. 이에 대한 처리도 당연히 필요하다.
app.use((req, res)=>{
res.status(404).send('File Not Found');
})
app.listen(port, ()=>{
console.log(`Server running at http://localhost:${port}`);
})
오류 처리
app.use((req, res, next)=>{
throw new Error("에러 발생 시 에러 처리 코드가 받는다.");
});
app.use((req, res, next)=>{
next(new Error("이 방법도 가능하다"));
});
app.use((err, req, res, next)=>{
// 에러처리 코드
// 비즈니스로직을 작성하고 맨 마지막에 작성해야 오류처리가 가능하다.
});
Router
- Router()를 이용해 라우터를 모듈로 만든다.
- 해당 모듈은 1차적으로 걸러진 라우터에서 일치하는 URL과 메소드에 따라 실행
- app.use로 등록한 endpoint에 따라 실행되는 라우터를 만든다.
// app.js
const express = require('express');
const userRouter = require('./routes/user');
const app = express();
app.use('/user', userRouter);
module.exports = app;
// ./routes/user.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res, next)=>{
res.send("Hello, User!!!");
});
module.exports = router;
Response
- send() : 전송된 데이터에 따라 알맞은 형식으로 변환되어 전송
- download() : 해당 파일 다운로드
- redirect() : 해당 경로 이동
- json() : json형태로 데이터 응답
- render() : 뷰 템플릿 엔진을 HTML로 렌더링
- status() : 상태코드 변경
주요 모듈
- express-validator : querystring, body 유효성 검증
- jsonwebtoken : JWT 생성 및 검증
- pino, winston : 로깅
- opossum : 서킷브레이커
- bottleneck : API 요청 수 제한
- i18next : 다국어 처리
성능 테스트
K6 사용