TypeORM

25gStroy·2022년 1월 7일

typeORM이란?

TypeORM은 node.js에서 실행되고 typeScript로 작성된 객체 관계형 매퍼라이브러리 입니다.
TypeORM은 MySQL, PostgreSQL, MariaDB, SQLite,MS SQL Server, ORACLE, SAP Hana 및 WebSql과 같은 여러 데이터베이스를 지원합니다.

ORM?

객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업입니다.

ORM을 이용한 개발은 객체와 데이터베이스의 변형에 유연하게 사용할 수 있다.

TypeORM 특징과 장점

  • 모델을 기반으로 데이터베이스를 테이블 체계를 자동으로 생성합니다.

  • 데이터베이스에서 개체를 쉽게 삽입 업데이트 및 삭제 할 수 있습니다.

  • 테이블 간의 매핑(1:1,1:n, n:m)을 만듭니다.

  • 간단한 CLI 명령을 제공합니다.

  • TypeORM은 간단한 코딩으로 ORM 프레임 워크를 사용하기 쉽습니다.

  • TypeORM은 다른 모듈과 쉽게 통합됩니다.

TypeORM에 필요한 모듈들

  • @nestjs/typeorm
  • pg
  • Postgres
npm install pg typeorm @nestjs/typeorm --save

doc
https://docs.nestjs.com/techniques/database

사용 예시

Repository 생성하기

  • 생성시 Repository 클래스를 Extends 해줍니다.
  • @EntityRepository()
    - 클래스를 사용자 정의 저장소로 선언하는 데 사용됩니다.
    사용자 지정저장소는 일부 특정 엔티티를관리하거나 일반 저장소 일 수 있습니다.
  • 생성한 Repository를 다른곳에서도 사용할 수 있기 위해서 module에서 importgownqslek.

TypeORM 레파지토리 공식 문서 주소

  • http://typeorm.delightful.studio/classes/_repository_repository_.repository.html

    • 기본적으로 DB에서 일어나는 일들은 Service가아닌 Repository에서처리를 해야한다.
    • Repository 패턴으로 처리... Service단에 db처리 로직이 있으면 안된다 Repository에서 db처리를하고 Service단에서 처리된 데이터를 받아서 처리를한 후에 Controller로 넘겨주는 방식으로 해야 결합도가 느슨해 진다.

EX

  • 모듈
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { BoardRepository } from './board.repository';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
@Module({
  imports: [TypeOrmModule.forFeature([BoardRepository])],
  controllers: [BoardsController],
  providers: [BoardsService],
})
export class BoardsModule {}
  • 레파지토리
import { EntityRepository, Repository } from "typeorm";
import { Board } from "./board.entity";

@EntityRepository(Board)
export class BoardRepository extends Repository<Board>{

}
  • 엔티티
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import { BoardStatus } from './board.model';

@Entity()
export class Board extends BaseEntity {
  @PrimaryGeneratedColumn() //pk 명시
  id: number;

  @Column()
  title: string;

  @Column()
  description: string;
  @Column()
  status: BoardStatus;
}

-app.modeul

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { BoardsModule } from './boards/boards.module';
import { typeORMConfig } from './configs/typeorm.config';
@Module({
  imports: [TypeOrmModule.forRoot(typeORMConfig), BoardsModule],
})
export class AppModule {}
  • service 에 DI해주기
@Injectable()
export class BoardsService {

    constructor(
      @InjectRepository(BoardRepository)
      private boardRepository: BoardRepository,
    ){}
profile
애기 개발자

0개의 댓글