주말에 인프런 '따라하며 배우는 NestJS'를 수강하였다.
이미 NestJS로 개발을 하고 있고, 부족한 부분을 채워넣는 것이 우선이기에 강의를 끝에서부터 듣고 있다 ㅎ
그중에 오늘 @OneToMany와 @ManyToOne에 대한 내용을 수강하였는데, 내가 놓치고 있던 부분이 있어 다시 한번 정리하고자 한다.
상황은 이렇다.
1명의 User는 여러개의 Board를 쓸 수 있다. (@OneToMany)
1개의 Board - 게시글 하나에 대해서는 여러명이서 1개의 게시글을 작성할 수 없다. (@ManyToOne)
정리하자면, User의 입장에서는 @OneToMany이고, Board의 입장에서는 @ManyToOne인 것이다.
참고로 TypeORM을 사용할때 @ManyToOne을 PostgreSQL에 적용할 경우 많은 쪽(Boards)이 주인이며, @ManyToOne인 Board가 User의 id를 가지고 있어 FK(외래키)로 User의 id를 가지고 있는다.
위의 상황에 대해 Entity 파일에서 코드로 작성해보자.
ex) user.entity.ts
@OneToMany(type=>Board, board=>board.user, { eager: true })
boards: Board[];
1명의 User는 N개의 Board(게시글)을 작성할 수 있다.
(파라미터1) type => Board는 현재 User와 관계를 맺은 Entity가 Board임을 명시해준다.
(파라미터2) board => board.user => User 엔티티와 관계를 맺은 board 엔티티에서는 User에 접근하기 위해서는 board 엔티티의 user로 접근을 해야함을 명시한다
(파라미터3) eager:true => User을 가져올 때 board 정보도 함께 가져오는 것에 대한 설정을 의미한다. true면 User을 가져올때 board도 함께 가져온다.
그리고 Board[]가 배열인 이유는 1명의 User은 여러 개의 Board 게시글을 작성할 수 있기에 [] 배열에 값을 할당하였다.
ex) board.entity.ts
@ManyToOne(type=>User, user=>user.boards, { eager: false })
user: User;
여러개의 게시글이 한 명의 User에게도 속할 수 있는 것이 @ManyToOne이다.
(파라미터 1) type => User은 현재 Board와 관계를 맺은 Entity가 User임을 명시해준다.
(파라미터 2) user=>user.boards => Board 엔티티와 관계를 맺은 user 엔티티에서는 Board에 접근하기 위해 user에서 정의한 boards로 접근해야함을 명시한다.
(파라미터 3) eager:false => Board를 가져올 때 user 정보는 가져오지 않는다.
이번 강의를 들으면서 관계설정을 할때 파라미터로 들어오는 값들에 대해서 크게 상관을 하지 않았던 것 같은데 나의 큰 실수라고 생각했다. 앞으로 TypeORM 관계설정을 할 때 파라미터로 들어오는 값들에 대해서도 큰 인지를 해야겠다고 다시금 다짐하는 계기가 되었다.
'Backend > NestJS' 카테고리의 다른 글
timestamp 처리하는 방법 (0) | 2023.07.21 |
---|---|
extends Repository<레포지토리명>이 아닌 <엔티티명>으로 가야하는 이유 (0) | 2023.07.20 |
unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); (0) | 2023.03.24 |
model의 역할 + 게시판의 기본 구성 살펴보기 (0) | 2023.03.20 |
NestJS에서의 의존성 주입(Dependency Injection) (0) | 2023.03.16 |