개발/ORM
[ORM] TypeORM
2juhyunju
2022. 8. 22. 11:50
TypeORM
보통 express로 개발을 하게 되면 ORM 으로 sequelize를 많이 사용했다. 하지만 Nest.js 를 사용하게 되면 많이 사용하는것이 TypeORM이다. TypeORM은 많은 데이터베이스를 지원하고 Active Record , Data Mapper 패턴을 모두 지원한다.
결론적으로 결합도가 낮고 높은 수준의 확장 가능한 어플리케이션을 작성할 수 있다. ORM에 관한것은 이미 전에 포스팅을 했기 때문에 참고 하면 좋을 것 같다.
* Active Record : 모델 그 자체에 쿼리 메소드를 정의하고 모델의 메소드를 사용하여 객체를 관리 하는 방식
* Data Mapper : 분리된 클래스에 쿼리 메소드를 정의하는 방식 Repository를 이용하여 객체를 관리 하는 방식
설치 ( Nest.js 및 mysql )
// mysql
yarn add @nestjs/typeorm typeorm mysql2 // yarn add 명령어로 설치
entity 만들기
// 간단하게 Board entity 만들기
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Board {
@PrimaryGeneratedColumn('increment') // PK 지정
number: number;
@Column() // @Column() 를 사용해줘야 컬럼으로 인식한다.
writer: string;
@Column()
title: string;
@Column()
contents: string;
}
app.module.ts 설정
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { BoardsModule } from './apis/boards/boards.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Board } from './apis/boards/entities/board.entity';
@Module({
imports: [
BoardsModule,
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: 'src/commons/graphql/schema.gql',
}),
TypeOrmModule.forRoot({
type: 'mysql', // 어떤 데이터베이스를 사용할것인지 정의
host: 'localhost',
port: 3306,
username: 'root',
password: '비밀번호',
database: '데이터베이스 이름',
entities: [Board], // 어떤 엔티티를 사용할것인지 정의
synchronize: true, // 작동할 때마다 DB Schema가 자동으로 만들어지게 할것인가 설정
logging: true, // 로깅을 할것인가 설정
}),
],
})
export class AppModule {}
확실히 이전에 시퀄라이저도 써보고 이번에 TypeORM을 사용했는데 테이블을 만드는것과 엔티티 관계를 설정해주는것은 내가 느끼기에 TypeORM이 더 편한것 같다는 느낌이 들었다. 좀 더 깊게 공부하면 많은 도움이 될것 같다.