728x90
- 회원등록 API v1, v2 차이 비교
- 회원등록 V1: 요청 값으로 Member 엔티티를 직접 받습니다.
- 문제점
- 엔티티에 프레젠테이션 계층을 위한 로직이 추가됩니다.
- 엔티티에 API 검증을 위한 로직이 들어갑니다. (@NotEmpty 등등)
- 실무에서는 회원 엔티티를 위한 API가 다양하게 만들어지는데, 한 엔티티에 각각의 API를 위한 모든 요청 요구사항을 담기는 어렵습니다.
- 엔티티가 변경되면 API 스펙이 변합니다.
- 결론 - API 요청 스펙에 맞추어 별도의 DTO를 파라미터로 따로 생성하여 받는것이 좋습니다.
@PostMapping("/api/v1/members")
public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){
Long id = memberService.join(member);
return new CreateMemberResponse(id);
}
@Data
static class CreateMemberRequest {
private String name;
}
@Data
class CreateMemberResponse {
private Long id;
public CreateMemberResponse(Long id) {
this.id = id;
}
}
- 회원 등록 V2: 요청 값으로 Member 엔티티 대신에 별도의 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);
}
- CreateMemberRequest 를 Member 엔티티 대신에 RequestBody와 매핑
- 엔티티와 프레젠테이션 계층을 위한 로직을 분리할 수 있습니다.
- 엔티티와 API 스펙을 명확하게 분리할 수 있습니다.
- 엔티티가 변해도 API 스펙이 변하지 않습니다.
- 또한, 엔티티를 API 스펙에 노출을 최소화 할 수 있는 장점이 있습니다.
728x90
'JPA' 카테고리의 다른 글
QueryDSL 소개 (0) | 2022.02.15 |
---|---|
페치 조인(fetch join) 의 활용 (0) | 2022.02.14 |
변경 감지(dirty check)와 병합(merge) (0) | 2022.02.14 |
(Querydsl) ON 절을 활용한 조인 (0) | 2022.02.14 |
queryDsl 기본 조인에 대해 (0) | 2022.02.14 |