[Node.js - Study] TypeORM 이란?

JooSehyun·2023년 11월 21일
0

[Study]

목록 보기
24/35
post-thumbnail

[Node.js - Study] TypeORM 이란?


TypeORM 이란?

TypeORM은 node.js에서 실행되고 TypeScript로 작성된 객체 관계형 매퍼 라이브러리이다.
TypeORM은 MySQL, PostgreSQL, MariaDB, MS SQL Server, Oracle, SAPHana 및 WebSQL과 같은 여러 데이터베이스를 지원한다.


ORM (Object Relational Mapping) 이란?

객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업이다.
ORM을 이용한 개발은 객체와 데이터베이스의 변형에 유연하게 사툥할 수 있다.

Object(객체) <--매핑--> 관계형 데이터베이스

  • 객체지향 프로그래밍은 클래스 사용
  • 관계형 데이터베이스는 테이블 사용

객체 모델과 관계형 모델 간 불일치가 존재하는데 이걸 매핑해주는게 ORM이다.

TypeORM

const boards = Board.find({title:'Hello', status:'PUBLIC'});

Pure JavaScript

db.query('SELECT*FROM boards WHERE title = "Hello" AND status = "PUBLIC" , (err, result) => {
	if(err) {
    	throw new Error("Error")
    }
    boards = result.rows;
})

TypeORM 특징과 장점

  • 모델을 기반으로 데이터베이스 테이블 체계를 자동으로 생성한다.
  • 데이터베이스에서 개체를 쉽게 삽입, 업데이트 및 삭제할 수 있다.
  • 테이블 간의 매핑 (일대일, 일대다, 다대다)을 만든다.
  • 간단한 CLI 명령을 제공한다.
  • TypeORM은 간단한 코딩으로 ORM 프레임 워크를 사용하기 쉽다.
  • TypeORM은 다른 모듈과 쉽게 통합된다.

Entity를 생성하는 이유

원래 ORM 없이 데이터베이스 테이블을 생성할 때는

CREATE TABLE board(
	id INTEGER AUTO_INCREMENT PRIMARY KEY.
    title VARCHAR(255) NOT NULL,
    decsription VARCHAR(255) NOT NULL
)

이렇게 테이블을 생성하게된다. 하지만 TypeORM을 사용할 때는 데이터베이스 테이블로 변환되는 Class이기 때문에 위 처럼하지 않고 클래스를 생성한 후 그 안에 컬럼들을 정의해주면 된다.


예제

BaseEntity를 만들어 준다. (여러 Entity 중 베이스가 될 부분을 정의하는 곳)

import { BaseEntity, CreateDateColumn, PrimaryColumn, UpdateDateColumn } from "typeorm";

export default abstract class Entity extends BaseEntity {
    @PrimaryColumn()
    id: number;

    @CreateDateColumn()
    createdAt: Date;

    @UpdateDateColumn()
    updatedAt: Date;
}

데코레이터의 종류

  • @PrimaryColumn() : 이 데코레이터는 엔터티의 주요 키(primary key) 열을 정의합니다. 주요 키는 각 레코드를 고유하게 식별하는 역할을 합니다. 이 예제에서는 id라는 이름의 속성을 주요 키로 사용하고 있습니다. 주요 키는 일반적으로 숫자 혹은 문자열과 같은 고유한 값을 갖습니다.

  • @CreateDateColumn() : 이 데코레이터는 엔터티의 레코드가 생성된 일시를 저장하는 열을 정의합니다. 즉, 새로운 레코드가 데이터베이스에 삽입될 때 이 열은 자동으로 현재 일시로 설정됩니다. 이 예제에서는 createdAt이라는 이름의 속성을 사용하여 생성 일시를 저장하고 있습니다.

  • @UpdateDateColumn() : 이 데코레이터는 엔터티의 레코드가 마지막으로 업데이트된 일시를 저장하는 열을 정의합니다. 레코드가 수정될 때마다 이 열은 자동으로 현재 일시로 갱신됩니다. updatedAt이라는 이름의 속성을 사용하여 업데이트 일시를 저장하고 있습니다.

  • @Column : 데코레이터는 엔터티에서 열을 정의하는 데 사용됩니다. 클래스의 속성이 데이터베이스 열에 어떻게 매핑되어야 하는지를 지정합니다.

  • @Index : 데코레이터는 엔터티의 하나 이상의 열에 대한 인덱스를 정의하는 데 사용됩니다.

  • @OneToMany : 데코레이터는 두 엔터티 간의 일대다 관계를 정의하는 데 사용됩니다.

  • @BeforeInsert : 데코레이터는 엔터티가 데이터베이스에 삽입되기 전에 실행되어야 하는 메서드를 지정하는 데 사용됩니다.

등 여러가지가 있다.

0개의 댓글