엔티티를 직접 노출한 경우 V1
@GetMapping("/api/v1/members")
public List<member> memberV1(){
return memberService.findMembers();
}
이때 Member 엔티티에서 출력을 원치않는 필드는
@JsonIgnore 를 붙여준다.
@JsonIgnore
@OneToMany(mappedBy = 'member')
private List<order> orders = new ArrayList<>();
v1에 문제점.
-엔티티에 프레텐테이션 계층을 위한 로직이 추가된다
(@JsonIgnore같은 걸 프레젠테이션 계층을 위한 로직이다.)
-기본적으로 엔티티의 모든값이 노출된다.
-응답스팩을 맞추기위해 별도의 로직이 추가된다(@JsonIgnore 등 별도의 로직 추가)
-실무에서는 같은 엔티티에 대해 API가 용도에 따라 다양하게 만들어지는데
한 엔티티에 각각의 API를 위한 프레젠테이션 응답로직을 담기는 힘들다.
-엔티티가 변경되면 API 스팩이 변한다.
-추가로 컬렉션을 직접 반환하면 향후 API 스펙변경이 어렵다.
(별도의 request클래스 DTO를 생성하여 해결)
결론
API 응답스팩에 맞추어 별도의 DTO를 반환한다.
'JPA' 카테고리의 다른 글
| 2월 22일 JPA API 개발 고급 (0) | 2023.02.22 |
|---|---|
| 2월 22일 JPA 회원조회 V2 (0) | 2023.02.22 |
| 2월 22일 JPA 회원수정 API(Rest 스타일) (0) | 2023.02.22 |
| 2월 21일 회원조회 API v2 (0) | 2023.02.21 |
| 2월 21일 JPA API개발 기본 v1 (0) | 2023.02.21 |