카테고리 없음

ORM

cjeongmin 2022. 11. 28. 18:15

이번에 프로젝트를 진행하면서 TypeORM 이라는 프레임워크를 처음 사용해보게 되었는데, ORM 이라는 것이 무엇인지 잘 알지 못한 상태로 프로젝트를 진행하고 있다. 이 포스팅에서는 ORM이 무엇인지에 대해 알아보고자 한다.

ORM(Object-relational mapping)

객체와 데이터베이스 데이터를 매핑하는 것을 말한다.

ORM이 생겨난 이유

하지만 이러한 ORM이 없어도 쿼리문을 보내면서 기존까지 잘 사용해왔는데 왜 이런 툴이 생겨났을까? 우리는 어떤 애플리케이션을 만들게 되면 보통 객체에 데이터를 담고 보관을 하게 된다. 이렇게 생성한 객체를 영구적으로 저장하기 위해 파일이나 데이터베이스에 입력한다는 것은 객체와 그와 연결된 객체들을 데이터베이스의 테이블에 저장 한다는 것을 의미하게 된다. 즉, 테이블에 객체가 가지고 있던 정보를 입력하고 이 테이블을 쿼리문을 통해 관계 설정을 하게 되는데, 이 때 테이블과 객체간의 이질성이 발생한다. 즉 객체 모델과 관계형 모델 간의 불일치가 일어나게 된다.
이러한 문제를 해결하기 위해 ORM은 객체 모델과 관계형 모델의 관계를 SQL를 통해 자동으로 매핑한다.

TypeORM

TypeORM에서는 어떻게 객체 모델과 관계형 모델의 관계를 정의하는지 확인해보자.

@Entity()
export class Product {
  @PrimaryGeneratedColumn()
  id: number;
  
  @Column({ nullable: false })
  name: string;
  
  @Column({ nullable: false })
  price: number;
}

TypeORM 에서는 이와 같은 방법으로 객체 모델과 관계형 모델의 관계를 정의해주며, 자동으로 이 모델에 대한 테이블이 만들어져있지 않다면 자동으로 생성도 해주는 기능또한 있다.

ORM은 모든 것을 해결하는가?

물론, ORM이 모든 것을 해결하지는 못한다. 사용하기에는 편리한 장점이 있지만 잘못된 사용을 하게 된다면 속도, 성능 저하가 발생하게 된다. 심각할 경우 일관성이 무너지는 문제점이 발생하기도 한다. 또한 설계도 매우 신중하게 해야하며 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다. 또한, 객체지향적인 애플리케이션이 아닌 경우, ORM의 장점을 활용하기 어렵다. 프로시저가 많은 시스템에선 객체로 바꾸는 과정에서 생산성 저하나 리스크가 많이 발생할 수 있기 때문이다.

이러한 단점이 있는만큼 편리함 또한 얻을 수 있다. 코드의 가독성을 올려주기도 하고 DBMS에 대한 종속성이 줄어든다. TypeORM도 DB에 종속되어있지 않는데, 이러한 장점은 애플리케이션 개발을 해야하는데 어떠한 DB를 사용하게 될지 모르거나 변경의 여지가 있는 경우 큰 도움이 될 수 있다. 게다가 재사용 및 유지보수의 편리성도 증가한다. 매핑정보가 명확하여, ERD(Entity Relationship Diagram)를 보는 것에 대한 의존도를 낮출 수 있다.


참고자료