NestJS 프로젝트에 TypeORM 설정 및 적용 가이드

2022. 11. 20. 15:00Backend Development/NestJS

반응형

"ORM 없는 백엔드 애플리케이션은 마치 나침반 없는 항해와 같습니다."
방향을 잡기 힘들고, 작업이 더디게 느껴질 수 있습니다. ORM은 데이터베이스와의 소통을 훨씬 더 단순하고 명확하게 만들어주는 도구입니다. 이번 글에서는 ORM 중 하나인 TypeORM을 사용하여 효율적인 백엔드 애플리케이션을 구축하는 방법을 알아보겠습니다.


1. TypeORM 설정을 위한 라이브러리 설치

프로젝트에 TypeORM을 사용하기 위해 필요한 라이브러리를 설치합니다. 아래 명령어를 실행하세요:

npm i -s typeorm mysql2 @nestjs/typeorm
npm i -D typeorm-model-generator

설치된 라이브러리 설명

  • typeorm: ORM 라이브러리로, 객체와 데이터베이스 테이블 간의 매핑을 지원합니다.
  • mysql2: MySQL 데이터베이스와 Node.js 간의 통신을 지원하는 라이브러리입니다.
  • @nestjs/typeorm: NestJS와 TypeORM을 쉽게 통합하도록 래핑된 모듈입니다.
  • typeorm-model-generator: 기존 데이터베이스 테이블에서 엔터티(Entity)를 자동 생성해주는 도구입니다. (참고: 이 라이브러리는 더 이상 업데이트되지 않으니 사용에 주의하세요.)

2. 데이터베이스 테이블에서 엔터티 생성

이미 만들어진 데이터베이스 테이블을 기반으로 TypeORM 엔터티를 생성하려면 typeorm-model-generator를 사용합니다.

엔터티 생성 명령어

npx typeorm-model-generator -d {DB 이름} -u {DB 사용자} -p {포트 번호} -e {DB 엔진} -o {엔터티 저장 경로} --index true --noConfig true --cf pascal --ce pascal --cp camel --strictMode

주요 옵션 설명

  • -d: 데이터베이스 이름.
  • -u: 데이터베이스 사용자 이름.
  • -p: 데이터베이스 포트 번호.
  • -e: 데이터베이스 엔진(MySQL, PostgreSQL 등).
  • -o: 생성된 엔터티 파일이 저장될 경로.

참고

각 옵션의 역할은 npx typeorm-model-generator --help 명령어를 통해 확인할 수 있습니다.


3. TypeORM 설정

엔터티를 생성한 후, NestJS의 AppModule에서 TypeORM 설정을 진행합니다.

설정 코드

import * as Entity from '@/entities';
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql', // 데이터베이스 종류
      host: '127.0.0.1', // 호스트 주소
      port: 3306, // 포트 번호
      username: 'admin', // DB 사용자 이름
      password: '', // 비밀번호
      database: 'dbs', // 데이터베이스 이름
      entities: Object.values(Entity), // 엔터티 파일 목록
      synchronize: false, // 스키마 동기화 (운영 환경에서는 false 권장)
      logging: true, // 쿼리 로그 활성화
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

주요 설정 옵션

  • type: 데이터베이스 종류를 설정합니다 (예: MySQL).
  • entities: 엔터티 파일의 경로 또는 객체 배열.
  • synchronize: 데이터베이스 스키마를 자동 동기화합니다. 운영 환경에서는 false로 설정하는 것이 좋습니다.
  • logging: 실행된 쿼리를 콘솔에 출력합니다. 디버깅 시 유용합니다.

4. 애플리케이션 실행 및 확인

설정을 완료한 후, 애플리케이션을 실행하여 TypeORM이 정상적으로 초기화되었는지 확인합니다.

실행 명령어

npm run start

실행 시 로그

다음과 같은 로그가 출력되면 성공입니다! 🎉

TypeOrmModule dependencies initialized
SELECT VERSION() AS `version`

5. 추가 팁: typeorm-model-generator 대체 방법

typeorm-model-generator는 업데이트가 중단된 상태이므로, 아래와 같은 대체 방법을 고려할 수 있습니다:

  1. 엔터티를 직접 작성: 데이터베이스 테이블의 구조를 참고하여 TypeORM 엔터티를 수동으로 작성.
  2. TypeORM CLI 사용: typeorm migration:generate 명령어를 활용하여 엔터티를 생성하거나 관리.

마무리

이 글에서는 NestJSTypeORM을 사용해 백엔드 애플리케이션을 설정하는 방법을 다뤘습니다. TypeORM을 활용하면 데이터베이스와의 연동을 객체 지향적으로 처리할 수 있어 개발 생산성과 유지보수성을 크게 향상시킬 수 있습니다.

추가적인 질문이나 의견이 있다면 댓글로 남겨주세요! 😊

반응형