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 설정 파일 생성
src > config > typrorm.config.ts
루트 모듈(app.module.ts)에서 import
entity로 만들면 저절로 db 테이블로 변환됨.
이전에 board.model.ts의 interface와 비슷.
테이블의 형식, 틀.
@Entity() 데코레이터 클래스는 Board 클래스가 엔티티임을 나타냄.
CREATE TABLE board 와 같다.
repository는 db 관련 작업. (INSERT, FIND, DELETE ..)
db와 관련된 일은 서비스에서 하는 것이 아닌 repository에서 하면 됨.
이것을 repository pattern 이라고 부름.
src > boards > board.repository.ts
보드 모듈에서 import
data를 이제 로컬 메모리 아닌 Database에 저장해보자.
TypeORM 사용시에는 Repository 패턴 사용.
서비스에 리포지터리 넣기(Inject).
리포지터리에서 db 처리.
컨트롤러에 서비스 Inject 한것처럼 서비스에 repository inject.
typeORM 에서 제공하는 findOne 메소드 사용.
서비스
컨트롤러
서비스에 작성하고 컨트롤러에 작성.
dto 이용.
서비스
컨트롤러
db관련 로직은 repository로 이동시키자.
repository pattern
controller -> service -> repository
서비스
리포지토리
typeorm 삭제 메소드 remove() vs delete()
remove() : remove로 무조건 지워져야 함. (값 존재해야 함) 없으면 에러.
delete() : 존재하면 지우고 없으면 아무런 영향 x
remove는 아이템 라나 지울 때 두번 db 이용해야 함. (아이템 유무, 지우기). 비효율적.
여기서는 한번만 접근해도 되는 delete를 사용할 것.
서비스
컨트롤러
서비스
컨트롤러
서비스
컨트롤러