PostgreSQL, TypeORM, CRUD

Haechan Kim·2022년 3월 28일
0

NestJs

목록 보기
5/19
  1. PostgreSQL
  2. pgAdmin (db보는 tool) 설치해야 함.
  • TypeORM (Object Relational Mapping)
    TypeORM은 노드에서 실행되고 ts으로 작성된 객체 관계형 매퍼 라이브러리.
    MySQL, PostgreSQL, MariaDB 등등 여러 db 지원.

  • ORM이란?
    객체와 관계형 db의 데이터를 자동으로 변형 밀 연결하는 작업. (mongoose 같은 -> ODM)

  • 특징과 이점
    모델 기반으로 db 테이블 체계 자동으로 생성
    db에서 객체 쉽게 삽업, 업데이트, 삭제 등등
    테이블 간의 매핑 만듬 (1:1, 1:N, N:N)

  • TypeORM 사용 위해 필요한 모듈
    @nestjs/typeorm : nestjs에서 TypeORM 사용위해 연동해주는 모듈
    typeorm : TypeORM 모듈
    pg : postgres 모듈

npm i pg typeorm @nestjs/typeorm

  • TypeORM 어플리케이션에 연결하기

TypeORM 설정 파일 생성

src > config > typrorm.config.ts

루트 모듈(app.module.ts)에서 import

  • 게시물을 위한 entity 생성하기

entity로 만들면 저절로 db 테이블로 변환됨.
이전에 board.model.ts의 interface와 비슷.
테이블의 형식, 틀.

@Entity() 데코레이터 클래스는 Board 클래스가 엔티티임을 나타냄.
CREATE TABLE board 와 같다.

  • Repository
    리포지토리는 엔티티 개체와 함께 작동하면 엔티티 찾기, 삽입, 업데이트, 삭제 등 처리.

repository는 db 관련 작업. (INSERT, FIND, DELETE ..)

db와 관련된 일은 서비스에서 하는 것이 아닌 repository에서 하면 됨.
이것을 repository pattern 이라고 부름.

  • repository 생성하기

src > boards > board.repository.ts

보드 모듈에서 import

data를 이제 로컬 메모리 아닌 Database에 저장해보자.

  • id 이용해 특정 게시물 가져오기

TypeORM 사용시에는 Repository 패턴 사용.
서비스에 리포지터리 넣기(Inject).
리포지터리에서 db 처리.

컨트롤러에 서비스 Inject 한것처럼 서비스에 repository inject.

  • service에 getBoardById 메소드 생성하기

typeORM 에서 제공하는 findOne 메소드 사용.

서비스

컨트롤러

  • 게시물 생성 하기

서비스에 작성하고 컨트롤러에 작성.
dto 이용.

서비스

컨트롤러

db관련 로직은 repository로 이동시키자.
repository pattern
controller -> service -> repository

서비스

리포지토리

  • 게시물 삭제 하기

typeorm 삭제 메소드 remove() vs delete()

remove() : remove로 무조건 지워져야 함. (값 존재해야 함) 없으면 에러.

delete() : 존재하면 지우고 없으면 아무런 영향 x

remove는 아이템 라나 지울 때 두번 db 이용해야 함. (아이템 유무, 지우기). 비효율적.

여기서는 한번만 접근해도 되는 delete를 사용할 것.

서비스

컨트롤러

  • 게시물 상태 업데이트 하기

서비스

컨트롤러

  • 모든 게시물 가져오기

서비스

컨트롤러

0개의 댓글