DB
[DB] SQL과 NoSQL 차이
데이터베이스(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