DTO, Entity, Response ?
DTO와 Entity 와 Response 파일에 대해 알아볼려고 한다. 그에대해 연관관계를 통해 Client 에게 Response 로 데이터를 줄때 어떠한 방식을 사용해야 하는가에 대해 게시글을 작성 할려고 한다.
DTO 란?
계층간 데이터 교환을 위해 사용하는 객체이다. 즉, Attribute 에 담을 DTO 라는 객체이다.
Entity 란?
JPA 에서 쓰는 Entity 즉 DB 의 데이터 교환을 위해 사용하는 객체이다. 즉, DB 에서 데이터를 가져오고 관리하는 객체이다.
Response
데이터베이스에서 데이터를 가져와서 Client 에게 준다고 하면,
데이터베이스에서는 Entity 를 이용해서 가져와서 DTO 로 변환시켜 Clinet 에게 줘야 한다.
이 방법이 불편해서 DTO, Entity, Response 세개를 연관하여 관리할려고 만든것이 Response 방식이다.
자세한 내용은 아래에서 설명 하겠다.
DTO, Entity, Response 연관관계
Client 가 Server 에게 요청하고 Database 에 요청하고 다시 거꾸로 Client 에게 주는 형식이다.
여기서 Model 를 좀더 편리하게 관리할수 없을까? 해서 만들게 된것 같다.
순서는 Entity -> DTO -> Response 해서 Client 에게 Response 를 주게 된다. 아래의 예시를 보면 확실하게 이해가 될것이다.
예시코드
Entity
@Getter
@Entity
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
@Setter
private String name;
public User(Long id,String name) {
this.id = id;
this.name = name;
}
}
DTO
public record UserDTO(
Long id,
String name
) {
public UserDTO of(String name,Long id) {
return new UserDTO(id,name);
}
public UserDTO from(User user){
return new UserDTO(
user.getId(),
user.getName()
);
}
public User toEntity(UserDTO dto){
return new User(dto.id(),dto.name());
}
}
Response
public record UserResponse (
Long id,
String name
){
public UserResponse of(String name, Long id) {
return new UserResponse(id,name);
}
public UserResponse from(User user){
return new UserResponse(
user.getId(),
user.getName()
);
}
}
위와 같이 Entity 에서 DTO 로 변환 시킬수 있고, DTO 에서 Response 로 변환 시킬수 있다.
마지막으로 Response 으로 변환 시켜 Service 에서 데이터를 주고 Controller 에서 Response 를 주면 끝난다.
하지만 반대로 DTO 에서 Entity 로 변환 시킬수 있어 데이터를 받을때는 DTO 로 받고 Entity 로 바꾸고 데이터베이스에 저장하면 끝난다.
'Spring' 카테고리의 다른 글
Querydsl (2) | 2023.05.19 |
---|---|
Rest Repositories (0) | 2023.05.19 |
JUnit5, AssertJ (0) | 2023.05.11 |
JPA (1) (0) | 2023.05.11 |
TDD, BDD 개발 방법 (0) | 2023.05.02 |