server 폴더 생성
npm init으로 package.json 생성
express, nodemon 설치
$ npm i express
$ npm i -D nodemon
tsconfig.json 파일 설정
app.ts 기본 설정
import * as express from "express";
const app = express();
app.set("port", process.env.PORT || 5000);
app.get("/",(req,res) => {
res.send("Hello, Express");
});
app.use((err, req, res, next)=> {
console.log(err);
res.status(500).send(err.message);
});
app.listen(app.get("port"), () => {
console.log(app.get("port"), "번 포트");
});
유용한 패키지
morgan
-> 미들웨어
-> 요청과 응답에 대한 정보를 콘솔에 기록 ( 예시: GET / 500 7.409 ms - 50 )
app.use(morgan("dev")); // 사용방법
// 개발환경에서 dev, 배포 환경에서 combined 애용
cookie-parser
-> 미들웨어
-> 요청에 동봉된 쿠키를 해석해 req.cookies 객체로 만듬
-> 예시로 name=zerocho 쿠키가 온다면 req.cookies는 {name: 'zerocho'가 된다
-> cookieParser(비밀키)와 같이 첫 번째 인수로 비밀키를 넣을 수 있음
-> 서명된 쿠키가 있는 경우, 제공한 비밀 키를 통해 해당 쿠키가 내 서버가 만든 쿠키임을 검증할 수 있음(이 때 서명된 쿠키는, req.cookies가 아니라 req.signedCookies 객체 들어있음
express-session
-> 미들웨어,
dotenv
-> 미들웨어가 아님, process.env 관리 모듈
-> .env 파일을 읽어 process.env로 만든다
-> process.env.COOKIE_SECRET에 cookiesecret 값이 할당(키= 값 형식)
-> process.env를 별도의 파일로 관리하는 이유는 보안과 설정의 편의성 때문 / 소스코드가 유출 되었을 때 비밀 키를 지키기위해 사용
body-parser
-> 요청의 본문에 있는 데이터를 해석하여 req.body 객체로 만들어주는 미들웨어
-> 보통 form 데이터나 AJAX 요청의 데이터를 처리
-> 그러나 멀티 파트(이미지, 동영상, 파일) 데이터는 처리 x(이 경우는 multer 모듈 사용 필요)
-> 익스프레스 4.16.0 버전부터 익스프레스에 내장되어 있어 설치 필요가 없다
-> 단, JSON, URL-encoded 형식 데이터 외에 Raw, Text 형식의 데이터일 경우 설치 필요
추가내용
-> 위의 설치하는 패키지들은 req, res, next가 내부에 들어 있고 next()도 내부적으로 호출하기 때문에 쓰지 않아도 된다.
디렉토리 역할
Orm
-> 많은 종류의 orm이 있지만 여기서는 TypeORM 과 sequelize를 비교
-> 둘은 Typescript를 지원하고 생산성, 신뢰성이 높은 편이지만 실행속도가 느리고 복잡한 쿼리 작성등의 단점을 가지고 있다