프론트에서 Member 정보를 caching 하기에 데이터가 너무 많아, 데이터정보를 최소화 하려고한다.
(_link , 불필요한 항복) 등 을 삭제처리 하려고 한다.
1.findAllBy API 에 대해서 경량화가 필요할때(Front에서 전체조회하여 AutoComplete 에 사용) 가 있고, 아닐때가 있어서 Dynamic한 Projection 적용이 필요하다.
public interface MemberRepository extends JpaRepository<Member, Long> , QuerydslPredicateExecutor<Member> , QuerydslBinderCustomizer<QMember> {
<T> List<T> findAllBy(Class<T> type);
}
memberRepository.findAllBy(MemberProjection4FrontCache.class); |
@Projection(name="memberProjection4FrontCache", types = { Member.class }) public interface MemberProjection4FrontCache { Long getId();
String getKoreanName();
Reference<Category> getPositionCode();
OnlyDownloadUrlProjection getProfileImage();
List<OnlyOrganizationProjection> getDepartmentList(); } |
2.Response _embedded 에 불필요한 내용 삭제
produces = "application/x-spring-data-verbose+json"
@RestController @RequestMapping(value = "/members") @RequiredArgsConstructor public class MemberController { private final MemberLogic memberLogic;
// application/x-spring-data-verbose+json : _link 등 hateoas 관련된거 제거. @GetMapping(value="findAllMemberWithoutLink" , produces = "application/x-spring-data-verbose+json") public List<MemberProjection4FrontCache> findAllMemberWithoutLink(){ return memberLogic.findAllBy(MemberProjection4FrontCache.class); }
} |
'Web개발 > JPA' 카테고리의 다른 글
JPA non-Id custom generator 방법 (0) | 2021.07.01 |
---|---|
Spring data rest is Null 이나 is Not null (0) | 2021.04.21 |
Projection 사용법 & Projection 안에 Projection (0) | 2021.03.17 |
JPA 로 프로젝트 하면서 느낀점 (0) | 2021.03.15 |
JPA 다대다 관계 풀기(1) (0) | 2021.03.14 |