DB라고는 MySQL밖에 모르는 나에게 시련이 왔다..
ORM이라뇨? PostgreSQL이라뇨??? 먹는건가요?
[포스트-그레스-큐엘]
node js에서 typeORM과 함께 많이 쓰이는 오픈소스 DB이다.
RDBMS의 일종이다.
먼저 설치부터 해보자.
https://dog-developers.tistory.com/122
위의 링크에서 windows에서 설치하는 방법이 쉽게 나와있다.
(설치 중의 비밀번호를 기억하고 있자)
pgAdmin 4도 같이 설치된다.
SQL Shell을 띄워서 SELECT version();
을 치면 postgreSQL이 설치된걸 확인할 수 있다.
postgreSQL을 GUI로 볼 수 있는 프로그램이다.
databases > 우측 클릭 > create > database
로 board-app db를 만들고,
board-app > 우측 클릭 > query-tool
로 table을 create했다.
CREATE TABLE board (
id text,
title text,
description text,
status text
);
select * from board;
했더니 위 캡쳐본과 같이 나옴~
더 자세한건 아래 참고하세욧! 역시 구글링bb
https://eunsukimme.github.io/database/2019/09/12/Postgresql-Pgadmin/
Object Relational Mapping 객체-관계 매핑이란?
OOP의 객체와 RDB의 테이블을 자동으로 매핑하는 것.
객체 모델과 DB 테이블 모델 간의 불일치가 존재한다.
ORM을 이용해서 DB 접근을 프로그래밍 언어에서 풀어낼 수 있다.
즉 SQL 쿼리가 아닌, 메소드로 객체 데이터 조작이 가능하다.
typeORM은 node.js에서 작동하며 typescript로 작성된 ORM 라이브러리이다.
const tasks = await Task.find({ status: 'DONE', user: 'Ashley' });
위의 코드는 Ashley가 작성하고 상태가 "DONE"인 task들을 가져오는 로직이다.
mysql이었다면 SELECT * FROM task_tbl WHERE status='DONE' AND user='Ashley'
이 되었을 것이다.
@nestjs/typeorm // nestJS에서 typeorm을 사용하기 위해 연동시켜주는 모듈
typeorm
pg // postgres 모듈
$ npm install --save @nestjs/typeorm typeorm pg psql
강의에서는 psql = postgreSQL 모듈을 썼는데
$ npm install --save @nestjs/typeorm typeorm mysql2
난 Mysql이 편하다! 하면 이렇게 cmd를 날리면 된다.
사실 어떤걸 써야할지 고민이다.
configs(폴더 생성) > typeorm.config.ts 파일 생성
// 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,
};
app.module.ts
// 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 {}
TypeOrmModule.forRoot(typeOrmConfig)을 추가한다.
forRoot는 typeorm config에 설정된 것을 sub module에도 적용하겠다라는 뜻.
Entity를 이용하여 DB 테이블을 생성한다.
true 값을 주면 앱을 실행할 때 entity에서 컬럼 수정사항이 있다면, 해당 테이블을 drop한 후 다시 생성한다.