일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프로그래머스
- TypeORM
- 타입스크립트
- oauth
- concurrency limit
- this
- AWS
- 프론트엔드 과제
- 프리코스
- invalid_grant
- api 요청 수 제한
- 스프링부트
- bucket4j
- 코멘토 #코멘토실무PT #실무PT후기 #실무강의 #리액트강의 #웹프로그래밍 #react #웹개발실무
- compateto
- 음악 url 파일 다운로드
- 모던 자바스크립트
- Deep Dive
- 딥다이브
- 우아한 테크코스
- Dev-Matching
- 우아한테크코스
- 프론트엔드
- NestJS
- 유효시간 설정 url
- 자바스크립트
- 파일 url
- redis
- api 비동기처리
- 검색
- Today
- Total
개발 알다가도 모르겠네요
TypeORM 0.3 버전 repository pattern 적용 본문
2022년 3월, TypeORM 0.3 버전이 새롭게 배포되면서, 기존 @EntityRepository 데코레이터가 deprecated되었다.
@EntityRepository()
class BoardRepository extends Repository<Board> {}
기존에는 저런식으로 쓰였지만, 이제는 CustomRepository 데코레이터를 사용하거나, @Injectable()을 사용하여 서비스단에 의존성주입을 하는 방법을 사용해야 한다.
그중에서도 @Injectable이 코드가 훨씬 간단해보여 알아보고자 한다.
검색 결과, @Injectable을 이용한 대부분의 사람들이 아래와 같이 구현했다.
@Injectable()
export class BoardRepository extends Repository<Board> {
constructor(private dataSource: DataSource) {
super(Board, dataSource.createEntityManager());
}
}
BoardRepository는 Repository<Board>를 상속하고 있으며, Repository의 모든 메소드가 BoardRepository에서 이용 가능하다.
DataSource를 통해 EntityManager를 생성하는 것이 주목할 만한 부분이다. 이렇게 되면, 상속을 통해 부모 클래스의 기능을 재사용할 수 있지만, 클래스 간의 강력한 결합을 유발하며 코드의 유연성과 테스트 가능성이 줄어들 수 있다.
아래의 코드가 더욱 깔끔해보인다.
@Injectable()
export class BoardRepository {
constructor(
@InjectRepository(Board)
private readonly userRepository: Repository<Board>,
) {}
}
BoardRepository는 Repository<Board>를 의존성 주입을 통해 받아드리고 있다.
@InjectRepository(Board) 데코레이터는 TypeORM의 일부로, 해당 엔티티의 레포지토리를 주입하는 데 사용된다.
이 코드는 의존성 주입 패턴을 따르고 있고, 테스트 가능성과 결합도 감소 등의 이점을 제공한다.
취향에 맞게 선택해서 적용해보면 될 것 같다.
'웹 > Nestjs' 카테고리의 다른 글
env파일 인식시키는 법 (0) | 2023.06.14 |
---|---|
Nestjs 환경에서 path alias 적용하는 법 (0) | 2023.05.29 |