Hello,

kok nae-ga ha-myun an-dweneun MAGIC...🧚

웹 프로그래밍/공부일지

Nest.js

✿도담도담 2023. 5. 23. 18:33

회사 숙제로 노드로 백엔드 구성하기를 받았는데~

원랜 Express를 사용할 것 같아 Express로 했는데 자유롭게 구성해도 된다기에

개인프로젝트에서 항상 사용하던 Nest.js + TypeORM으로 해보려한다. (GraphQL)까지 할까?

.

.

우선 왜 Nest.js를 선택했는지!

사실 나는 거창한 이유없이.. 프레임 워크를 선택하는 이유는 ‘편하니까’라고 생각한다.

프로젝트 협업 시 통일된 코드로 개발하기 쉽고 (프레임 워크 특징 이겠지만😅) 다른 사람 코드를

분석 하기에도 편할 수 있다.

개인적으로는 모듈단위로 관리 할 수 있는 점과 어노테이션(@)의 가독성으로

필자는 Nest.js를 좋아한다! (깔끔✨)

물론 말한 것 모두 express.js에서 구현 할 수 있다. 다만 하나하나 설정해줘야함!

Express를 wrapping한 Nest.js를 시작해보쟈. 두개재!

(wrapping 참고 : https://jeonghwan-kim.github.io/2017/10/05/diy-express-day2.html)

.

.

nest /*nest 설치 확인*/
nest g application /*application 생성*/

사실 큰 기능없이 Hello World!! 라도 찍어도 되니 서버를 구성해봐라고 했던 팀장님의 말씀은

Nest.js를 설치하기만 해도 끝나는 부분이다 😂

Express에서는 직접 구조를 잡아 주었다면 설치하나만으로도 뚞딲 만들어진다.

Express에서 직접 만든 구조

Nest.js에서는 어떤걸 사용하나 설치된 node_module을 열어봤다.

오.. 역시 빠질 수 없는 babel부터 typescript도 잘 있다.

Nest.js는 아래와 같이 실행된다.

요청 > 컨트롤러 > 서비스 > 응답

  1. main.ts 에서 App Module 을 생성하고 실행. 3000 port 에서 대기. app.module.ts 에는 컨트롤러와 서비스가 등록.
  2. 클라이언트가 endpoint(localhost:3000/) 로 request
  3. endpoint 가 '/' 인 컨트롤러 호출
  4. 컨트롤러에서 알맞은 경로로 라우팅하여 해당 핸들러로 가, 연결된 서비스를 호출
  5. 서비스가 response

.

.

라이프 사이클은 첨부 링크 참조

Nest.js 개요와 라이프 사이클

 

Nest.js 개요와 라이프 사이클

Nest.js 개요 Nest.js는 Node.js의 프레임 워크이다. 확장이 쉬우며, rest-api, graphql, microservice(non-http), websocket 의 템플릿을 cli 를 통해 자동으로 생성 해준다. Express/Fastify 기반의 서버를 제공한다. IoC를

ckanywhere.tistory.com

Swagger 성공, 에러 응답 Decorator 만들기

https://devnm.tistory.com/21?category=1258201 

 

[고스락 티켓 2.0] nestjs swagger 같은 코드 여러 응답 예시 만들기 (1) - @ApiProperty로 객체 만들기

스웨거에서 같은 코드의 응답은 예시를 여러개를 넣지를 못한다. 위처럼 기술한경우 하나만 적힌다. 또한 응답 예시 (Example Value ) 를 어느 경우엔 어떤 응답이 온다고 알려주고 싶으면 content 부

devnm.tistory.com

 


TypeORM (feat. mysql)

npm install --save @nestjs/typeorm typeorm mysql2

NestJS | TypeORM, Mysql 연동하기

나는 정보를 숨기기 위해 2번으로 진행하였는데

MissingDriverError: Wrong driver: "undefined" given.

해당 오류가 나기 시작…🥹

ormconfig.json을 자동으로 찾는다고 했는데…이놈이 못 찾는것 같아서 아래처럼 방법은 바꾸어주었다.

import { TypeOrmModuleOptions } from '@nestjs/typeorm'

const ormconfig: TypeOrmModuleOptions = {
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'root',
  password: '',
  database: '',
  entities: [
    'dist/**/*.entity{.ts,.js}'
  ],
  synchronize: true
}
  
export default ormconfig