NestJS+GraphQL+TypeORM : 설치 및 기본 개념

Outclass·2022년 7월 6일
0

NestJS+GraphQL+TypeORM 

목록 보기
2/16
post-custom-banner

1. GraphQL?

  • GraphQL은 API용 쿼리 언어로, GraphQL 자체는 하나의 스펙이며 여러 구현체들이 있다.
  • 주로 Apollo와 함께 사용된다.
  • 데이터를 선택적으로 전송하고 받아올 수 있도록 해준다.

2. TypeORM?

  • nodejs에서 많이 이용되는 ORM(Object–relational mapping)라이브러리
  • nodejs외에도 다양한 프레임워크에서 돌아감

TypeORM vs sequelize

  • typeORM은 타입스크립트로 작성됨
  • sequelize는 자바스크립트로 작성됨
  • 아무래도 typeORM이 타입스크립트와 더 잘 결합할 것으로 보임

3. 설치하기

typeORM설치

npm i @nestjs/typeorm typeorm

db설치

//postgres를 쓸 경우
npm i pg

GraphQL설치

$ npm i @nestjs/graphql @nestjs/apollo graphql apollo-server-express

4. Entity

DB테이블에 매핑되는 클래스, 데이터에 저장되는 데이터의 형태를 보여주는 일종의 모델

Entity is a class that maps to a database table (or collection when using MongoDB) - 공식문서

TypeORM Entity with GraphQL in NestJS

NestJS에서는 Entity와 graphQL의 스키마 생성을 함께 할 수 있다!

import { Field, ObjectType } from '@nestjs/graphql';
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@ObjectType
@Entity
export class SampleEntity {
  @Field((type) => Number)
  @PrimaryGeneratedColumn()
  id: number;

  @Field((is) => String)
  @Column()
  name: string;
  ...
}
  • @ObjectType과 @Field는 graphQl의 스키마 생성을 위한 데코레이터
  • @Entity와 @Column은 Entity생성을 위한 데코레이터
  • @PrimaryGeneratedColumn()의 경우 PK를 지정하는 데코레이터

data mapper vs active record

typeORM을 이용해서 db와 상호작용하는 두가지의 패턴

  • active record 패턴의 경우 단순하고 비교적 작은 프로젝트에 더 적합
  • data mapper 패턴의 경우 대규모 프로젝트의 유지보수 더 적합
  • typeORM을 NestJS와 함께 사용하는 경우 data mapper패턴을 사용하는 것이 더 좋다(고 한다. repository를 다룰 수 있는 모듈이 있어서라는데 더 써봐야 할듯)
profile
When you stop having big dreams that’s when you’ve died, despite not being buried yet.
post-custom-banner

0개의 댓글