본문 바로가기

JPA

2월 22일 JPA 회원조회 API

엔티티를 직접 노출한 경우 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