일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- application-properties
- 필터의 정의
- .orelseThrow
- filter vs interceptor
- 세션vs쿠키
- springSecurityFilterChain 오류
- spring
- @Controller
- controller
- MVC
- abap value in field Data Class error
- 구글 보안 api 활용
- 유연한 컨트롤러1 - v5
- 김영한
- Validation
- 세션이란
- Testcode
- 쿠키의 정의
- optional
- jpa
- 필터vs인터셉터
- 401오류
- SpringMVC
- 인터셉터의 정의
- 세션의 정의
- java.lang.AssertionError
- BindingResult
- n+1
- spring MVC
- 쿠키란
- Today
- Total
ABAP DUMP ERROR 24시
JPA Proxy가 뭐야? 왜 사용해? 본문
# 인프런 김영한의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 개인적으로 정리한 글입니다.
정리
1. Proxy가 뭐야?
=> Entity의 틀을 갖고 있지만 내용이 없는 중간 단계의 역할을 하는 것. = 비서역할
2. Proxy 왜 사용해?
=> 성능을 최적화 하기 위해서 사용한다.
3. Proxy 어떻게 최적화해?
=> Lazy loading 과 proxy의 사용으로 해결한다, 다음 chapter
살펴보기
1. Proxy가 뭐야?
1. 클라이언트가 Member의 Name을 찾아달라고 한다. //거래처 직원이 결제서류를 들고 찾아왔다, 사장님께 전달해달라고한다.
2. 프록시는 Member 라는 엔티티와 겉은 같지만 속이빈 Proxy 객체를 생성한다. //비서가 요청사항을 접수한다.
Member_Proxy //비서 |
Member target(변수들 있는곳) // 결제 서류 |
getName()// 사장님께 전달해주세요. |
3. 영속성 컨텍스트에 초기화 요청을 한다. //관련 부서에게 결제 서류 내용을 검수 요청을 한다.
=> Proxy에 값을 넣기위해 영속성 컨텍스트한테 부탁하는 과정.
4. 영속성 컨텍스트는 Proxy의 명령을 받아 DB를 조회한다. // 관련 부서는 검토를 진행한다.
5. 실제 Entity가 생성이 된다. // 사장님이 최종 서류를 받고 비서에게 계약하라고 말한다.
6. Proxy에 들어간 target을 통해 Member의 Name이 반환이 된다. // 비서는 거래처 직원에게 계약한다고 전한다.
2.Proxy 왜 사용해?
예시)
Member 엔티티를 조회 할때 team 클래스도 함께 조회를 해야할까요?
정답은 No! 상황에 따라 달라. 필요할때도 필요 없을 때도 있다.
// 일부 회원 점수만 필요한데 부서 전체 내용까지 가져올 필요가 있을까? == 상황에 따라 다르지!
일반 적인 Code 에서
public class Member extends BaseEntity {
@Id@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "member_id")
private Long id;
@OneToMany
@JoinColumn(name = "team_id")
private Team team;
Member 안에 Team 이 있는 경우 Member 객체를 불러오면 team의 내용까지 inner join해서 가져오게 된다!
만약에 team 정보가 필요한 경우라면 가져다 쓰면 되지만 필요하지 않을 경우에는 가져올 필요가 없지!
낭비 == 성능 하락 == 최적화의 필요.
'[WEB]Back-end > JPA' 카테고리의 다른 글
영속성 전이 :CASCADE (0) | 2022.01.17 |
---|---|
Proxy 어떻게 최적화해? (0) | 2022.01.14 |
다양한 연관관계 매핑 (0) | 2022.01.10 |
@Inheritance(strategy = Inheritance.Type.JOINED) 전략 (0) | 2022.01.08 |
@joinColumn, @mappedby, 양방향 Mapping시 주의해야할점 (0) | 2022.01.07 |