결론 : DTO와 엔티티는 분리하고, 응답용과 요청용도 따로 만드는게 좋다
(Member)
: 데이터가 저장되는 클래스(MemberDtoRequest)
: Post 요청시에 받아야 하는 데이터(MemberDtoResponse)
: GET 요청시에 응답해줘야 하는 데이터Member로 예시를 들어보면
아무튼 저 세가지 같지가 않아 같게 했다가는 (프론트엔드 개발자 && 기획자 선생님들의) 민원 오지게먹고 다 뜯어고치게 되어 있다
언제나 고객들은 자신들도 뭘 원하는지 모른다
이외에도 뷰 결합도를 낮추고, 보안을 좋게한다
- 예시1 : 베이스볼 게임 in 코쿼
- 입력은 : 볼/스트라이크/안타
- 리턴은 : 몇회인지 , 말/초??(공격팀 수비팀) , 몇점인지, 공수교대 시점여부, 홈런을 때려맞으면 이게 1점짜리인지, 3점짜리인지 파악(출루주자)
- 약간은 심판의 역할도 코드상으로 탑재되어야함 : 즉 야구 도메인 지식이 있으면 편안
- 예시2 : 주민관리시스템
- POST시에는 입력받는건 : name, phoneNumber
- 서버 내부에서 알아서 자동적으로 처리해야할 데이터 : age, phonmeModel, gender, createdAt, isAlive 등의
- GET시에만 돌려받아야할 데이터 : name, PrimaryKey, createdAt, age
https://velog.io/@p4rksh/Spring-Boot에서-깔끔하게-DTO-관리하기
https://velog.io/@ohzzi/Entity-DAO-DTO%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C
@NonNull
: null을 허용하지 않을 경우@Nullable
: null을 허용할 경우@JsonIgnoreProperties(ignoreUnknown = true)
을 왜쓸까?class MemberDto {
Long id;
int age;
String name;
}
{
"id":40,
"age":27,
"name":"Kim-Mac-Book",
"status" : "angry"
}
@JsonInclude(JsonInclude.Include.NON_NULL)
이 코드는 왜 쓰는걸까@JsonInclude(JsonInclude.Include.NON_NULL)
을 추가해 주면 null인 데이터는 json결과에 나타나지 않습니다{
"Name": "홍대남22",
"shopMall": "홍대의류소매(주)",
"phoneNumber": "010-1234-4567",
"address": "서울시 마포구 홍익대로"
}
{
"Name": "홍대남22",
"shopMall": "홍대의류소매(주)",
"phoneNumber": "010-1234-4567",
"address": "서울시 마포구 홍익대로"
}