Nest.js

Nest.js - TypeORM 설정

jaewoo 2023. 11. 26. 16:09

TypeORM 은 Node.js 환경에서 사용되는 객체 관계 매핑 라이브러리이다.

Nest.js에서 적용하는 방법

1. npm 으로 typeorm 라이브러리 다운

2. AppModule에 TypeOrmModule.forRoot({}); 설정 (db 연결정보 및 엔티티 위치)

3. Entity 정의

4. 사용하려는 모듈에 TypeOrmModule.forFeature([엔티티]) 등록

5. 해당 모듈에 속한 클래스 생성자에서 @InjectRepository(엔티티) 를 통해 해당 엔티티에 대한 레포지토리를 주입 받아 사용

 

 

코드

1. TypeORM 및 데이터베이스 드라이버 설치

npm install --save @nestjs/typeorm typeorm mysql

 

2. TypeORM 모듈 등록

 - AppModle 에서 TypeOrmModule을 임포트하고 설정한다. forRoot 메소드를 사용하여 데이터베이스 연결 설정

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

@Module({
	imports: [
    	TypeOrmModule.forRoot({
        	type: 'mysql',
            host: 'localhost',
            port: 3306,
            username: '사용자',
            password: '비번',
            database: '스키마',
            entities: [__dirname + '/**/*.entity{.ts,.js}'], // 엔티티 파일 경로
       		synchronize: true,
        }),
        // 다른 모듈들
    ],
})
export class AppModule{}

 

 

3. Entity 정의

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

@Entity()
export class User{
	@PrimaryGeneratedColumn()
    id: number;
    
    @Column()
    name: string;
    
    @Column()
    email: string;
}

 

 

4. Repository 사용

- 레포지토리를 다른 모듈에서 사용하려면 사용하려는 모듈 클래스에 TypeOrmModue.forFeature([엔티티]) 를 해줘야한다.

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entitys/user.entity';
import { UserService } from './user.service';

@Module({
	imports: [TypeOrmModue.forFeature([User])],
    providers:[UserService],
})
export class UserModule{}

 

5. Service 클래스에서 @InjectRepository 를 통해 주입받아 사용

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './entitys/user.entity';

@Injectable()
export class UserService{
	constructor(
    	@InjectRepository(User)
        private userRepository: Repository<User>,
    ){}
}