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

이충현님의 프로필 이미지
이충현

작성한 질문수

실전! 스프링 데이터 JPA

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

team.getMembers().add(this);

작성

·

47

·

수정됨

0

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

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

 

image.png

 

image.png

 

image.png


 

 

답변 2

1

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

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

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

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

 

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

 

감사합니다.

0

안녕하세요, 인프런 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. 실무적 접근: 실무에서는 각 케이스에 맞는 최적화를 선택하는 것이 중요합니다.

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

이충현님의 프로필 이미지
이충현

작성한 질문수

질문하기