인프런 커뮤니티 질문&답변

감바스님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V1: 엔티티 직접 노출

ManyToOne 에서 fetch join 에 대해 질문 있습니다.

작성

·

46

0

강의 1분쯤에 아래와 같은 내용이 있습니다.

"ManyToOne이나 OneToOne 같은건 fetch join을 하거나 DB 입장에서는 left out join해서 한번에 데이터를 다 끌고와도 성능에 무리가 없는데 컬렉션 조회 같은 경우에는 조회를 하는 순간 DB 입장에서는 데이터가 뻥튀기 된다."

궁금한 부분은 ManyToOne 관계에서 fetch join에서도 DB 입장에서 데이터가 뻥튀기 되지 않나 라는 생각입니다.

예를들어 member1, member2, member3이 teamA에 속해 있다고 했을때 이 상황에서 fetch join을 해도 어차피 내부적으로는 join으로 바뀌게 되므로 결과적으로는 아래와 같이 출력이 되므로 DB 입장에서 결국 이 상황도 데이터 뻥튀기 이지 않나 라는 생각이 듭니다.

member1 : teamA

member2 : teamA

member3 : teamA

답변 1

0

안녕하세요. 감바스님, 공식 서포터즈 y2gcoder입니다.

정확히는 DB 입장 + 조회 대상 (from절) 의 입장에서 봐주시면 감사하겠습니다 🙂

예를 들어

select * from members join teams on members.team_id = teams.id;

라면 members 입장에서는 member가 3개니 위에서 말씀해주셨던 것 과 같이

member1(teamA)
member2(teamA)
member3(teamA)

가 나오는 것이 맞습니다!

그러나

select * from teams join members on teams.id = members.team_id

를 할 때는 쿼리 결과가

teamA(member1)

teamA(member2)

teamA(member3)

입니다. 보통 teams을 기준으로 team이 하나가 있다면 로우 수가 1개가 나오는게 자연스럽습니다. 그러나 지금은 join 으로 인해 같은 teamA에 대한 로우 수가 3개입니다.

 

이런 점에서 데이터가 뻥튀기되었다고 표현하는 것입니다 🙂

 

감사합니다.

감바스님의 프로필 이미지
감바스
질문자

감사합니다.