02) 개인프로젝트) nestjs 프로젝트 생성 및 DB 연결

Leo·2021년 2월 11일
1

Project-01

목록 보기
2/12
post-thumbnail

nest-js

최대한의 자료는 nest-js의 공식 문서를 참고하여 작성해보려고 합니다.
nest-js를 이용하여 토큰 인증 방식을 통해 rest api 구현과 graphql을 구현합니다.

시작

SeIf라는 어플리케이션을 만든 다음 해당 폴더의 루트에 들어가 vscode를 열어줍니다.

$ nest new seif
$ cd seif
$ code .

생성된 디렉터리 구조

seif
├── README.md
├── nest-cli.json
├── node_modules
├── package-lock.json
├── package.json
├── src
│   ├── app.controller.spec.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── test
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── tsconfig.build.json
└── tsconfig.json

DB 사용을 위한 연결 설정하기

Nest는 DB에 구애 받지 않아 모든 SQL or NoSQL DB와 쉽게 통합이 가능합니다.
@nestjs/typeorm 패키지를 설치하여 DB를 연결합니다.
TypeORM은 타입스크립트로 작성되어있어 Nest 프레임워크와 잘 어울립니다.
TypeORM은 여러 관계형 DB를 지원합니다. 하지만 현재 프로젝트에서는 MySQL을 사용할 예정입니다.

사용 패키지 설치

MySQL, TypeORM을 설치해 줍니다.
여기서 Mysql2를 사용하는 이유는 2는 수차적이지 않은 비동기함수의 실행 순서를 제어할수 있게 도와줍니다. Promise를 지원합니다. MySQL을 사용할 경우 다른 모듈을 설치해 줘야해 번거로울 수 있습니다.

$ npm i --save @nestjs/typeorm typeorm mysql2

테스트 코드 작성

src/app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'qwer1234@',
      database: 'test',
      entities: [],
      synchronize: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

mysql이 존재해야지 연결에 성공할 수 있습니다.
현재 연결된 위치는 로컬의 3306포트이며 root사용자의 비밀번호 qwer1234@입니다. 접속한 DB명은 test입니다.

DB커넥트 정보를 코드안에 넣어 두면 좋지 않기 때문에
따로 파일을 만들어 관리할 수 있습니다.
[ormconfig.json]파일을 이용하여 DB 접속 정보를 관리할 수 있습니다.

/ormconfig.json (package.json과 같은 레벨에서 생성)

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "qwer1234@",
  "database": "test",
  "entities": ["dist/**/*.entity{.ts,.js}"],
  "synchronize": true
}

실행하여 오류가 나는지 확인해봅니다.

$ npm run start:dev
profile
개발자

0개의 댓글