nestjs 1. 소개

agnusdei·2023년 7월 28일
0

NestJS와 Prisma 소개

NestJS란?

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란?

Prisma는 데이터베이스를 위한 현대적인 ORM(Object-Relational Mapping) 도구로서, TypeScript와 JavaScript를 지원합니다. Prisma는 데이터베이스 스키마를 기반으로 타입 세이프한 쿼리를 생성하고 데이터베이스에 대한 CRUD(Create, Read, Update, Delete) 작업을 보다 쉽고 간결하게 처리할 수 있도록 도와줍니다. 데이터베이스와의 상호작용을 추상화하여 개발자들이 더 효율적으로 데이터를 다룰 수 있습니다.

Prisma의 특징은 다음과 같습니다:
1. 타입 세이프한 쿼리: Prisma는 데이터베이스 스키마를 기반으로 TypeScript 타입을 생성하여 타입 세이프한 쿼리 작성을 지원합니다. 이로 인해 데이터베이스 관련 버그를 사전에 방지할 수 있습니다.
2. 데이터베이스 독립성: Prisma는 여러 종류의 데이터베이스를 지원하며, 데이터베이스에 종속되지 않는 독립적인 데이터베이스 관리를 가능하게 합니다.
3. 관계형 데이터베이스 지원: Prisma는 관계형 데이터베이스에서 다대다, 일대다, 다대일 등의 관계를 간편하게 다룰 수 있습니다.
4. Migrations 지원: 데이터베이스 스키마 변경을 관리하기 위한 마이그레이션 기능을 제공하여 데이터베이스 스키마의 버전 관리를 용이하게 합니다.

TypeScript와 Prisma ORM의 장점

TypeScript의 장점

  1. 타입 세이프: TypeScript는 정적 타입 검사를 제공하여 컴파일 시점에 타입 오류를 확인할 수 있습니다. 이는 런타임에서 발생할 수 있는 많은 오류를 사전에 방지합니다.
  2. 가독성과 유지보수성 향상: 정적 타입 정보와 명시적인 코드 작성으로 코드의 가독성이 향상되며, 대규모 프로젝트에서의 유지보수성이 증가합니다.
  3. IDE 지원: TypeScript는 타입 정보를 활용하여 강력한 IDE 지원을 제공합니다. 자동 완성, 인라인 도움말, 타입 확인 등을 통해 개발 생산성을 높여줍니다.

Prisma ORM의 장점

  1. 타입 세이프한 쿼리: Prisma는 TypeScript를 기반으로 하며, 데이터베이스 쿼리를 작성할 때 타입 안정성을 보장합니다. 이로 인해 데이터베이스 관련 버그를 사전에 방지할 수 있습니다.
  2. 간결하고 직관적인 쿼리: Prisma는 직관적인 API를 제공하여 데이터베이스 작업을 간단하고 명확하게 수행할 수 있습니다. 복잡한 SQL 쿼리 작성을 줄여줍니다.
  3. 스키마 마이그레이션: Prisma는 데이터베이스 스키마 변경에 대한 마이그레이션 지원을 제공하여 데이터베이스 스키마 관리를 편리하게 합니다.
  4. 데이터베이스 독립성: Prisma는 여러 종류의 데이터베이스를 지원하므로, 어떤 데이터베이스를 사용하더라도 일관된 API로 데이터를 조작할 수 있습니다.

프로젝트 생성과 Prisma 설정

NestJS와 Prisma를 사용한 프

로젝트를 생성하고 설정하는 방법을 보여드리겠습니다. 아래 단계를 따라 프로젝트를 생성합니다.

  1. NestJS 프로젝트 생성:
    NestJS CLI를 사용하여 새로운 NestJS 프로젝트를 생성합니다. 터미널을 열고 다음 명령을 실행합니다.

    npm install -g @nestjs/cli
    nest new my-nest-prisma-project
    cd my-nest-prisma-project
  2. 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"
  3. Prisma 클라이언트 생성:
    Prisma CLI를 사용하여 Prisma 클라이언트를 생성합니다.

    prisma generate

    이 명령은 Prisma 클라이언트를 생성하고 TypeScript 타입들을 자동으로 생성합니다.

  4. 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는 각각의 장점을 결합하여 효율적이고 안정적인 웹 애플리케이션 개발을 지원합니다.

profile
DevSecOps ⚙️ + Pentest 🚩

0개의 댓글