nest.js로 대충 만들어보는 공연예매 (1)

jangdu·2023년 7월 26일
1

nest.js

목록 보기
7/11
post-thumbnail

nest.js로 대충 만들어보는 공연예매, 하며 공부

sa

nest에서의 API 흐름

  1. API 요청
  2. controller에서 -> 요청 DTO 유효성 검사
  3. 인증유무 AuthGuard로 이동 -> JWT검사
  4. service에서 비즈니스 로직 수행 (예외처리 응답)
  5. repository에서 db 관련 작업
  6. 성공, 응답을 controller로 반환 -> 응답 DTO
  7. API테스트 진행
  8. Swagger API문서 세팅 -> 요청, 응답 DTO 활용
  9. e2e테스트 -> 자동테스트 진행

ERD

API명세

회원

APImethoddescription
/api/signupPOST회원가입
/api/signinPOST로그인
/api/usersGET회원 조회
/api/showsPOST공연 등록
/api/showsGET공연 조회
/api/shows/:showIdGET공연 상세 조회
/api/shows?keyword=어쩌고GET공연 검색
/api/shows/:showId/seatsGET잔여 좌석 확인
/api/shows/:showId/seats/:seatId/reservationsPOST예매하기
/api/reservationsPOST유저 예매내역조회
/api/reservations/:reservationIdPOST상세 예매 내역 조회

Project setting

init project with nest cli

> npx nest new [projectName]

package.json

scripts

"scripts": {
    "build": "nest build",	// dist파일 만들어 빌드
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",	// local 서버에서 실행
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"	// 테스트코드 실행
  },

라이브러리

  • bcrypt: 패스워드 암호화
  • cross-env: 윈도우, 맥에서 package.json의 script에 node 명령어 작성 시 공통적으로 처리
  • @nestjs/platform-express: 프론트랑 통신 편리하게 하는 서버 라이브러리
  • passport, passport-jwt, @types/passport-jwt, @nestjs/passport, @nestjs/jwt: JWT토큰 및 검증 시 사용 라이브러리
  • typeorm, @nestjs/typeorm: typeORM 라이브러리
  • mysql2: mysql서버랑 연동하는 라이브러리
  • moment: 시간관련
  • class-validator: 유효성 검사
  • nestjs/swagger, express-basic-auth, swagger-ui-express: swaggerAPI 자동화
  • pm2: 배포환경 테스트

사용하지 않는 파일 삭제/수정

  • src/app.controller.spec.ts
  • src/service.ts
  • scr/app.controller.ts : 서비스 관련된 코드만 삭제
// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller()
export class AppController {
  @Get()
  getHello(): string {
    return 'Service Working';
  }
}
  • src/app.module.ts : 서비스 관련 코드 삭제
// src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';

@Module({
  imports: [],
  controllers: [AppController],
})
export class AppModule {}

Hot Reload 초기 세팅

참조: https://velog.io/@jangdu/nestjs-Hot-reload-%EC%B4%88%EA%B8%B0%EC%84%A4%EC%A0%95

Logger middleware초기세팅

참고: https://velog.io/@jangdu/nest.js-Logger

@nest/config

express에서 .env를 만지려면 dotenv라이브러리를 설치해서 만졌는데,
nest에서는 config라는것을 제공해서 전역으로 dotenv를 사용할 수 있는 기능을 제공해준다.

> npm i --save @nestjs/config
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot()],
})
export class AppModule {}

이제 전역에서 process.env어쩌고 쓸 수 있음

profile
대충적음 전부 나만 볼래

0개의 댓글