⚡ TypeORM이 무엇일까?
Object-relational mapping, 객체-관계 매핑이라고 하는 ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 맵핑해준다고 한다. 이게 무슨 소리인가
보통의 객체지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하게 되는데 객체 모델과 관계형 모델 간에 불일치가 존재할 수 있다. 그럴때 ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다고 한다.
ORM의 종류로는 여러가지가 있다.
- Sequelize
- TypeORM
- prisma
다양한 종류들이 있지만 결국 담당하는 기능들은 비슷한데 대표적으로 Data Mapper 와 ActiveRecord 가 있다. 그 외적으로는
- 깨끗한 개체 관계형 모델
- 데이터베이스별 열 유형
- 우아한 구문, 유연하고 강력한 QueryBuilder
등 다양한 기능들이 있다. 그럼 사용법은 어떠할까?
TypeORM을 사용하면 모델이 다음과 같다고 한다.
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
age: number
}
도메인 로직은 다음과 같다고 한다.
const userRepository = MyDataSource.getRepository(User)
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.age = 25
await userRepository.save(user)
const allUsers = await userRepository.find()
const firstUser = await userRepository.findOneBy({
id: 1,
}) // find by id
const timber = await userRepository.findOneBy({
firstName: "Timber",
lastName: "Saw",
}) // find by firstName and lastName
await userRepository.remove(timber)
이렇게 되면 결국 도메인 로직은 다음과 같다고 한다.
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.age = 25
await user.save()
const allUsers = await User.find()
const firstUser = await User.findOneBy({
id: 1,
})
const timber = await User.findOneBy({
firstName: "Timber",
lastName: "Saw"
})
await timber.remove()
그렇다면 이용하고 싶다면 어떻게 해야할까. 이부분은 다음의 공식문서에서 참고가 가능하다.
참조 : https://typeorm.io/
TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server,
typeorm.io
'📖 TIL > NestJS & TypeScript' 카테고리의 다른 글
[NestJS] ConfigModule이란? (0) | 2022.08.27 |
---|---|
[TS] 타입스크립트(TypeScript) (0) | 2022.05.24 |
[NestJS] MVC 디자인 패턴 (0) | 2022.04.01 |
[NestJS] NestJS와 폴더구조 (0) | 2022.02.09 |