1. nestjs 프로젝트 생성 및 database 연결

Eden·2023년 7월 29일
0

nestjs를 이용하여 backend를 구축하려고 한다
1.프로젝트 생성
webstorm을 열고 command 창에 프로젝트를 생성할 경로설정을 한다

linux/window 프로젝트 생성 명령어

(nest/npx) new projectname

window 환경에서 프로젝트 생성이 되지 않는다면 npx 뒤에 @nestjs/cli를 붙여보자

npx @nestjs/cli new projectname

명령어를 실행하면

다음과 같이 패키지 매니저를 고를 수 있다

webstorm에서 해당 프로젝트를 오픈하고
터미널창에서 해당프로젝트 경로에 npm을 설치해준다 (프로젝트 처음 오픈시 readme 파일이 열리며 설명이 나와있다)

npm install
npm run start:dev //서버 실행 명령어 (:dev 는 watch mode)
  1. database 연결
    database 모듈을 생성한다.
npm g mo modulename // g < generate, mo < module
npx @nestjs/cli g mo modulename // npm을 인식하지 못할때 npm 대신 npx @ nestjs/cli를 붙여준다
npm install --save @nestjs/typeorm typeorm pg //db연결할때 필요

데이터 베이스를 연결할때 필요한 정보들은 코드상에 공개되면 안돼 NestJSConfig를 설치하여 사용한다.
config 파일은 .env로 데이터베이스와 관련된 값들을 해당 파일에 저장해두고 사용한다.(때문에 .env파일은 git이나 다른곳에 공유되서는 안됨)

npm install --save @nestjs/config 

Config파일의 변수 타입을 지정해주기 위한 hapi_joi도 설치한다. hapi_joi는 앱이 실행될때 .env 파일에 입력된 값들의 변수 타입을 확인한다.

npm install @hapi/joi 

필요한 패키지 설치가 모두 완료되면 app.module.ts 파일에
ConfigModule을 import 시켜주는데 이때 해당 모듈이 최초로 로드될때 Joi를 이용하여 .env 파일의 값들의 유효성 검사를 실행한다.

ConfigModule.forRoot({ // forRoot는 모듈이 최초로 로드될때 최초 설정을 함
      validationSchema: Joi.object({ // validationSchema 는 유효성 검사로 config 파일에 해당 값들이 잘 들어가있는지 확인함
        POSTGRES_HOST: Joi.string().required(),
        POSTGRES_PORT: Joi.number().required(),
        POSTGRES_USER: Joi.string().required(),
        POSTGRES_PASSWORD: Joi.string().required(),
        POSTGRES_DB: Joi.string().required(),
      }),
    }),

다음으로 생성된 database module 파일을 작성한다.
TypeOrmModule (NestJS에서 TypeORM을 사용하여 데이터베이스와의 상호작용을 지원하는 모듈/ TypeORM은 TypeScript로 작성된 객체 관계 매핑(ORM) 라이브러리로, 데이터베이스와의 상호작용을 SQL 쿼리가 아닌 JavaScript/TypeScript 코드로 처리할 수 있도록 도와줌)을 import하여 데이터베이스를 연결한다.

@Module({
  imports : [
    TypeOrmModule.forRootAsync({
    imports : [ConfigModule],//사용할 다른 모듈을 지정
    inject : [ConfigService],//TypeORM 설정에 사용할 서비스나 프로바이더를 주입
    useFactory : (config:ConfigService) =>({ //TypeORM 설정을 동적으로 생성하는 팩토리 함수를 정의
      type: 'postgres',
      host: config.get('POSTGRES_HOST'),
      port: config.get('POSTGRES_PORT'),
      username: config.get('POSTGRES_USER'),
      password: config.get('POSTGRES_PASSWORD'),
      database: config.get('POSTGRES_DB'),
      entities: [__dirname + '/../**/*.entity{.ts,.js}'],
      autoLoadEntities: true, //지정된 경로에 있는 엔티티들을 자동으로 로드하도록 설정
      synchronize: true,
    })
  })]
})

이렇게 하면 nestjs 프로젝트 생성과 database 연결까지 완료된다.

profile
주섬주섬..

1개의 댓글

comment-user-thumbnail
2023년 7월 29일

정보 감사합니다.

답글 달기