JPA 활용 2를 듣다가 LIST 반환 대체하기

jihunnit·2022년 6월 27일
0

spring-inflean

목록 보기
3/5

인프런에서 김영한님의 JPA 활용 2편을 듣다가, Response에 대해서, 반환을 List로 하면 다른 데이터를 껴 넣거나 할 수 없으니 그렇게 하지 말자는 얘기가 있었는데.. 듣고보니 매우 일리가 있었다.
(예를 들면, 모든 유저를 전부 조회한 후, 유저의 수 까지 count해서 반환하는게 필요할 수 있으니까)

그래서 강의에서 다뤘던 부분에 대해서 간단히 개인적인 리팩토링을 진행해봤다. (그렇게 말하기도 민망한 수준이다.)

먼저, 강의에서 다뤘던 코드는 이렇다.

 @GetMapping("/api/v3/simple-orders")
    public List<SimpleOrderDto> ordersV3(){
        List<Order> orders = orderRepository.findAllWithMemberDelivery();
        List<SimpleOrderDto> result = orders.stream()
                .map(o -> new SimpleOrderDto(o))
                .collect(Collectors.toList());
        return result;
    }

이렇게 하면 List를 반환하여 이렇게 된다.

이제 이걸 조금 수정해보자.
먼저, 조회를 위한 class를 하나 만든다.
Result1 이라고 한다.

  @Data
  @AllArgsConstructor
  static class Result1<T>
  {
      private T data;
  }

그 후, 이걸 이용해 조회 결과를 받아보자

@GetMapping("/api/v31/simple-orders")
    public Result1 ordersV31(){
        List<Order> orders = orderRepository.findAllWithMemberDelivery();
        List<SimpleOrderDto> result = orders.stream()
                .map(o -> new SimpleOrderDto(o))
                .collect(Collectors.toList());
        return new Result1(result);
    }

요런 식으로 반환이 된다.

이제 이걸 한번 더 방향을 꺾어서 주문 수도 count 해보자.
Result2 라는 class를 만들자. 얘는

@Data
@AllArgsConstructor
static class Result2<T>
{
	int count;
    private T data;
}

요런 친구이다.

참고로 지금까지 이미 왕창 사용하고 설명하지만 ,@Data는 getter를 만들어주는, @AllArgsConstructor는 생성자를 만들어주는 친구들이다. lombok 플러그인에 존재한다.

여튼 Result2 class를 이용하여 응답을 받아보자

@GetMapping("/api/v32/simple-orders")
    public Result2 ordersV32(){
        List<Order> orders = orderRepository.findAllWithMemberDelivery();
        List<SimpleOrderDto> collect = orders.stream()
                .map(o -> new SimpleOrderDto(o))
                .collect(Collectors.toList());
        return new Result2(collect.size(),collect);
    }

이렇게 Result2에서 entity를 dto로 변환한 collect list의 size를 생성자의 매개변수로 받아줬다.

그러면 이런 응답을 받을 수 있다.

맨 위에 count라는 이름으로 조회 결과 수를 출력해줬다.
간단하지만, 의미있는 포인트가 될지도 모르지.
여튼간에 이런 장황한 글의 핵심은,

조회할 때 List 자체를 반환하지는 말자!

profile
인간은 노력하는 한 방황한다

0개의 댓글