[DB] SQL과 NoSQL 차이

0 0 0

데이터베이스(DB)

데이터베이스는 데이터를 담아 두는 저장소입니다. 데이터를 저장하는 방식은 크게 SQL 방식과 NoSQL 방식으로 나뉩니다.

  • SQL

    • SQL 방식은 데이터를 엑셀과 비슷한 표로 정리하는 방식입니다.
    • 각 표 사이에 관계를 정의할 수 있습니다.
    • 관계를 정의하는 데이터베이스를 **관계형 데이터베이스(RDB)**라고 하며, 대표적으로 Oracle, MySQL, PostgreSQL이 있습니다.
    • 객체와 테이블을 연결해 주는 도구로 **ORM**을 사용합니다.
    • ORM => Sequelize(JS), TypeORM(TS), Prisma
  • NoSQL

    • NoSQL 방식은 서류 봉투에 문서(document)를 모아 두는 방식입니다.
    • NoSQL에서는 이 서류 봉투를 컬렉션이라고 합니다.
    • 대표적으로 MongoDB, Redis, Firebase가 있습니다.
    • 연결을 도와주는 도구로 **ODM**을 사용합니다.
    • ODM => Mongoose


ORM 사용해 보기

TypeORM

TypeORM 설치

yarn add typeorm

PostgreSQL 드라이버 설치

yarn add pg

TypeScript 설정

yarn add --dev typescript

tsconfig.json은 아래 공식 문서에서 위 사진처럼 여러 권장 설정을 확인할 수 있습니다. Node 버전별 설정 등 프로젝트에 맞는 것을 고르면 됩니다. 여기서는 권장 설정(Recommended)을 사용했습니다. What is a tsconfig.json

Missing initalizer in const declaration

node는 JavaScript 실행기라서 TypeScript 파일을 그대로 실행하면 오류가 납니다. ts-node를 설치해 실행해야 합니다.

yarn add ts-node

ts-node index.ts가 동작하지 않는 이유는 ts-node를 전역이 아닌 프로젝트에만 설치했기 때문입니다. 전역으로 설치하거나, package.json에 script를 추가하는 두 가지 방법이 있습니다.

여기서는 script에 추가하는 방법을 선택했습니다.

package.json에 아래 내용을 추가합니다.

 "scripts": {
  "tsnode": "ts-node"
 },
import { BaseEntity } from "typeorm";

TypeORM은 PostgreSQL 외에 MySQL, Oracle 등 여러 데이터베이스를 지원합니다.

게시판(Board)을 기준으로 기본 설정을 해 보겠습니다.

/Board.postgres.ts

import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from "typeorm";

@Entity() // @ => 데코레이트 (함수)
export class Board extends BaseEntity {
  @PrimaryGeneratedColumn("increment") // 주키로 자동으로 만들어줌 (primary(주키) , generated(자동))
  number!: number;
  @Column({ type: "text" }) // type은 데이터베이스의 타입
  writer!: string;
  @Column({ type: "text" }) // 컬럼으로 만들어 주세요
  title!: string;
  @Column({ type: "text" })
  contents!: string;
}

/index.ts

import { DataSource } from "typeorm";
import { Board } from "./Board.postgres";

const AppDataSource = new DataSource({
  // typeorm 연결 설정
  type: "postgres",
  host: "컴퓨터주소",
  port: "컴퓨터프로그램번호(포트번호)",
  username: "postgres",
  password: "postgres2022",
  database: "postgres", // postgress를 접속하면 폴더를 생성 해야함
  entities: [Board], // 접속해서 만들 테이블을 작성
  synchronize: true, // 코드와 DB의 테이블과 다르면 안됌 동기화를 시켜주어야함 , 클래스를 기준으로 동기화가 이루어짐
  logging: true,
});

// 설정한 파일을 시작합니다 (initialize)
AppDataSource.initialize()
  .then(() => {
    console.log("DB접속에 성공했습니다.");
  })
  .catch((error) => {
    console.log("DB접속에 실패했습니다.");
    console.log("원인 : ", error);
  });

위처럼 데코레이터에 빨간 줄 오류가 표시되면

tsconfig.json의 compilerOptions 안에

"experimentalDecorators": true 

을 추가하고 VS Code를 다시 실행하면 됩니다.

생성된 테이블은 DBeaver로 확인했습니다.


데이터 추가와 조회는 다음 글에서 이어서 정리하겠습니다.

댓글 0