Express + MVC + Typescript 백엔드 개발 환경 세팅

이윤성·2021년 11월 1일
0
  1. server 폴더 생성

  2. npm init으로 package.json 생성

    • package.json 파일에 "start" = "nodemon app" 입력
  3. express, nodemon 설치

	$ npm i express
    	$ npm i -D nodemon
  • 추가설치
    -> typescript에서 node.js의 모듈을 사용하려면 @types/모듈을 따로 설치해 주어야 한다.
    1) ts-node : Typescript를 통해 Node js를 사용할 수 있게 하는 모듈
    2) @types/node : Node.js 타입을 추가해준다.
    3) @types/express : express를 ts/tsx 파일에서 사용가능하게 하는 모듈
    4) typescript
  1. tsconfig.json 파일 설정

  2. 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"), "번 포트");
});
  1. 유용한 패키지

    • 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()도 내부적으로 호출하기 때문에 쓰지 않아도 된다.

  2. 디렉토리 역할

    • www.ts : www 파일은 http 모듈에 express 모듈을 연결하고 포트를 지정하는 부분.
    • app.ts : 중간의 미들웨어를 거쳐 클라이언트의 요청을 받아 처리한 후, 다시 클라이언트에게 응답한다.
    • models : 데이터베이스 관련 코드 부분
    • controllers : 백엔드 api 로직 관련 코드 부분 / models에서 데이터를 받아 로직을 짠다
    • api : controllers에서 만든 로직을 해당 페이지에서 사용하고 라우팅을 해주는 부분
  3. Orm
    -> 많은 종류의 orm이 있지만 여기서는 TypeORM 과 sequelize를 비교
    -> 둘은 Typescript를 지원하고 생산성, 신뢰성이 높은 편이지만 실행속도가 느리고 복잡한 쿼리 작성등의 단점을 가지고 있다

    • TypeOrm
      -> Sequelize에 비해 상대적으로 속도가 빠르다
      -> 코드작성이 raw 쿼리에 좀 더 가까운 모습을 보인다.

0개의 댓글