프론트에서 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);

    }

 

}

 

 

+ Recent posts