[typescript] Nest.js에서 타입스크립트로 데이터베이스 연동하기

Nest.js는 TypeScript로 구축된 서버 애플리케이션을 위한 프레임워크이며, 데이터베이스와의 연동을 위해 TypeORM, Prisma, Sequelize 등 다양한 옵션이 제공됩니다. 이번 글에서는 Nest.js와 TypeORM을 사용하여 데이터베이스를 연동하는 방법에 대해 알아보겠습니다.

TypeORM 설정하기

TypeORM은 TypeScript와 JavaScript를 위한 ORM(Object-Relational Mapping) 라이브러리로, Nest.js 프로젝트에 TypeORM을 설치하고 설정하는 방법은 다음과 같습니다.

먼저, TypeORM과 PostgreSQL을 설치합니다.

npm install --save @nestjs/typeorm typeorm pg

다음으로, TypeOrmModule.forRoot()를 사용하여 TypeORM 설정을 추가합니다. TypeOrmModule.forRoot()는 TypeORM 모듈을 글로벌하게 설정하기 위해 사용됩니다.

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

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'password',
      database: 'nestjs',
      entities: [],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

위 예제에서는 PostgreSQL 데이터베이스에 연결하기 위한 설정을 보여주고 있습니다. 필요에 따라 다른 데이터베이스 엔진을 사용할 수 있습니다.

Entity 작성하기

Nest.js에서 TypeORM을 사용하기 위해서는 엔티티(Entity) 클래스를 작성해야 합니다. 엔티티 클래스는 데이터베이스 테이블을 나타내며, 이를 통해 TypeORM은 데이터베이스와의 상호작용을 처리합니다.

간단한 사용자(User) 엔티티를 작성하는 예제는 다음과 같습니다.

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

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

  @Column()
  name: string;
  
  @Column()
  email: string;
}

위 예제에서는 @Entity() 데코레이터를 사용하여 엔티티로 선언하고, @PrimaryGeneratedColumn()@Column() 데코레이터를 사용하여 각각 기본키와 컬럼을 정의합니다.

Repository 사용하기

마지막으로, TypeORM Repository를 사용하여 데이터베이스 연산을 수행할 수 있습니다. Repository는 엔티티에 대한 데이터베이스 작업을 추상화하는데 사용됩니다.

예를 들어, 사용자 엔티티에 접근하여 데이터를 조회하는 방법은 다음과 같습니다.

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

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

  async findAll(): Promise<User[]> {
    return this.usersRepository.find();
  }

  async findOne(id: number): Promise<User> {
    return this.usersRepository.findOne(id);
  }
}

위 예제에서는 @InjectRepository(User) 데코레이터를 이용하여 UserRepository를 주입하고, find()findOne() 메서드를 통해 데이터베이스에서 데이터를 조회하는 방법을 보여주고 있습니다.

이제 위의 예제를 참고하여 Nest.js와 TypeORM을 사용하여 데이터베이스를 연동해보세요!

참고 자료