본문 바로가기
프로젝트/Recipository

[Dev] 23.01.26. 게시글 목록 조회 시 참조 링크 조회하지 않기

by 규글 2023. 1. 26.

 현재 게시글의 List만을 불러오는 것에 참조 링크의 정보는 필요가 없는데, 불필요한 요청으로 인하여 select query가 동작하고 있어서 이를 수정해야 할 필요성을 느낀다. 이는 client로 data를 전달할 DTO로 변환하는 과정에서 무조건적으로 참조링크의 정보를 가져오도록 되어 있을텐데, 이를 단순히 목록만을 가져오는 것에 그친다면 select query 가 수행되는 것을 저지할 수 있다.

 

 문제가 되는 부분은 Recipe Entity 의 DTO 로 변환하는 method에 있다. 단순히 게시글의 목록만을 return 하는 경우에도 이미지의 빨간 네모 부분이 동작하기 때문에 발생하는 문제다. 이를 분리해주면 되겠다.

 

작업

Recipe.java

(...)

    public RecipeDto toDto(){
        return RecipeDto.builder()
                .contentId(contentId)
                .title(title)
                .writer(member.getName())
                .build();
    }

    public RecipeDto toDtoWithAll(){
        List<String> linkList = new ArrayList<String>();
        if(link != null){
            link.forEach(tmp -> {
                linkList.add(tmp.getLink());
            });
        }

        return RecipeDto.builder()
                .contentId(contentId)
                .title(title)
                .writer(member.getName())
(...)

 작업 내용은 간단하다. 게시글의 전체 항목을 return 하는 기존의 변환 method 대신 게시글 목록을 return 하는 method를 따로 만들어 구분하게 했다. 바로 불편했던 링크 query 조회하는 부분이 사라졌다.

 

 더하여 index page에서의 전체 목록 조회를 하는 부분에서도 따로 @Query annotation을 활용하지 않은 findAll( ) 을 사용하고 있어서 fetch 적용이 안되고 있던 것을 새롭게 Repository method를 만들어서 적용시켜주었다.

 

 

 계획에 없던 query 를 들여다보느라 바로 다음 기능에 대한 작업이 늦어졌는데, 기존에 계획했던 부분까지 얼마 남지 않았다. 남은 부분은 게시글을 삭제하는 것과 게시글에 대한 paging, 카테고리 관련 작업 및 좋아요 관련 작업 정도가 남은 것 같다. 우선 게시글을 삭제하는 기능을 마친 뒤, 게시글 목록에 대한 paging까지 하고 다음 계획을 생각해볼 것이다.

댓글