체인의정석

Nest.js) Database 연동하기 본문

개발/backend

Nest.js) Database 연동하기

체인의정석 2021. 10. 15. 17:51
728x90
반응형

이제 nest.js 와 database를 연동하는 부분을 만들어 보도록 하겠다.

 

Database

Nest는 데이터베이스에 구애받지 않으므로 모든 SQL 또는 NoSQL 데이터베이스와 쉽게 통합할 수 있습니다. 선호도에 따라 다양한 옵션을 사용할 수 있습니다. 가장 일반적인 수준에서 Nest를 데이터베이스에 연결하는 것은 Express 또는 Fastify에서와 마찬가지로 데이터베이스에 적합한 Node.js 드라이버를 로드하기만 하면됩니다.

 

편의를 위해 Nest는 현재 장에서 다룰 @nestjs/typeorm  @nestjs/sequelize 패키지를 사용하여 TypeORM 및 Sequelize와 기본적으로 긴밀한 통합을 제공하며, Mongoose는 @nestjs/mongoose, 이 장에서 다룹니다. 이러한 통합은 모델/리포지토리 삽입, 테스트 가능성 및 비동기 구성과 같은 추가 NestJS 관련 기능을 제공하여 선택한 데이터베이스에 더욱 쉽게 액세스할 수 있도록 합니다.

 

ypeORM Integration

SQL 및 NoSQL 데이터베이스와의 통합을 위해 Nest는 @nestjs/typeorm 패키지를 제공합니다. Nest는 TypeScript에 사용할 수 있는 가장 성숙된 ORM(Object Relational Mapper)이기 때문에 TypeORM을 사용합니다. TypeScript로 작성되었으므로 Nest 프레임워크와 잘 통합됩니다.

 

사용을 시작하려면 먼저 필요한 종속성을 설치합니다. 이 장에서는 널리 사용되는 MySQL 관계형 DBMS를 사용하는 방법을 설명하지만 TypeORM은 PostgreSQL, Oracle, Microsoft SQL Server, SQLite, MongoDB와 같은 NoSQL 데이터베이스도 있습니다. 이 장에서 설명하는 절차는 TypeORM에서 지원하는 모든 데이터베이스에 대해 동일합니다. 선택한 데이터베이스에 연결된 클라이언트 API 라이브러리를 설치하기만 하면 됩니다

 

 

 

요약 =>

설명을 읽어보니 nestjs 에서는 typeorm을 사용하는것을 추천하고 있다. 

 

모든 종류의 db와 typeORM이 연동 되기 때문에 이 또한 편리할 것 같다. 

나온 설명 정차에 따라서 데이터베이스 연동작업을 시작하였다.

 

 

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

 

설치 후 

 

app.modules.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

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

다음과 같이 db 정보를 넣어야 한다.

 

근데 db 정보는 민감하기 때문에 환경 변수를 설정하는 파일을 따로 만들어야 한다. 

 

이 부분은 여기 환경 변수를 설정하는 부분을 읽고 한번 만들어 보겠다. 

전에 많이 써봤던 cross-env를 쓰는 방법이다.

https://huniroom.tistory.com/entry/7NestJS-Configuration-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95-nestjsconfig-cross-env-joi

 

[NestJS] Configuration 환경변수 설정 [@nestjs/config, cross-env, joi]

설치 터미널에서 Nestjs 에서 제공하는 config 패키지 설치 npm i --save @nestjs/config 환경 변수 파일을 조건에 따라 읽기 위한 패키지 설치 npm i cross-env 환경변수 유효성 검사를 위한 패키지 설치 npm i j..

huniroom.tistory.com

 

https://docs.nestjs.kr/techniques/configuration

 

네스트JS 한국어 매뉴얼 사이트

네스트JS 한국, 네스트JS Korea 한국어 매뉴얼

docs.nestjs.kr

이 부분도 같이 참고하였다.

 

두 부분은 서로 다른 설정 값으로 넣어주어야 한다. cross-env 와 type orm은 이와 같이 분리되기 때문에 아래 블로그를 참고하여 구성하도록 한다.

https://popawaw.tistory.com/170

 

TypeORM setup 과 Nestjs Config

postgresql 을 사용할 것이고 postgresql 이 설치되어 있따는 가정하에 진행 합니다. 실행 환경은 MAC OS 입니다. nestjs 에서 typeorm 을 사용하기 위해서 다음과 같이 설치합니다. npm i --save @nestjs/typeorm..

popawaw.tistory.com

 

그 결과 아래와 같은 코드가 작성되었다. 

 

app.module.ts

import { Module } from '@nestjs/common';
import { AddressesModule } from './addresses/addresses.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
// import Joi from 'joi';

@Module({
  imports: [AddressesModule],
})

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, 
      envFilePath: process.env.NODE_ENV == 'dev' ? '.env.dev' : '.env.test', 
      ignoreEnvFile: process.env.NODE_ENV === 'prod', 
      // validationSchema: Joi.object({ 
      //   NODE_ENV: Joi.string().valid('dev', 'prod').required(), 
      //   DB_HOST: Joi.string().required(), 
      //   DB_PORT: Joi.string().required(), 
      //   DB_USERNAME: Joi.string().required(), 
      //   DB_PASSWORD: Joi.string().required(), 
      //   DB_NAME: Joi.string().required(), 
      // }),
      // 비어있는 값을 막기 위한 모듈로 나중에 수정 예정
    }),
    TypeOrmModule.forRoot({
      type: 'mysql', 
      host: process.env.DB_HOST, 
      port: +process.env.DB_PORT, 
      username: process.env.DB_USERNAME, 
      password: process.env.DB_PASSWORD, 
      database: process.env.DB_NAME, 
      synchronize: true, 
      logging: true, 
      entities: [],
    }),
    AddressesModule
  ],
})

export class AppModule {}

 

joi는 유용해 보이지만 지금 시간에 쫓기고 있으므로 나중에 고도화 때 하려고 주석으로 남겨두었다.

 

npm run start:dev 를 실행하면

 

    "start:dev": "cross-env NODE_ENV=dev nest start --watch",

이렇게 환경 변수대로 값을 입력해주므로, db 정보값 노출 없이 깃허브에 올릴 수 있게 되었다.

 

나중에 다 뜯어고치겠지만, 초안은 완성되어 가고 있다.

 

이제 typeORM으로 조회를 직접 해보는 일이 남았다.

728x90
반응형

'개발 > backend' 카테고리의 다른 글

Nest.js) 정의한 entities 적용하기 service 부분 코드 수정  (0) 2021.10.18
Nest.js) type ORM , entities 정의하기  (0) 2021.10.18
Nest.js ) Modules  (0) 2021.10.15
Nest.js ) Providers  (0) 2021.10.15
Nest.js ) - Controllers  (0) 2021.10.15
Comments