우선 ORM
은 Object-Relational-Mapping의 약자로 객체-관계-매핑(연결)을 뜻한다고 한다. TypeORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 연결 시켜주는 프레임 워크다.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터 베이스는 테이블을 사용한다. 객체 모델과 관계형 모델간의 불일치가 존재 하는데, ORM을 통해서 객체간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다는 것이다.
express 와 관계형 데이터베이스를 조합할 때 ORM 과 Sequelize 가 있다고 한다.
개인적인 검색 수준으로는 sequelize 와 TypeORM의 차이점을 찾을 수 없었다. sequelize 와 TypeOrm 모두 Node.js에서 사용하는 ORM 이라고 한다.
nestJS에서 소개되는 ORM중 typeORM과 sequelize가 있다. TypeOR을 먼저 배웠기에 비교한다면 TypeScirpt와 Node.js기반 ORM이고 RDB와 호환정도도 같기에 차이점이 없어보였다. 다만 sequlize를 좀더 많이 사용하는 편으로 파악된다. 또한 sequelize가 개발 년도가 오래된 라이브러리이다. 그렇기에 안정성면에서는 좋다고 생각한다.
관계형 데이터 베이스의 대표적인 프로그램은 MySql 과 MariaDB 가 있다고 한다. ORM의 대표적인 구성 요소는 아래와 같다고 한다.
JAVA 에서는 Hibernate ORM, PHP는 Eloquen ORM등이 쓰인다고 하며, Node.js에서는 Sequelize와 TypeORM이 쓰인다고 한다.
TypeORM에서는 Active Record 패턴과 Data Mapper 패턴 두 종류가 있다고 한다.
Active Record
패턴은 모델 그 자체에 쿼리 메소드를 정의하고, 모델의 메소드를 사용하여 객체를 저장, 제거, 불러오는 방식이라고 한다. 공식 홈에 예제 코드가 있으니 참고해보자(이해가 가지 않아서 올리지 않겠다). 규모가 작은 에플리케이션에 적합하고 간단하게 사용할 수 있다고 한다.
Data Mapper
패턴은 분리된 클래스에 쿼리 메소드를 정의하는 방식이며, Repository를 사용하여 객체를 저장,제거, 불어오는 거라고 한다. 비교적 규모가 큰 에플리케이션에서 적합하고 유지보수하는데 효과적 이라고 한다.
데이터베이스 테이블을 정의하기 전에 실행해야하는 데코레이터이다. 테이블명을 따로 지정하지 않아도 클래스명으로 매핑하지만, 옵셥으로 테이블을 지정할 수 있다고 한다.
여러 특징이 있으나 다 다루지는 못 할 것이다. 아는 선에서만 몇 자 적어본다.
Concrete table inheritance 와 Single table inheritance
가 있으나 아직 설명 단계는 아니니 아래 링크를 참고 해보자 ㅠ
PrimaryColumn 과 PrimaryGeneratedColum이 있다고 한다.
PrimaryColumn 은 @Column 옵션인 primary 를 대체 할 수 있다. pk를 만드는 역할 이라고 한다.
primaryGeneratedColumn은 자동으로 생성되는 ID값을 표현하는 방식이라고 한다.
increment: AUTO_INCREMENT를 사용하여 1씩 증가하는 ID를 부여한다.
UUID: 유니크한 ID를 사용 한다.
@Generated 는 PK로 쓰는 ID 외로 추가로 uuid를 기록하기 위해 쓰여진다고 한다.
OneToOne, ManyToOne, ManyToMany 등 많은 것들을 소개 하고 있다.
너무 많아서 우선 배운 것중 이해가는 것 위주로만 올린다.
[typeorm 톺아보기, GitHub, 2022년04월05일 접속]
https://yuni-q.github.io/backend/typeorm-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0/
[TypeORM 개념 및 설치 및 사용방법, 티스토리, 2022년04월05일 접속]
https://aonee.tistory.com/77
[TypeORM,TypeORM, 2022년04월05일 접속]
https://typeorm.io/
[Sequelize ORM 프레임워크,velog, 2022년04월05일 접속]
https://velog.io/@milkyway/Sequelize-ORM-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC
[자바스크립트 데코레이터 이해하기,TOAST UI, 2022년04월05일 접속]
https://ui.toast.com/weekly-pick/ko_20200102
[ORM(Object Relational Mapping)을 이해한다.
https://gmlwjd9405.github.io/2019/02/01/orm.html, 2022년08월13일 접속]
https://gmlwjd9405.github.io/2019/02/01/orm.html
[sequelize vs typeorm, https://npmtrends.com/, 2022년08월13일 접속]
https://npmtrends.com/prisma-vs-sequelize-vs-typeorm