ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 회원 조회 API
    JPA/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를 따로 만들어서 사용해야한다.

Designed by Tistory.