BaGyun
빠균's 개발노트
BaGyun
전체 방문자
오늘
어제
  • 분류 전체보기 (71)
    • Today I Learned (44)
      • 오류 (8)
      • JavaScript (15)
      • TypeScript (9)
      • NodeJS (0)
      • NestJS (0)
      • Database (3)
      • ORM (1)
      • 알고리즘 (2)
      • 개인공부 (4)
      • Deploy (0)
      • Git (1)
    • 개인프로젝트 (4)
    • 알고리즘 (14)
      • 프로그래머스 (14)
    • 면접질문 (5)
    • 회고 (3)

인기 글

반응형

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO · Designed By 정상우.
BaGyun

빠균's 개발노트

Today I Learned/ORM

[TypeORM] Active Record vs Data Mapper

2022. 10. 24. 15:23

Active Record?

소규모 앱에서 단순하게 사용할 수 있도록 도와줌

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

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

    @Column()
    firstName: string

    @Column()
    lastName: string

    @Column()
    isActive: boolean
}

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

// example how to remove AR entity
await user.remove()

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

Data Mapper?

유지 관리하는걸 도와주고 대규모 앱에서 유용

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",
})

 

위의 예시를 보았을 때, 두가지 방식의 차이는 extends를 붙여주냐 안 붙여주냐의 차이로

가독성 좋게 User로 불러오냐, userRepository로 불러오냐의 차이인 듯하다.

 

어떤 방식을 사용하냐의 차이는 개발자 본인이 정하여 사용하면 되는 것이지만,

NestJS+TypeORM 개발 환경에서는 NestJS에서는 Repository를 사용하기 편리한 기능이 탑재되어있고, Repository를 통해 실제로 구현하는 서비스에 접근이 가능하고 테스팅할 때도 접근이 가능하기 때문에 이번 프로젝트에선 DataMapper를 사용한다.

 

https://typeorm.io/active-record-data-mapper

 

 

    BaGyun
    BaGyun

    티스토리툴바