주의점 메모장
엔티티, 리스트를 직접 반환하지말라
키스샷1104
2023. 11. 15. 04:13
이렇게 Entity를 직접 반환도 하지말자
예시를 들어보자
회원목록을 보려고 하는데 Member자체를 호출해버리면 거기에 딸린
orders까지 보인다 즉 정보를 조회하면 그 사람이 주문 한것까지 조회가 된다는것이다. 만약 다른사람이 어느 사람을 조회했는데 저렇게 된다면 별로 좋지 않을것이다.
그렇다고
이렇게 JsonIgnore를 쓰면 orders는 넘어가지 않을것이다. 하지만 또 문제점이 있다.
조회를 하는 함수는 여러개가 있는데 모든 조회함수들은 orders를 호출하지 못하는 문제가 생기며 추가적으로 Entity가 스팩이 변하면 또 문제도 생기는것이다.
그리고 List를 그대로 반환하면 기능 확장이 어렵다. DTO를 넣어서 List도 넣고 다른것도 넣고 해서 유연하고 안전하게 가져가자
이것도 DTO를 생성하여 반환하는게 좋다
@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());
return new Result(collect);
}
@Data
@AllArgsConstructor
static class Result<T> {
private T data;
}
@Data
@AllArgsConstructor
static class MemberDto {
private String name;
}
api개발 시 Controller에서 Entity절대로 노출, 반환 하지말자