https://github.com/su-hwani/for10days
Express
는 프로젝트의 규모가 커질수록 개발자들 사이에서NestJS
$ npm i -g @nestjs/cli
: NestJS 전역 설치
$ nest new {projectName}
: NestJS 에서 프로젝트 생성하기
npm run start → 서버 실행
npm run start:dev → express 의 nodemon 과 동일, 서버 수정사항 자동 반영
nest g
: 자주 사용하는 템플릿 생성 명령어nest g module catiscute
: “catiscute” 라는 이름을 가진 module 을 생성해준다.nest g res users
: “users” 에 관한 CRUD 기능을 생성해준다.@Module()
= Module
모듈을 정의할 때 사용되는 데코레이터로, 클래스에 주석을 추가하여 모듈을 정의합니다.
@Controller()
= Controller → Routing 역할
ex) @Controller(’users’) → http://localhost:3000/users
@Controller() 내부에서 HTTP Method @Get, @Post …. 사용
@Get(’:id’) → http://localhost:3000/users/1 → /users/:id 로 들어온 요청을 처리
@Body () : request body 에 변수를 할당하겠다는 의미
@Param(’id’): ‘:’ 으로 시작하는 문자열은 파라미터로 인식하겠다. :id 를 id 변수에 할당한다.
컨트롤러를 정의할 때 사용되는 데코레이터로, 클래스에 주석을 추가하여 컨트롤러를 정의합니다.
@Injectable()
= Service
서비스를 정의할 때 사용되는 데코레이터로, 클래스에 주석을 추가하여 서비스를 정의합니다.
02. Nest.js에서 Prisma 사용하기 (Postgres, AWS LightSail, DBeaver)
Prisma는 Schema
Prisma introspect
Prisma migration
Prisma client
Prisma studio
MySQL
은 가장 많이 쓰는 RDBMS이자, update 성능이 Postgres보다 우수하며 간단한 처리 속도가 뛰어나다. 로드가 많거나 복잡한 쿼리는 성능이 낮은 편이다.PostgreSQL
은 update 속도가 느린 편이지만 확장성과 호환성이 좋아 데이터를 검증해야하는 시스템에서 사용하기 좋다. 또한 MVCC(다중 버전 동시성 제어)로, 로킹에 의한 병목 현상이 생기지 않아 동시성 제어에 있어서 우수하다.brew install postgresql
brew services start postgresql
[Prisma] Prisma란? / 간단시작하기 ( PostgreSQL 연결 )
migration
은 데이터베이스 스키마가 발전함에 따라, Prisma에서 작성한 스키마와 동기화된 상태로 유지하는 것이다. 즉 중간 세이브이다.
$ npx prisma migrate dev --name init
→ 데이터 손실이 일어날 수 있으니 주의!
Prisma의 장점 중 하나인 UI이다. 거의 쓸 일 없지만, 프론트에서 DB 를 보고 싶은 경우 사용!
$ npx prisma studio
위의 명령어를 입력하면 http://localhost:5555 에 UI가 생성된다.
$ nest g mo prisma
& $ nest g s prisma
prisma.module.ts
에서 Global
로 export
해서 어느 모듈에서나 provider
추가 없이 injection
이 가능!//prisma.module.ts
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';
@Global()
@Module({
providers: [PrismaService],
exports: [PrismaService],
})
export class PrismaModule {}
//prisma.service.ts
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { INestApplication } from '@nestjs/common';
@Injectable()
export class PrismaService
extends PrismaClient
implements OnModuleInit, OnModuleDestroy
{
constructor() {
super();
}
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
async enableShutdownHook(app: INestApplication) {
process.on('beforeExit', async () => {
await app.close();
});
}
}
성공..!