inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

페치 조인 2 - 한계

데이터뻥튀기, n+1 질문..

350

더콰니

작성한 질문수 8

1

1) N+1 문제는 1의 쿼리를날렷을시 N방의 쿼리가 나가는것이고
, 데이터 뻥튀기는 중복값이 나오는 거라고 이해하고있는데요
이둘은 다른 의미라고 봐도되는건가요?
2)N+1 문제에서
맴버와, 팀 LAZY 설정, N:1 관계라고 한다면요~
초기셋팅
Team teamA = new Team();
teamA.setName("teamA");
em.persist(teamA);
Team teamB = new Team();
teamB.setName("teamB");
em.persist(teamB);

Member member = new Member();
member.setName("김A");
member.changeTeam(teamA);

Member member5 = new Member();
member5.setName("홍A");
member5.changeTeam(teamA);

Member member1 = new Member();
member1.setName("정B");
member1.changeTeam(teamB);

Member member2 = new Member();
member2.setName("진B");
member2.changeTeam(teamB);

em.persist(member);
em.persist(member1);
em.persist(member2);
em.persist(member5);
List<Member> resultList = em.createQuery("select m from Member m join m.team", Member.class).getResultList(); for (Member memberOne : resultList) { System.out.println(memberOne.getTeam().getName()); }
맴버에관한 쿼리 1방. 팀에대한 쿼리 두방이 나갈거같습니다.. 이런경우가 N+1 이고 데이터 뻥튀기는 없다. 라고 봐도될까요?
3) 이번엔 2번문제의 반대인데요~ 조건은같구요
List<Team> result = em.createQuery("select t from Team t join t.members", Team.class).getResultList(); for (Team team : result) { System.out.println("team = " + team.getName()); for(Member members : team.getMembers()){ System.out.println("members = " + members.getName()); } }
이런경우는 팀에관한 쿼리 한방, 맴버의 이름 2방이 나가니,
N+1 이고 , 데이터 뻥튀기가 발생한다가 맞을까요
몇일째 N+1과 데이터 뻥튀기에대해 강의도 다시듣고 , 찾아보고하지만 머리 뇌리속에 안박히네요..

java JPA

답변 1

0

David

안녕하세요. dhdh9224@gmail.com님, 공식 서포터즈 David입니다.
.

1) N+1 문제는 1의 쿼리를날렷을시 N방의 쿼리가 나가는것이고

, 데이터 뻥튀기는 중복값이 나오는 거라고 이해하고있는데요

이둘은 다른 의미라고 봐도되는건가요?

=> 데이터 중복과 N+1 문제는 별개입니다.

2)N+1 문제에서

맴버와, 팀 LAZY 설정, N:1 관계라고 한다면요~

...

 List<Member> resultList = em.createQuery("select m from Member m join m.team", Member.class).getResultList(); for (Member memberOne : resultList) { System.out.println(memberOne.getTeam().getName()); }

맴버에관한 쿼리 1방. 팀에대한 쿼리 두방이 나갈거같습니다.. 이런경우가 N+1 이고 데이터 뻥튀기는 없다. 라고 봐도될까요?

=> 네, 맞습니다. N+1 문제가 발생하게 되며 데이터 뻥튀기는 없습니다.

3) 이번엔 2번문제의 반대인데요~ 조건은같구요

 List<Team> result = em.createQuery("select t from Team t join t.members", Team.class).getResultList(); for (Team team : result) { System.out.println("team = " + team.getName()); for(Member members : team.getMembers()){ System.out.println("members = " + members.getName()); } }

이런경우는 팀에관한 쿼리 한방, 맴버의 이름 2방이 나가니,

N+1 이고 , 데이터 뻥튀기가 발생한다가 맞을까요

=> 네, 맞습니다. 팀 조회 쿼리 한 번, 조회된 팀이 각각 자신에게 속한 멤버를 불러오는데 N번의 멤버 조회 쿼리가 발생합니다. 또한 회원 수대로 팀의 데이터가 중복으로 들어가게 되므로 데이터가 뻥튀기 됩니다.

.
감사합니다.

안녕하세요 늦은 나이 늦깎이 개발자 지망생입니다.

0

11

1

질문있습니다.

0

65

1

리뉴얼 시기

0

135

2

변경감지(더티체킹) 이후 플러시할 경우의 쿼리

0

101

1

단일 테이블 시 null 값과 연관관계 필요성 질문

0

92

1

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

125

2

inheritance startegy 선택시 고려사항

0

90

1

Entity 동등성 비교

0

83

1

실무 조언 관련 질문입니다.

0

114

1

H2데이터베이스 파일 생성

0

129

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

1

123

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

105

1

JPQL 메소드와 락

0

107

1

Delivery @OneToOne

0

114

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

189

2

UnsupportedOperationException 발생

0

203

3

H2 Database 연결이 안됩니다.

0

155

2

연관관계 매핑 질문드립니다.

0

151

2

h2데이터베이스 실행오류

0

166

2

persistence.xml

0

206

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

146

1

영속성 컨텍스트

0

122

1

JPA 프록시

0

159

1

Native Query와 MyBatis

0

141

1