본문 바로가기
Frameworks/Nest.js

[Nest.js] MySQL Connect

by junseokoo 2025. 4. 9.

 

  • TypeORM은 PostgreSQL, Oracle, Microsoft SQL Server, SQLite 뿐만 아니라 NoSQL 도 지원한다.
  • 선택한 데이터베이스에 대해 연결된 클라이언트 API라이브러리를 설치만 해주면 된다.
  • 이 중에서 MySQL을 연동 해보자.

step 1

$ yarn add @nestjs/typeorm typeorm mysql2

step 2

// app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'test',
      entities: [],
      synchronize: true,
    }),
  ],
})
export class AppModule {}
  • 여기서 synchronize는 production 일 경우에는 false 옵션으로 꼭 바꿔주자! 안그러면 production data가 손실 될 수 있다.
  • 중요한 정보는 env로 관리하자!

step 3

  • 위 과정에 완료되면, TypeORM DataSource 및 EntityManager 객체를 전체 프로젝트에 주입할 수 있다. (모듈을 가져올 필요 없이)
  • example
// app.module.ts
import { DataSource } from 'typeorm';

@Module({
  imports: [TypeOrmModule.forRoot(), UsersModule],
})
export class AppModule {
  constructor(private dataSource: DataSource) {}
}

Repository Pattern

  • TypeORM은 Repository 디자인 패턴을 지원하며, 각 Entity에는 자체 Repository가 있다.
  • 이를 계속하려면 하나 이상의 Entity가 필요하다. User Entity를 정의해보자.
// user.entity.ts

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @Column()
  password: string;
}
  • User Entity는 다른 디렉토리에 존재한다. 이 디렉토리에서는 UserModule과 관련된 모든 파일이 있다. 모델 파일을 보관할 위치를 결정은 가능하지만, 해당 모듈 디렉토리에 해당 도메인 근처에 생성하는것이 좋다.
  • User Entity를 사용하려면 모듈 forRoot() 메서드 옵션에 Entity 배열에 삽입해서 TypeORM에게 사용을 알려줘야한다.
// user.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { User } from './user.entity';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UsersService],
  controllers: [UsersController],
})
export class UsersModule {}
  • 위의 모듈은 forFeature() 메서드를 사용하여 현재 범위에 등록된 저장소를 정의한다.
  • 이를 통해 @InjectRepository() 데코레이터를 사용하여 UserRepository를 UserService에 주입해줄 수 있다.

'Frameworks > Nest.js' 카테고리의 다른 글

[Nest.js] Module  (0) 2025.04.09
[Nest.js] Provider  (0) 2025.04.09
[Nest.js] Controller  (0) 2025.04.09
[Nest.js] Start  (0) 2025.04.09