NestJS는 Node.js를 위한 프레임워크로서, 강력한 아키텍처 패턴을 제공하는 백엔드 애플리케이션 개발을 위해 만들어졌습니다. TypeScript를 기본적으로 지원하며, 효율적이고 확장 가능한 애플리케이션을 구축할 수 있도록 돕습니다. NestJS는 Angular에서 영감을 받아 Angular 개발자들에게 더 친숙하고 익숙한 개발 환경을 제공합니다.
NestJS의 특징은 다음과 같습니다:
1. 모듈 기반 구조: NestJS는 모듈 기반 아키텍처를 채택하여 애플리케이션을 여러 모듈로 구성할 수 있습니다. 이는 코드를 구조화하고 재사용성을 높여줍니다.
2. 강력한 의존성 주입(Dependency Injection): NestJS는 의존성 주입을 통해 컴포넌트 간의 결합도를 줄이고 테스트 용이성을 높여줍니다.
3. MVC 패턴 지원: NestJS는 Model-View-Controller 패턴을 지원하여 코드를 분리하여 유지보수성을 향상시킵니다.
4. Middleware 지원: 미들웨어를 통해 요청과 응답을 가로채고 수정할 수 있습니다.
5. Exception Filtering: 예외 필터링을 통해 예외 상황에 대한 처리를 세밀하게 제어할 수 있습니다.
6. WebSocket 지원: WebSocket을 쉽게 구현하여 실시간 양방향 통신을 지원합니다.
Prisma는 데이터베이스를 위한 현대적인 ORM(Object-Relational Mapping) 도구로서, TypeScript와 JavaScript를 지원합니다. Prisma는 데이터베이스 스키마를 기반으로 타입 세이프한 쿼리를 생성하고 데이터베이스에 대한 CRUD(Create, Read, Update, Delete) 작업을 보다 쉽고 간결하게 처리할 수 있도록 도와줍니다. 데이터베이스와의 상호작용을 추상화하여 개발자들이 더 효율적으로 데이터를 다룰 수 있습니다.
Prisma의 특징은 다음과 같습니다:
1. 타입 세이프한 쿼리: Prisma는 데이터베이스 스키마를 기반으로 TypeScript 타입을 생성하여 타입 세이프한 쿼리 작성을 지원합니다. 이로 인해 데이터베이스 관련 버그를 사전에 방지할 수 있습니다.
2. 데이터베이스 독립성: Prisma는 여러 종류의 데이터베이스를 지원하며, 데이터베이스에 종속되지 않는 독립적인 데이터베이스 관리를 가능하게 합니다.
3. 관계형 데이터베이스 지원: Prisma는 관계형 데이터베이스에서 다대다, 일대다, 다대일 등의 관계를 간편하게 다룰 수 있습니다.
4. Migrations 지원: 데이터베이스 스키마 변경을 관리하기 위한 마이그레이션 기능을 제공하여 데이터베이스 스키마의 버전 관리를 용이하게 합니다.
NestJS와 Prisma를 사용한 프
로젝트를 생성하고 설정하는 방법을 보여드리겠습니다. 아래 단계를 따라 프로젝트를 생성합니다.
NestJS 프로젝트 생성:
NestJS CLI를 사용하여 새로운 NestJS 프로젝트를 생성합니다. 터미널을 열고 다음 명령을 실행합니다.
npm install -g @nestjs/cli
nest new my-nest-prisma-project
cd my-nest-prisma-project
Prisma 설정:
프로젝트 디렉토리로 이동한 후, Prisma를 설정합니다.
# Prisma CLI 설치
npm install -g prisma
# Prisma 초기화
prisma init
위 명령을 실행하면 프로젝트 루트에 prisma
폴더가 생성됩니다. prisma/schema.prisma
파일에서 데이터베이스 스키마를 정의합니다. 예를 들어 PostgreSQL 데이터베이스를 사용하고 있다고 가정하겠습니다.
// prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL") // 환경 변수로 데이터베이스 URL을 설정하도록 추천됩니다.
}
// 모델 정의
model User {
id Int @id @default(autoincrement())
email String @unique
name String
}
데이터베이스 연결을 위해 .env
파일에 데이터베이스 URL을 설정합니다.
DATABASE_URL="postgresql://user:password@localhost:5432/dbname"
Prisma 클라이언트 생성:
Prisma CLI를 사용하여 Prisma 클라이언트를 생성합니다.
prisma generate
이 명령은 Prisma 클라이언트를 생성하고 TypeScript 타입들을 자동으로 생성합니다.
NestJS와 Prisma 통합:
NestJS에서 Prisma를 사용하려면 Prisma 클라이언트를 NestJS 애플리케이션에 주입해야 합니다. 이를 위해 app.module.ts
파일에서 PrismaService
를 생성하고, app.controller.ts
에서 Prisma를 사용하는 예시를 보여드리겠습니다.
// app.module.ts
import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';
import { AppController } from './app.controller';
@Module({
controllers: [AppController],
providers: [PrismaService],
})
export class AppModule {}
// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { PrismaService } from './prisma.service';
@Controller()
export class AppController {
constructor(private readonly prisma: PrismaService) {}
@Get()
async getUsers() {
const users = await this.prisma.user.findMany();
return users;
}
}
이제 NestJS 애플리케이션에서 Prisma를 사용할 준비가 되었습니다. NestJS와 Prisma를 통합하여 데이터베이스와의 상호작용을 편리하고 안전하게 처리할 수 있습니다.
이제 위 예시를 참고하여 NestJS와 Prisma를 활용한 프로젝트를 시작할 수 있습니다. NestJS와 Prisma는 각각의 장점을 결합하여 효율적이고 안정적인 웹 애플리케이션 개발을 지원합니다.