-
회원 조회 APIJPA/JPA 활용 2023. 7. 11. 18:15
회원 조회를 할 수 있는 컨트롤러이다.
@RestController // api 설계할 때에는 RestController 사용 @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; @GetMapping("/api/v1/members") // 조회는 GetMapping public List<Member> membersV1() { return memberService.findMembers(); } @GetMapping("/api/v2/members") public Result memberV2() { List<Member> findMembers = memberService.findMembers(); List<MemberDto> collect = findMembers.stream() .map(m -> new MemberDto(m.getName())) .collect(Collectors.toList()); // Member 리스트를 MemberDto 리스트로 바꾼 것 return new Result(collect); } @Data @AllArgsConstructor static class Result<T> { private T data; } // 리스트는 바로 내면 안되고 이렇게 한번 감싸주고 보내야한다. // data가 배열로 들어감 // 아까는 배열에 값들이 들어갔는데 지금은 {} 안에 data가 배열로 들어간다. @Data @AllArgsConstructor static class MemberDto { private String name; } }
먼저 V1 버전으로 설계를 하게 된다면 엔티티를 직접 사용하게 되는 것이다. 이럴 때에는 엔티티의 정보들이 다 외부로 노출되게 된다.
order 내역이 없긴 하지만 주문 내역이 있었다면 주문 내역이 다 외부로 노출되게 되었을 것이다.
V2 버전을 보면 Member의 리스트를 MemberDto의 리스트로 변경해주는 로직이 있다.
차이점이 있다면 첫 번째로 새로운 Dto를 통해 내보내고 싶은 변수만 내보낼 수 있다.
두 번째로 위의 경우에는 배열 안에 데이터들이 담겨있는데, 아래의 사진같은 경우에는 {}안에 데이터라는 값을 통해 배열로 데이터들이 담겨져있다. 이렇게 조회를 해야하고, 이렇게 하지않고 위와 같이 엔티티를 그대로 사용하게 되면 많은 오류들이 있기 때문에 API에서는 무조건 Dto를 따로 만들어서 사용해야한다.
'JPA > JPA 활용' 카테고리의 다른 글
간단한 주문조회 API - 지연 로딩과 조회 성능 최적화(2) (0) 2023.07.11 간단한 주문조회 API - 지연 로딩과 조회 성능 최적화 (0) 2023.07.11 회원 수정 API (0) 2023.07.11 회원 등록 API (0) 2023.07.11 웹 계층 개발 - 상품 주문과 주문 내역 (0) 2023.07.11