Repository Pattern
TypeORM
이 Repository Pattern을 지원하기 때문에 Entity와 Repository를 사용할 수 있다.
Entity
@Entity
를 포함한 엔티티 관련 데코레이터도 TypeORM이 지원해준다.
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
address: string;
}
Custom Repository
리포지토리를 만들건데, Custom repository
로 만들어 본다. 커스텀 리포지토리는 리포지토리 클래스를 확장할 수 있다.
커스텀 리포지토리는 데이터베이스와 소통하는 메서드를 리포지토리에 생성할 수 있다.
즉, 기본적으로 지원하는 CRUD외에 다른 메서드를 만들 수 있게 된다.
커스텀 리포지토리를 만들 때는 @EntityRepository
데코레이터를 사용하고, 기본 Repository
클래스를 상속받아 확장한다.
import { EntityRepository, Repository } from 'typeorm';
import { User } from './user.entity';
@EntityRepository(User)
export class UserRepository extends Repository<User> {}
Nest에 위임
위에서 만든 리포지토리를 Nest에게 알려준다..TypeOrmModule.forFeature
메서드를 사용해 리포지토리 클래스를 전달한다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserRepository } from './entity/user.repository';
import { UserService } from './service/user.service';
import { UserController } from './user.controller';
@Module({
imports: [TypeOrmModule.forFeature([UserRepository])],
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}
Service
서비스클래스의 생성자에서 리포지토리 의존관계 주입을 한다.
커스텀 리포지토리는
@InjectRepository
데코레이터를 사용하지 않는다.
import { Injectable } from '@nestjs/common';
import { UserRepository } from '../entity/user.repository';
@Injectable()
export class UserService {
constructor(private userRepository: UserRepository) {}
}
Custom Repository를 사용하지 않는다면..
리포지토리 클래스를 작성할 필요 없다. TypeOrmModule.forFeature
메서드에 엔티티를 전달한다.
@Module({
imports: [TypeOrmModule.forFeature([User])],
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}
그리고 서비스 클래스에서 의존관계 주입 시, @InjectRepository
데코레이터를 사용한다.
@Injectable()
export class UsersService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
}
'STUDY > Node.js' 카테고리의 다른 글
NestJS | API 만들기 (3) - Exception, Validation (0) | 2021.08.06 |
---|---|
NestJS | API 만들기 (2) - Controller (0) | 2021.08.04 |
NestJS | 데이터베이스 연결, 설정 정보를 입력하는 다양한 방법... (database connection) (0) | 2021.07.28 |
NestJS | 유효성 검사 validation (0) | 2021.07.23 |
NestJS | 프로젝트 생성 및 실행 (0) | 2021.07.22 |