인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

이원태님의 프로필 이미지
이원태

작성한 질문수

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

SQL 중심적인 개발의 문제점

33, 34, 35 pdf 페이지 관련 질문입니다!

작성

·

167

1

안녕하세요 강사님 :)

 

설명하신 내용 중에 헷갈리는 부분이 있어 질문 드리고자 합니다.

 

pdf 페이지 기준으론, 33 34 35페이지에 해당하는 부분입니다! (01. JPA 소개)

 

33페이지에서 member.getOrder() 을 실행하면 null이 발생한다고 말씀하셨는데, 왜 null이 발생하는 지 잘 모르겠습니다.

제 생각으론 member class에 getOrder() 메서드가 있다는 것은, member class에 order 객체가 있다는 것으로 봐도 무방할 것 같은데

아래코드에 제가 생각한 부분을 적어놨습니다.

 

class Member {

Order order;

public Order getOrder() {

}

}

왜 null이 반환되는 것인지 잘 모르겠습니다.

 

34페이지에서 memberDAO.find()의 반환값인 member 객체를 신뢰할 수 없는 이유를 잘 모르겠습니다.

 

강사님께서 find()의 내부 동작으로 쿼리가 무엇이 날라갈 지 모르기 때문이라고 도중에 말씀하셨는데, 무엇을 의미하는 것인지 잘 모르겠습니다.

 

35페이지는 강사님께서 설명하신 내용을 이해할 수가 없습니다.

 

모든 객체를 미리 로딩할 수 없기 때문에 상황에 따라 회원 조회 메서드를 여러개 만든다고 말씀하셨는데, 

 

미리 로딩한다는 말의 의미를 모르겠고,

왜 미리 로딩할 수 없기 때문에 회원 조회 메서드를 여러개 만들어야 하는 지 잘 모르겠습니다.

 

부족한 점이 많아 질문을 많이 드려서 죄송합니다. ㅠㅠ

 

늘 감사합니다

답변 1

3

안녕하세요. 이원태님, 공식 서포터즈 David입니다.

.
1. 객체를 담는 변수가 존재한다고 변수 안에 객체가 들어가 있는게 아닙니다. 아무것도 없을 수 있습니다. (null) 그 이유는 Member 테이블과 Team 테이블을 조인했기 때문입니다. Order 테이블과 조인하여야 Member 내 Order 객체를 확인했을 때 null이 안 나옵니다. 물론 특정 Member와 연관된 Order가 있어야 합니다.

2. 1번 항목과 같은 맥락입니다. find() 메서드가 내부적으로 Member를 불러올 때 Team과 Order가 함께 조인될지, Team만 조인될지 메서드 내 작성된 쿼리를 까보기 전까지 모릅니다. Member 불러오니깐 다 있겠거니 하고 Order를 getOrder했는데 내부적으로 Order를 조인하지 않았다면 null이 발생할 수 있죠.

 

3. Member를 불러올 때

Team만 조인하는 메서드

Team과 Order 둘 다 조인하는 메서드

둘 다 Member를 가져오는 메서드인데 가져오는 데이터의 수는 다릅니다.

Member를 불러올 때 그냥 다 불러오면 되지 않느냐?라고 반문하실 수 있지만 성능을 위해 필요한 것만 불러오는게 좋습니다.

 

강의를 처음 들으셔서 혼란스러우신 것 같습니다.

하나하나 이해가 안 되시더라도 강의를 쭉 듣다보면 알아지는 것들이 있으니 강의를 먼저 한 싸이클 쭉 돌려보시는 것을 추천드립니다:)

.
감사합니다.

이원태님의 프로필 이미지
이원태
질문자

상세한 설명 감사합니다. :)

말씀하신대로, 처음 듣는 생소한 용어들이 너무 많아 혼란스러운 상태인 것 같습니다.

조언해주신대로 한 싸이클 먼저 돌려보겠습니다.

 

이원태님의 프로필 이미지
이원태

작성한 질문수

질문하기