express는 노드js를 위한 간결한 웹프레임워크이다.
많은 프레임워크들이 express를 기반으로 동작한다.
npm i express
import express from "express";
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
app.use(express.json([options]))
옵션을 변경하려면 이 문서를 참조하면된다.
기본적으로 필요한 옵션이 default로 설정되어 있기 때문에 보통은 단순히 express.json()
로 사용한다.
쿠키 파서는 헤더에 동봉된 쿠키 필드를 파싱한 뒤 req.cookies에 할당한다.
npm i cookie-parser
import express from "express";
import cookieParser from "cookie-parser";
const app = express();
app.use(cookieParser());
cors에러가 발생하지 않도록 백엔드 서버는 응답 헤더에 Acess-Control-Allow-Origin
와 값을 할당해줘야 한다. 추가적으로 옵션까지 설정해줘야 할 경우 작성이 번거러우며 휴먼에러가 발생할 가능성이 높아진다.
이러한 작업을 단순화시켜주는 모듈이 cors
이다.
npm i cors
import cors from "cors";
app.use(cors([options]));
options에는 cors헤더에 작성되는 옵션이 object형식으로 입력된다.
const corsOption = {
origin: config.cors.allowedOrigin,
optionSuccessStatus: 200,
credentials: true,
};
app.use(cors(corsOption));
코드가 더러워지지 않도록 옵션 변수를 따로 정의해서 작성해주면 좋다.
morgan은 http 요청의 로그를 남겨주는 모듈이다.
npm i morgan
app.use(morgan("tiny"))
tiny옵션은 간단한 로그를 남겨준다.
method와 url그리고 응답코드를 포함한다.
app.use(morgan("combined"))
combined 옵션을 사용하면 표준 Apache combined 로그를 출력한다.
좀 더 요청에 대한 구체적인 내용들을 로그로 남기는데 요청시간, 호스트의 sw 정보 등을 포함한다.
이외에도 common
,dev
,short
등의 옵션이 있다.
헤더를 사용한 보안은 헤더를 직접 작성해줌으로써 설정을 할 수 있다. 하지만 직접 작성하는 것은 휴먼에러를 일으킬 가능성이 높을 뿐더러 이 역시 노가다 작업이다.
helmet이 이러한 비효율성을 보완해준다.
helmet은 보안 관련 http헤더를 설정하는 더 작은 크기의 미들웨어 함수 9개를 모은것이다.
Helmet을 이용하면 HTTP 헤더를 적절히 설정하여 몇 가지 잘 알려진 웹 취약성으로부터 앱을 보호할 수 있다.
npm install helmet
import helmet from "helmet";
const app = express();
app.use(helmet());
옵션을 설정하지 않으면 csp, expectCt, hpkp, noCache, referrerPplicy는 적용되지 않는다.
app.use(helmet.noCache());
app.use(helmet.hpkp());
이런 방식으로 추가적인 보안 설정을 해줄 수 있다.