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)
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 연결까지 완료된다.
정보 감사합니다.