ORM과 TypeORM에 대하여

koreanhole·2021년 2월 2일
0

ORM이란?

Object-Relational Mapping(ORM)은 데이터베이스에서 데이터를 조작하고 질의할 수 있는 기법이다. object-oriented패러다임을 사용한다.

직접 쿼리를 날리는것이 아닌 개발자들이 선호하는 프로그래밍언어를 사용하여 데이터베이스와 소통할 수 있는 다양한 ORM라이브러리가 있다.

ORM의 장점

  • data model을 한 군데에만 작성해도 된다.
    • 유지보수하기 쉽고 반복되는 코드가 적어진다.
  • database handling이나 데이터타입 그리고 relation과 같은 작업들이 자동으로 수행된다.
  • SQL문을 작성할 필요가 없어진다.
    • 배우기는 쉽지만 완벽히 마스터하기는 어렵다.
    • 코딩하는것 처럼 자연스러운 방식으로 데이터베이스에 질의할 수 있다.
  • Database의 추상화를 이룰수 있다. 원하는 어떤 데이터베이스 타입이던지 변경할 수 있다.
  • Object-oriented 패러다임을 사용하기 때문에 상속과 같은 것들을 쉽게 이용할 수 있다.

ORM의 단점

  • 성능은 괜찮지만 성능향상을 경시하게 될 가능성이 크다.
    • TypeORM의 query builder를 사용하는것이 좋다.
  • ORM을 사용하다보면 작동원리에 대해 알 수 없게 된다. 결국엔 maintainability문제가 생긴다.

TypeORM

  • TypeORM은 Node.js위에서 작동하며 TypeScript를 사용할 수 있는 ORM라이브러리이다.
    • 그 외에도 React Native, Electron등에서도 사용할 수 있다. 물론 JavaScript와도 사용가능하다
  • entities, repository, columns, relations, replication, indices, queries, logging등 다양한 기능을 정의하고 관리할 수 있도록 도와준다.
  • TypeORM은 Active Record패턴과 Data Mapper 패턴을 지원한다.
    • 결합도가 낮고 확장가능한 높은 수준의 어플리케이션을 작성할 수 있게 한다.

TypeORM과 SQL문을 사용한 JavaScript코드 비교

// Ashley가 작성하고 상태가 "DONE"인 task들을 가져온다.

// TypeORM
const tasks = await Task.find({ status: 'DONE', user: 'Ashley' })

// Pure JavaScript
let tasks;
db.query('SELECT * FROM tasks WHERE status = "DONE" AND user = "Ashley"', (err, result) => {
    if (err) {
        throw new Error("Could not retrieve tasks");
    }
    tasks = result.rows;
})

참고자료

NestJS- From Zero to Hero

0개의 댓글