따라하면서 배우는 NestJS #4 - TypeORM, PostgreSQL

Jina Kim·2022년 10월 14일
0

NestJS

목록 보기
5/6
post-thumbnail

🚨 비---상 🚨

DB라고는 MySQL밖에 모르는 나에게 시련이 왔다..
ORM이라뇨? PostgreSQL이라뇨??? 먹는건가요?

PostgreSQL

[포스트-그레스-큐엘]
node js에서 typeORM과 함께 많이 쓰이는 오픈소스 DB이다.
RDBMS의 일종이다.

먼저 설치부터 해보자.
https://dog-developers.tistory.com/122
위의 링크에서 windows에서 설치하는 방법이 쉽게 나와있다.
(설치 중의 비밀번호를 기억하고 있자)

pgAdmin 4도 같이 설치된다.

SQL Shell을 띄워서 SELECT version(); 을 치면 postgreSQL이 설치된걸 확인할 수 있다.

pgAdmin 4

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/

ORM

Object Relational Mapping 객체-관계 매핑이란?
OOP의 객체와 RDB의 테이블을 자동으로 매핑하는 것.

ORM 왜 쓰나요?

객체 모델과 DB 테이블 모델 간의 불일치가 존재한다.
ORM을 이용해서 DB 접근을 프로그래밍 언어에서 풀어낼 수 있다.
즉 SQL 쿼리가 아닌, 메소드로 객체 데이터 조작이 가능하다.

TypeORM

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' 이 되었을 것이다.

TypeORM 관련 모듈들

@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를 날리면 된다.

사실 어떤걸 써야할지 고민이다.

typeOrmConfig 설정하기

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

Entity를 이용하여 DB 테이블을 생성한다.

Synchronize

true 값을 주면 앱을 실행할 때 entity에서 컬럼 수정사항이 있다면, 해당 테이블을 drop한 후 다시 생성한다.

profile
Hello, World!

0개의 댓글