[CowAPI] 10. ResponseDto

준돌·2022년 7월 2일
0

오늘의 Cow

목록 보기
15/45
  1. 문제
  • foreign key로 참조된 데이터가 무한하게 요청이 가는 현상
  • 클라이언트가 필요하지 않은 데이터(password, isDeleted)를 보냄

  1. 원인

img

  • User와 Notice가 UserId로 참조 되어 있다고 생각해보자
  • Notice를 반환할 경우 Notice안에 있는 User가 반환이 된다.
  • Notice 안에 있는 User에도 Notice가 있다.
  • User에 있는 Notice를 반환하면서 무한 루프가 형성이 된다.

  1. 해결방안 (조사)
  • 직렬화와 역직렬화를 막기 위해 @JsonIgnore 어노테이션을 활용
  • 응답하기 위한 DTO를 만든다.

  1. 설계
  • Entity : id로 구분되며 실제 DB와 매핑되는 객체, 비지니스 로직을 갖을 수 있다.
  • DAO : 데이터를 조회하거나 조작하기 위한 객체
  • DTO : 계층간 데이터를 교환하기 위한 객체, 로직을 갖지 않고 Getter, Setter만을 갖는다.
  • ResponseDto : 클라이언트로 데이터를 전송하기 위한 객체, 클라이언트가 필요한 데이터만을 포함한다.

  1. 코드
  • 역직렬화를 무시하기 위해 @JsonIgnore를 사용 했습니다.
  • RespoinseDto로 모든 코드를 수정합니다.
# Controller
@GetMapping("/QnAs/{QnAId}")
public ResponseEntity<QnAResponseDto> readQnA() {
	return ResponseEntity
    		.ok()
        	.body(qnAService.readQnA().toResponse());
}
# Service
public QnADto readQnA() {
	...
	
    return QnADto;
}
# Dto
public class QnADto {
	...
    
	public QnAResponseDto toResponse() {
    	...
        
        return QnAResponseDto;
    }
}
# ResponseDto
public class QnAResponseDto {
	...
}
profile
눈 내리는 겨울이 좋아!

0개의 댓글