API를 만들어보자!

·2023년 5월 27일
0
@PostMapping("/api/v1/members")
    public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){
        Long id = memberService.join(member);

        return new CreateMemberResponse(id);
    }

@RequestBody ? Json으로 온 Body를 Member에 매핑해서 바로 바꿔줌
@Valid ? for validation

위 예시처럼 api가 entity와 1:1로 매핑되어 있다면,
entity 변수명을 바꿔버렸을때 api가 동작안하는 이슈가 발생할 수 있음. (= entity를 손대서 api 스펙 자체가 바뀌어버림!)
따라서, API 스펙을 위한 별도의 DTO를 생성해야함

-> 예시 :
@PostMapping("/api/v2/members")
    public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request){
        Member member = new Member();
        member.setName(request.getName());

        Long id = memberService.join(member);
        return new CreateMemberResponse(id);
    }

    @Data
    static class CreateMemberRequest {
    	@NotEmpty
        private String name;
    }

  • DTO 장점 :

    1. 엔티티를 바꿀 때 컴파일 오류로 알려주기 때문에 API 영향을 받지 않음 (컨트롤러에서 오류 확인 가능)

    2. 엔티티의 어느 값이 넘어올지 개발자 입장에서 알 수 없는데,
      DTO로 받으면 API 스펙 자체가 어떤 값을 넘겨받을지 정의되어 있기 때문에 확인이 가능함. (=> 유지보수에 좋음)

    3. 엔티티와 프레젠테이션 계층을 위한 로직 분리 가능
      (이게 가능하니깐 1,2번의 장점이 따라오는 것 같군 🤔)

결론 : API는 요청이 나가는것/받는것 전부 다 절대 entity를 사용하지 않 는 다. DTO를 사용하는 것을 권장.

0개의 댓글