(TypeORM) TypeORM - EntityManager

최건·2025년 5월 11일

참고 문서

EntityManager란?

  • TypeORM에서 모든 엔티티에 대해 삽입(insert), 조회(find), 수정(update), 삭제(delete) 등의 작업을 하나의 객체로 처리할 수 있게 해주는 중앙 관리자 같은 역할을 한다.

  • Repository들을 일일이 가져오지 않고도, EntityManager만으로 대부분의 DB 조작이 가능하다.

예시 코드

import { DataSource } from "typeorm"
import { User } from "./entity/User"

const myDataSource = new DataSource(/*...*/)
const user = await myDataSource.manager.findOneBy(User, {
    id: 1,
})
user.name = "Umed"
await myDataSource.manager.save(user)

EntityManager와 Repository의 차이점

  • Repository가 한 엔티티에 특화된 도구라면, EntityManager는 전체 엔티티에 대해 범용적으로 사용할 수 있는 관리자다.
항목EntityManagerRepository
대상모든 엔티티단일 엔티티
사용 방식manager.save(User)userRepo.save()
유연성더 범용적, 트랜잭션 조작 편함명확하고 타입 안전함
트랜잭션 사용가능 (transaction)내부 트랜잭션만 일부 가능

사용 방법

Entity 생성 및 병합

메서드설명
create()새 인스턴스 생성 (생성자 역할)
merge()여러 객체의 값을 병합하여 하나의 entity로
preload()기존 entity를 불러오고, 변경값만 덮어쓰기

데이터 조작 메서드

메서드설명
save()새 엔티티는 insert, 기존 엔티티는 update
insert()무조건 새 레코드 추가 (중복 시 오류)
update()조건에 맞는 레코드 일부 속성만 업데이트
upsert()중복되면 update, 없으면 insert (충돌 키 지정)
remove()엔티티 삭제
delete()조건 또는 id로 삭제
increment() / decrement()숫자 필드를 증감

조회 관련 메서드

메서드설명
find()조건으로 여러 개 조회 (FindOptions 사용)
findBy()FindOptionsWhere 사용한 조건 조회
findAndCount()결과 + 전체 개수 반환
findOne()첫 번째 일치하는 엔티티 조회
findOneBy()FindOptionsWhere 기반 단일 조회
findOneOrFail()못 찾으면 예외 발생
exists() / existsBy()존재 여부 확인
count() / countBy()조건에 맞는 레코드 수 반환

기타

메서드설명
clear()테이블 비우기 (TRUNCATE)
release()직접 관리한 QueryRunner 해제
getTreeRepository()트리 구조 엔티티 전용 Repository 가져오기
getMongoRepository()MongoDB용 Repository
withRepository()트랜잭션 내에서 커스텀 Repository 사용 시

사용 예시 요약

// 조회
const user = await manager.findOne(User, { where: { id: 1 } })

// 생성
const user = manager.create(User, { name: 'Timber' })
await manager.save(user)

// 트랜잭션
await manager.transaction(async (m) => {
  await m.update(User, 1, { name: 'Updated' })
})
profile
개발이 즐거운 백엔드 개발자

0개의 댓글