NestJS와 TypeORM을 사용하면서 발생한 `"@EntityRepository" is deprecated` 경고는 TypeORM에서 데코레이터 기반의 리포지토리 정의가 더 이상 권장되지 않기 때문입니다. 이전에는 `@EntityRepository` 데코레이터를 사용하여 엔티티에 대한 커스텀 리포지토리 클래스를 쉽게 정의할 수 있었지만, 최근의 TypeORM 버전에서는 이 방식이 권장되지 않고 있습니다.
### 변경된 접근 방법
TypeORM은 이제 데코레이터를 사용하는 대신, 더 명시적이고 유연한 방법으로 리포지토리를 정의하고 사용할 것을 권장합니다. 이는 다음과 같은 방법으로 진행할 수 있습니다:
1. **직접 `Repository` 또는 `EntityManager`를 주입받아 사용하기**: 이 방법은 리포지토리를 직접적으로 서비스에 주입하여 사용합니다. NestJS에서 `TypeOrmModule.forFeature()`를 통해 엔티티를 등록하고, 서비스에서 필요한 리포지토리를 DI(Dependency Injection)를 통해 주입받아 사용합니다.
2. **기존 클래스를 확장하지 않고 서비스에서 `getRepository` 또는 `getManager` 사용하기**: 이 방법은 엔티티 관리자 또는 리포지토리 팩토리 함수를 사용하여 리포지토리 인스턴스를 직접 가져와 사용합니다.
### 예제 코드 수정
기존 코드에서 `@EntityRepository` 데코레이터를 제거하고 NestJS의 의존성 주입 시스템을 사용하여 리포지토리를 주입받는 방식으로 변경할 수 있습니다. 다음은 그 예입니다:
```typescript
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Board } from './board.entity';
@Injectable()
export class BoardService {
constructor(
@InjectRepository(Board)
private boardRepository: Repository<Board>,
) {}
// 여기에서 boardRepository를 사용하여 데이터베이스 작업 수행
}
```
이 코드는 `BoardService` 내에서 `Board` 엔티티에 대한 리포지토리를 주입받아 사용하는 방법을 보여줍니다. 이렇게 변경하면 `@EntityRepository` 데코레이터를 사용하지 않아도 되며, TypeORM의 권장 사항에 따라 리포지토리를 사용할 수 있습니다.
### 정리
TypeORM의 이러한 변화는 라이브러리가 더 명확하고 유지 관리가 쉬운 코드를 장려하려는 시도의 일환입니다. 개발자로서는 이러한 변경 사항을 주시하고, 프로젝트에 적용하여 미래에 발생할 수 있는 호환성 문제를 방지하는 것이 좋습니다.
댓글 영역