본문 바로가기
내일배움 정리/JS 문법 공부

NestJS에서 TypeORM을 사용할 때 Repository에서 제공하는 주요 메서드

by GREEN나무 2025. 2. 13.
728x90

NestJS에서 TypeORM을 사용할 때 Repository에서 제공하는 주요 메서드를 표로 정리하면 다음과 같습니다.

메서드 설명
find(options?) 전체 엔티티를 배열 형태로 조회
findOne(options?) 특정 조건을 만족하는 단일 엔티티 조회 (조건 없으면 undefined 반환)
findOneOrFail(options?) 특정 조건을 만족하는 단일 엔티티 조회 (undefined면 예외 발생)
findByIds(ids, options?) 여러 개의 ID로 엔티티 리스트 조회
findAndCount(options?) [엔티티 목록, 총 개수] 반환
findBy(options?) 특정 조건을 만족하는 엔티티 목록 조회
findOneBy(options?) 특정 조건을 만족하는 단일 엔티티 조회 (없으면 null 반환)
findOneByOrFail(options?) 특정 조건을 만족하는 단일 엔티티 조회 (없으면 예외 발생)
save(entity) 엔티티를 저장 (존재하면 업데이트, 없으면 생성)
insert(entity) 새로운 엔티티 삽입 (기존 데이터 업데이트 없음)
update(criteria, partialEntity) 특정 조건을 만족하는 엔티티 업데이트
remove(entity) 특정 엔티티 삭제
delete(criteria) 특정 조건을 만족하는 엔티티 삭제
softRemove(entity) 소프트 삭제 (deletedAt 필드 설정 필요)
restore(criteria) 소프트 삭제된 엔티티 복구
count(options?) 특정 조건을 만족하는 엔티티 개수 반환
exist(options?) 특정 조건을 만족하는 데이터가 존재하는지 여부 반환 (boolean)
query(queryString, params?) 원시 SQL 쿼리 실행
create(queryBuilder) 쿼리 빌더 생성
preload(entity) 엔티티가 존재하면 병합 후 반환, 없으면 undefined
clear() 해당 테이블의 모든 데이터 삭제

 

 

각 Repository 메서드의 사용 예시 코드 샘플
아래 예제는 User 엔티티를 기준으로 작성

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository<User>,
  ) {}

  // 1. find - 모든 사용자 조회
  async getAllUsers() {
    return this.userRepository.find();
  }

  // 2. findOne - 특정 조건을 만족하는 사용자 조회
  async getUserByEmail(email: string) {
    return this.userRepository.findOne({ where: { email } });
  }

  // 3. findOneOrFail - 특정 사용자 조회 (없으면 에러 발생)
  async getUserOrFail(id: number) {
    return this.userRepository.findOneOrFail({ where: { id } });
  }

  // 4. findByIds - 여러 ID로 사용자 조회
  async getUsersByIds(ids: number[]) {
    return this.userRepository.findByIds(ids);
  }

  // 5. findAndCount - 사용자 목록과 개수 반환
  async getUsersWithCount() {
    return this.userRepository.findAndCount();
  }

  // 6. findBy - 특정 조건을 만족하는 사용자 목록 조회
  async getUsersByRole(role: string) {
    return this.userRepository.findBy({ role });
  }

  // 7. findOneBy - 단일 사용자 조회 (없으면 null 반환)
  async getUserById(id: number) {
    return this.userRepository.findOneBy({ id });
  }

  // 8. findOneByOrFail - 단일 사용자 조회 (없으면 에러 발생)
  async getUserByIdOrFail(id: number) {
    return this.userRepository.findOneByOrFail({ id });
  }

  // 9. save - 사용자 저장 (있으면 업데이트, 없으면 생성)
  async saveUser(user: Partial<User>) {
    return this.userRepository.save(user);
  }

  // 10. insert - 새로운 사용자 삽입
  async insertUser(user: Partial<User>) {
    return this.userRepository.insert(user);
  }

  // 11. update - 특정 조건의 사용자 업데이트
  async updateUser(id: number, data: Partial<User>) {
    return this.userRepository.update(id, data);
  }

  // 12. remove - 사용자 삭제 (엔티티 필요)
  async removeUser(user: User) {
    return this.userRepository.remove(user);
  }

  // 13. delete - 특정 조건을 만족하는 사용자 삭제
  async deleteUser(id: number) {
    return this.userRepository.delete(id);
  }

  // 14. softRemove - 소프트 삭제 (deletedAt 설정 필요)
  async softRemoveUser(user: User) {
    return this.userRepository.softRemove(user);
  }

  // 15. restore - 소프트 삭제된 사용자 복구
  async restoreUser(id: number) {
    return this.userRepository.restore(id);
  }

  // 16. count - 특정 조건을 만족하는 사용자 개수
  async countUsers() {
    return this.userRepository.count();
  }

  // 17. exist - 특정 조건을 만족하는 데이터 존재 여부 반환
  async doesUserExist(email: string) {
    return this.userRepository.exist({ where: { email } });
  }

  // 18. query - 직접 SQL 쿼리 실행
  async rawQuery() {
    return this.userRepository.query('SELECT * FROM user WHERE role = ?', ['admin']);
  }

  // 19. create - 새로운 사용자 엔티티 생성 (저장은 안 됨)
  async createUserEntity(data: Partial<User>) {
    return this.userRepository.create(data);
  }

  // 20. preload - 기존 데이터 병합 후 반환 (없으면 undefined)
  async preloadUser(data: Partial<User>) {
    return this.userRepository.preload(data);
  }

  // 21. clear - 테이블 데이터 전부 삭제
  async clearUsers() {
    return this.userRepository.clear();
  }
}

이제 Repository의 메서드들을 어떻게 사용할 수 있는지 알겠지?
추가로 궁금한 점 있으면 알려줘! 😊

'내일배움 정리 > JS 문법 공부' 카테고리의 다른 글

NestJs 컨트롤러 - req 데이터 사용  (0) 2025.02.13
NestJs란  (0) 2025.02.13
NestJS - IsDate() vs @IsDateString()  (0) 2025.02.13
NestJS 파일 생성  (0) 2025.02.13
모듈과 미들웨어의 차이  (0) 2025.02.01