TypeORM

전은평·2023년 4월 18일
0

TypeORM이란?

데이터베이스 접근법에는 여러가지 방법이 있지만 오늘 이야기해 볼 TypeORM은 ORM(Object-Relational Mapper)의 종류 중 하나다.

그렇다면 ORM이란 무엇일까?

ORM이란 Object Relational Mapping의 약자로, 직역하면 객체-관계 매핑이다.

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.

객체 모델과 관계형 모델 간에 불일치가 존재하는데 ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.

즉 ORM을 이용하게 되면 객체를 통해 간접적으로 데이터베이스 데이터를 다룰 수 있게 된다.

TypeORM은 데이터베이스에 접근을 프로그래밍 언어로 가능하게 해주기 때문에, 데이터 베이스를 다룰 때 정말 편리하게 도와주는 라이브러리다.

그렇다고 해서 TypeORM으로 모든 DB에 접근할 수 있는건 아니다. 테이블로 이루어진 데이터베이스를 다룰 때 사용하는 SQL을 이용할 때에만 사용가능하다.

typeORM에서는 다른 ORM 과 달리 Active Record Pattern과 Data Mapper Pattern도 사용가능하다고 한다.

실제로 사용해본 방식은 Data Mapper Pattern이라, Actice Record Pattern에 대해선 자세히는 알지 못하지만, 모델 자체 내에서 모든 쿼리 메서드를 정의하고 모델 메서드를 사용하여 오브젝트를 생성,삭제,조회,수정할 수 있게 하는 방식이라고 한다.

Data Mapper Pattern은 분리된 클래스에 쿼리 메소드를 정의하는 방식이며, Repository를 이용하여 객체를 저장하고, 제거하고, 불러올 수 있다.

둘의 차이는 모델을 통해 데이터에 접근하냐, 아니면 Repository를 통해 데이터에 접근하냐이다.

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

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    isActive: boolean
}
const userRepository = dataSource.getRepository(User)

// example how to save DM entity
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.isActive = true
await userRepository.save(user)

// example how to remove DM entity
await userRepository.remove(user)

// example how to load DM entities
const users = await userRepository.find({ skip: 2, take: 5 })
const newUsers = await userRepository.findBy({ isActive: true })
const timber = await userRepository.findOneBy({
    firstName: "Timber",
    lastName: "Saw",
})

위의 코드는 typeORM Docs에서 발췌한 Data Mapper Pattern을 이용한 방식이다.

참고자료
https://gmlwjd9405.github.io/2019/02/01/orm.html
https://typeorm.io/active-record-data-mapper
https://fomaios.tistory.com/entry/Nodejs-TypeORM%EC%9D%B4%EB%9E%80-feat-Typescript-ORM-Library

profile
`아는 만큼 보인다` 라는 명언을 좋아합니다. 많이 배워서 많은 걸 볼 수 있는 개발자가 되고 싶습니다.

0개의 댓글