MySQL은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다.다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로서 오라클이 관리 및 지원하고 있으며, Qt처럼 이중 라이선스가 적용된다. 하나의 옵션은 GPL이며, GPL 이외의 라이선스로 적용시키려는 경우 전통적인 지적재산권 라이선스의 적용을 받는다. -위키백과
아래 사이트 가서 인스톨러 다운로드
자세한 내용은 따로 다루겠다.
TypeORM은 node.js에서 실행되고 TypeScript로 작성된 객체 관계현 매퍼 라이브러리이다.
TypeORM은 MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana 및 WebSQL과 같은 여러 데이터베이스를 지원 한다.
객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업이다.
ORM을 이용한 개발은 객체와 데이터베이스의 변형에 유연하게 사용할 수 있다.
npm i --save @nest/typeorm typeorm mysql2
NestJS에서 TypeORM을 사용하기 위해 연동 시켜주는 모듈
typeORM 모듈
mysql 모듈
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const typeORMConfig: TypeOrmModuleOptions ={
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [__dirname + '/../**/*.entity.{js.ts}'],
synchronize:true
}
app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BoardsModule } from './boards/boards.module';
import { typeORMConfig } from './configs/typeorm.config';
@Module({
imports: [
TypeOrmModule.forRoot(typeORMConfig),
BoardsModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
./boards/board.entity.ts
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Board extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
description: string;
}
이제 Entity 클래스 Board가 생성 되었다.
TypeORM은 데이터베이스의 Board Entity에 해당하는 테이블을 자동으로 생성하고 board로 이름으로 지정한다.
Reposotory는 Entity 개체와 함께 작동하며, 엔티티 찾기, 삽입, 업데이트, 삭제 등을 처리한다.
공식 문서 주소
데이터베이스에 관련 된일은 서비스가 아닌 Repository에서 해주면 된다. 이것을 Repository Pattern이라고도 부른다.
'./boards/boares.repository.ts'
import { EntityRepository, Repository } from 'typeorm';
import { Board } from './boards.entity';
@EntityRepository(Board)
export class BoardRepository extends Repository<Board> {
}
./boards/board.module.ts
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 {}
오늘은 지금까지 데이터를 메모리에 보관을 했지만 이제부터는 애플리세이션에 데이터베이스를 연결해서 데이터베이스에 보관하기 위해 여러 설정들을 해주었다.
설정이 복작하지만 TypeORM 을 통해 SQL문을 직접 작성하지 않아도, 데이터베이스와 통신을 간편하게 할 수 있어서 다행이다.