-잘못된 예-
//Controller
@RequestMapping(value = "/sign-up", method = RequestMethod.POST)
public User signUp(@RequestBody User user) {
return userService.signUp(user);
}
...
//Service
public String signUp(User user) {
return userRepository.save(User user);
}
...
로그인 할 때 받은 User 정보(객체)를 그냥 User로 쭉 넘겨주면 안될까? or User객체를 클라이언트에게 그대로 전달 해주면 안될까?
→ 안된다. 단점이 너무 많다. 이유를 알아보자.
💡Entity & DTO
Entity : 데이터베이스의 테이블과 매핑되는 클래스로 데이터 원본이다.
DTO : 계층 간 데이터 전송을 위해 사용되는 객체로 아래 설명할 예정이다.
client의 요청 값이 달라졌을때 DB까지 달라져야하나?
DB에 문제가 생겼을 때 Client가 알아야하나? (DB 컬럼 이름 바뀌면 클라이언트 호출 변경해야하나?)
⇒ 데이터를 옮기는 객체가 하나일 경우, 여러 계층에서 그 객체에 수정을 가하면 단일 책임의 원칙이 깨진다
💡Setter는 쓰면 안될까?
많은 사람들이 데이터가 변조 될 수 있기 때문에 Setter는 사용하지 말라하지만 반만 맞는 말이다.
간단한 예로 Setter를 안쓴다면 update는 못할것이다.
”쓰지 말라는 것이 아니라 남용하지말고 최소한으로 쓰자” 가 맞는 말이다.
DB에서 가져온 데이터 원본 혹은 DB로 들어갈 연산이 끝난 원본이 될 객체.
💡 왜 Entity로 불릴까?
DB에서 객체를 Entity라고 부르는 데에서 유래 및 JDBC에서 쓰는 용어여서
계층 간 데이터 전송을 위해 사용되는 “데이터 전송 객체”으로 Entity의 사본이다.

보통 Service에서 많이 변환하지만 필요에 따라 Controller, Repository에서 Entity<->DTO 변환을 할 수도 있다.
하지만 이렇게 된다면 Service가 가진 책임이 너무 커지기에 변환 로직은 DTO가 가져가게 한다.