NestJs, TypeORM으로 DB 연결하기

김재훈·2022년 6월 5일
0

NestJS

목록 보기
3/3
post-thumbnail

ORM(Object Relational Mapping, 객체-관계 매핑)

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것
    = 코드에 있는 "객체"와 DB에 있는 "데이터"를 편하게 일치시켜주는 도구입니다

  • 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용하므로 객체 모델과 관계형 모델 간에 불일치가 존재하는데,
    ORM을 통해 객체(Model, Entity) 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결(데이터 동기화)합니다

  • DB data <— Mapping —> Object field
    -> 객체를 통해 간접적으로 데이터베이스 데이터를 다룹니다

  • django 기준, python 코드가 다음 SQL로 변환됩니다

TypeORM

  • TypeScript와 JavaScript(ES5 , ES6 , ES7) 용 ORM입니다

  • MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL 데이터베이스를 지원합니다

DB+TypeORM 설치 및 연동

  • nestjs 공식문서 가이드대로 다음 명령어로 typeorm+db 모듈을 설치하며,
    db는 postgresql을 사용하여 pg 패키지를 설치합니다
    npm i typeorm @nestjs/typeorm pg

  • Nest는 데이터베이스를 연결하는 여러 방법을 제공하는데, 루트 디렉토리에 ormconfig.json파일이 있다면 TypeOrmModule.forRoot()에 옵션 객체를 전달하지 않아도 됩니다

  • 로컬서버에서 데이터베이스를 생성 후, ormconfig.json 파일을 생성하여 다음과 같이 작성합니다
    주의할 점 - JSON파일에는 엔티티의 경로를 __dirname으로 불러올 수 없기 때문에 빌드 후 생성되는 디렉토리이름인 dist를 붙여주어야 합니다!

{
  "type": "postgres", // mysql은 "mysql"
  "host": "localhost",
  "port": 5432, // mysql은 3306
  "username": "testUserName",
  "password": "testUserPw",
  "database": "testDbName",
  "entities": ["dist/**/*.entity{.ts,.js}"],
  "synchronize": true
}
  • synchronize 옵션은 서비스 구동시 소스코드 기반으로 데이터베이스 스키마를 동기화 할지 여부입니다. 로컬환경에서 구동할때는 개발의 편의를 위해 true로 합니다

  • ⚠️ synchronize 옵션을 true로 하면 서비스가 실행되고 데이터베이스가 연결될 때 항상 데이터베이스가 초기화 되므로 절대 프로덕션에는 true로 하지 마세요!

  • 이제 @nestjs/typeorm 패키지에서 제공하는 TypeOrmModule을 이용하여 DB에 연결할 수 있습니다

Reference

profile
같이 협업하며 성장하고싶은, 좋은 개발자를 지향합니다 :)

0개의 댓글