inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

예제 도메인 모델과 동작확인

team.getMembers().add(this);

140

이충현

작성한 질문수 5

0

Member 클래스 안의 changeTeam 메소드 관련 질문있습니다.

해당 메소드안에 team.getMembers().add(this); 이 부분이 들어가게 되면 팀의 멤버를 찾는 쿼리가 한 번 더 나가게 될 것 같은데, 확인 결과 쿼리가 안나가는 것으로 보이는데 어떤부분을 알아보면 될까요?

 

image.png

 

image.png

 

image.png


 

 

java spring spring-boot jpa

답변 2

1

나무늘보

안녕하세요. 이충현님, 공식 서포터즈 코즈위버입니다.

이는 외래키를 Member 가 관리하고 있기 때문에 Member에 대한 업데이트만 발생하게 됩니다.

애플리케이션 코드는 결과적으로 member1 의 팀 아이디를 team2 로 바꾸는 것입니다.

그래서 쿼리는 member1 을 수정하는 쿼리만 발생하면 됩니다.

 

team.getMembers().add(this); 코드는 객체 사이의 관계를 연결한 것으로, 쿼리에 영향을 주지 않습니다. 현재 외래키 관리 주체(주인)이 Member 이므로 this.team = team; 코드에 의해 member1 수정 쿼리만 발생하게 됩니다.

 

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
이충현님께서 문의하신 연관관계 편의 메소드에서 team.getMembers().add(this)가 성능에 미칠 영향에 대해 다룬 유사한 질문과 답변이 여럿 있습니다.

우선, team.getMembers().add(this)는 객체 간의 양방향 관계 관리를 위해 사용됩니다. 하지만, 이 방식이 팀의 멤버를 찾는 추가적인 쿼리와 불필요한 메모리 사용을 초래할 수 있다는 우려가 있습니다.

관련된 기존 질문과 답변 중 비슷한 논의를 다룬 예시는 다음과 같습니다:

  • changeTeam 관련하여 질문 있습니다.
    changeTeam 메서드에서 기존 Team에서 Member를 삭제하는 로직을 추가해야 하는지에 대한 논의가 포함되어 있습니다. 이 과정이 객체 상태의 일관성을 유지하는 데 중요하지만, 데이터베이스에 영향을 주지 않기 때문에 팔로우업 로직을 생략하는 것이 실무적으로 더 나을 수 있다고 설명합니다.

  • ManyToOne OneToMany 연관관계에서 궁금한점..
    객체의 상태를 관리하기 위해 양쪽에 연관관계 편의 메소드를 배치 할 수 있지만, 실무적인 관점에서 일관성을 유지하기 위한 추가적 로직은 구현을 번거롭게 만들 수 있다는 것을 설명합니다.

  • 질문드립니다.
    연관관계의 주인이 아니므로, team.getMembers().add(this)가 데이터베이스에 직접적인 영향을 주지 않는다는 점에 대해 설명합니다. 이는 실무에서 성능 문제를 피하기 위해 필요한 코드를 생략할 수 있다는 논의입니다.

요약:

연관관계 편의 메서드에서 team.getMembers().add(this) 와 같은 로직을 추가하는 것은 성능에 영향을 줄 수 있습니다. 특히 팀에 많은 멤버가 있는 경우 문제가 발생할 수 있으므로 실무에서는 다음과 같은 주의가 필요합니다:

  1. 객체의 상태 일관성: 유지하려면 편의 메서드를 추가 하여야 하지만, 데이터베이스에 반영되지 않는 점을 고려해야 합니다.
  2. 성능 고려: 많은 데이터를 다룰 경우 쿼리와 메모리 사용을 최소화하는 쪽으로 최적화를 고려해야 합니다. 필요하다면 지연 로딩을 활용하거나 편의 메서드를 최소화 하는 것이 좋습니다.
  3. 실무적 접근: 실무에서는 각 케이스에 맞는 최적화를 선택하는 것이 중요합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

77

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

109

3

MemberRepository 구현체

0

61

1

pdf 표현 질문드립니다.

0

64

1

로그가 남지 않는 문제.

0

87

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

73

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

73

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

95

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

46

1

하이버네이트6에서의 최적화에 이은 질문

0

88

1

save() vs saveAndFlush DB 통신 횟수

0

55

1

순수 JPA 리포지토리 코드 수정부분

0

87

2

bulk연산 후 flush하는 이유를 모르겠어요

0

153

3

bulk insert 질문입니다.

0

185

2

교만했던 것 같아요.

0

147

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

150

2

동적 테이블에 대한 질문

0

87

1

영속성 전이와 연관관계

0

132

2

강의 10:25 질문

0

75

1

단건 update 질문

0

98

2

엔티티 와 도메인의 경계

0

129

1

UsernameOnlyDto 타입 type mismatch 오류

0

122

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

137

1