gengminy
갱미니의 코딩일지
gengminy
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • 🚀 프로젝트 (16)
      • 🎸 고스락 티켓 (4)
      • 🌞 내친소 (5)
      • 🥁 두둥 (7)
    • 📡 백엔드 (31)
      • 🌱 Spring Boot (13)
      • 🐱 Nest.js (10)
      • ⭐ Node.js (8)
    • 🏭 Infra (11)
      • ⚙ 준비를 위한 준비 (2)
      • 🥑 AWS (3)
      • 🐳 Docker (3)
      • ⚡ Github Actions (3)
    • 🌊 프론트엔드 (1)
      • 🌌 React.js (1)
    • 😎 주저리 (2)

블로그 메뉴

  • 💻Github
  • 📸Instagram
  • ✨Blog

공지사항

인기 글

태그

  • AWS
  • springboot
  • Spring
  • nestjs
  • oauth2
  • JSON
  • nest
  • OAuth
  • docker
  • 깃헙액션
  • 네스트
  • JWT
  • 도커
  • SlackAPI
  • 슬랙알림
  • GithubActions
  • 스프링
  • nodejs
  • github
  • 스프링부트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gengminy

갱미니의 코딩일지

[NestJs] 따라하면서 배우는 NestJs - 4 (Postgres, TypeORM 적용)
📡 백엔드/🐱 Nest.js

[NestJs] 따라하면서 배우는 NestJs - 4 (Postgres, TypeORM 적용)

2022. 7. 5. 16:49

 

✅ ORM(Object Relational Mapping)

 

객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결해주는 것

객체 클래스 vs 관계형 db 테이블간 불일치를 해소

 

 

 

✅ Postgres, TypeORM 설치 및 적용

 

npm i pg typeorm @nestjs/typeorm --save

pg : postgres 모듈

typeorm : TypeORM 모듈

@nestjs/typeorm : nest와 TypeORM 간의 연동

 

예제에서는 postgresSQL과 pgAdmin4 사용

 

💾 postgresSQL for MAC - https://postgresapp.com/downloads.html

💾 pgAdmin4 for MAC - https://www.pgadmin.org/download/pgadmin-4-macos/

📝 docs - https://docs.nestjs.com/techniques/database

 

📝 ./src/configs/typeorm.config.ts

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

export const typeORMConfig: TypeOrmModuleOptions = {
    type: 'postgres',
    host: 'localhost',
    port: 5432,
    username: 'postgres',
    password: 'postgres',
    database: 'board-app',
    entities: [__dirname + '/../**/*.entity.{js,ts}'],
    synchronize: true,
};

entites 옵션에 저렇게 적으면

프로젝트의 엔티티 파일들을 모두 긁어와서 테이블을 자동 생성해준다

synchronize 옵션은 어플리케이션 재실행시 테이블을 drop 후 재생성 해준다

 

📝 ./src/app.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { BoardsModule } from './boards/boards.module';
import { typeORMConfig } from './configs/typeorm.config';

@Module({
    imports: [TypeOrmModule.forRoot(typeORMConfig), BoardsModule],
})
export class AppModule {}

루트 모듈에도 추가해주면 연동 끝

 

 

✅ 엔티티 정의

 

📝 ./src/boards/board.entity.ts

import { BaseEntity, Column, PrimaryGeneratedColumn } from 'typeorm';
import { BoardStatus } from './board.model';

@Entity()
export class Board extends BaseEntity {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

    @Column()
    status: BoardStatus;
}

BaseEntity 를 상속받아서 정의한다

@PrimaryGeneratedColumn() 데코레이터를 사용하면 unique id 를 자동으로 생성해준다

그 외에는 @Column() 데코레이터로 새 컬럼을 지정

 

 

✅ 레포지토리 정의

 

레포지토리는 엔티티에 대한 찾기, 삽입, 수정, 삭제등을 처리함

데이터베이스에 대한 연산을 서비스 대신 위임하게됨

 

📝 Repository docs

http://typeorm.delightful.studio/classes/_repository_repository_.repository.html

 

하다가 보니까 EntityRepository 는 TypeORM@0.3 부터 사용하지 않는다(deprecated)해서 찾아보니까

커스텀 데코레이터 추가하고 뭐 하면 되긴 한다더라

 

📝 TypeORM@0.3 CustomRepository docs

https://typeorm.io/custom-repository#how-to-create-custom-repository

 

📝 EntityRepository 돌려줘! 데코레이터 뿌수기 + CustomRepository 커스텀

https://prod.velog.io/@pk3669/typeorm-0.3.x-EntityRepository-%EB%8F%8C%EB%A0%A4%EC%A4%98

 

근데 다이나믹 모듈이니 뭐니 너무너무 복잡해서 아직 더 공부해야겠지 싶고

일단은 예제 따라가는게 목적이니 TypeORM@0.2로 다운그레이드해서 해버림

npm i typeorm@0.2

 

📝 ./src/boards/board.repository.ts

import { EntityRepository, Repository } from 'typeorm';
import { Board } from './board.entity';

@EntityRepository(Board)
export class BoardRepository extends Repository<Board> {
    
}

TypeORM 다운그레이드 하니까 찍찍이 사라짐

Repository 를 상속받아서 구현한다

 

 

📝 ./src/boards/boards.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { BoardRepository } from './board.repository';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';

@Module({
    imports: [TypeOrmModule.forFeature([BoardRepository])],
    controllers: [BoardsController],
    providers: [BoardsService],
})
export class BoardsModule {}

레포지토리 import 해줌

 

일단 여기까지 하면 TypeORM 적용은 끝

저작자표시 (새창열림)

'📡 백엔드 > 🐱 Nest.js' 카테고리의 다른 글

[NestJs] 따라하면서 배우는 NestJs - 5 (레포지토리 구현 및 DB 이용 CRUD)  (0) 2022.07.07
[NestJs] TypeORM 사용 시 RepositoryNotFoundError 해결하기  (0) 2022.07.06
[NestJs] 따라하면서 배우는 NestJs - 3 (pipe와 validation)  (0) 2022.07.04
[NestJs] 따라하면서 배우는 NestJs - 2 (기본적인 CRUD 수행)  (0) 2022.07.04
[NestJs] 따라하면서 배우는 NestJs - 1 (기본 세팅 및 구조 파악)  (0) 2022.07.04
    '📡 백엔드/🐱 Nest.js' 카테고리의 다른 글
    • [NestJs] 따라하면서 배우는 NestJs - 5 (레포지토리 구현 및 DB 이용 CRUD)
    • [NestJs] TypeORM 사용 시 RepositoryNotFoundError 해결하기
    • [NestJs] 따라하면서 배우는 NestJs - 3 (pipe와 validation)
    • [NestJs] 따라하면서 배우는 NestJs - 2 (기본적인 CRUD 수행)
    gengminy
    gengminy
    코딩

    티스토리툴바