DTO (Data Transfer Object)와 Entity 차이점

DTO (Data Transfer Object)란 ?

DTO(Data Transfer Object)는 계층 간 데이터 전송을 위한 객체입니다. 주로 프레젠테이션 계층(웹 계층)과 서비스 계층 또는 서비스 계층과 데이터 접근 계층 간의 데이터 전송을 목적으로 사용됩니다. DTO는 단순히 데이터를 캡슐화하며, 비즈니스 로직이나 데이터 접근 로직을 포함하지 않습니다.

왜 DTO가 필요한가?

데이터 캡슐화 및 추상화: DTO는 외부에 노출하고 싶지 않은 엔티티의 내부 구조를 감추고, 필요한 데이터만 전달합니다. 이를 통해 보안과 데이터 무결성을 유지할 수 있습니다.

데이터 형식 변환: 엔티티와 다른 구조를 가진 데이터를 클라이언트에 전달할 때, DTO를 사용하여 데이터 형식을 변환할 수 있습니다.

성능 최적화: 네트워크를 통해 전송되는 데이터의 양을 줄일 수 있습니다. 필요한 데이터만 포함된 DTO를 사용하여 불필요한 데이터를 제거할 수 있습니다.

계층 분리: 각 계층 간의 의존성을 줄이고, 코드의 변경에 따른 영향을 최소화할 수 있습니다. 예를 들어, 엔티티의 구조가 변경되더라도 DTO를 사용하는 코드에는 영향을 미치지 않습니다.

유효성 검사 및 데이터 조작: DTO를 사용하여 데이터 전송 전에 유효성 검사를 수행하고, 필요한 데이터를 추가하거나 수정할 수 있습니다.

DTO와 Entity의 차이점

역할

  • Entity: 데이터베이스 테이블과 매핑되는 객체로, 데이터베이스의 데이터 구조를 반영합니다. 주로 JPA(EntityManager)와 함께 사용됩니다.
  • DTO: 데이터 전송을 위한 객체로, 주로 웹 요청과 응답, 서비스 계층 간의 데이터 교환을 위해 사용됩니다.

구조

  • Entity: 데이터베이스의 테이블 구조와 일치하며, 각 필드는 데이터베이스 컬럼에 매핑됩니다. 보통 비즈니스 로직을 포함하지 않고, 데이터의 상태를 관리합니다.
  • DTO: 엔티티와는 다르게 필요한 데이터만 포함합니다. 엔티티의 일부 필드만 포함하거나, 여러 엔티티의 데이터를 조합할 수 있습니다.

책임

  • Entity: 데이터베이스 연산(삽입, 수정, 삭제, 조회)을 처리합니다. JPA 애노테이션을 사용하여 매핑 정보를 설정합니다.
  • DTO: 주로 데이터를 캡슐화하고, 전송을 목적으로 합니다. 비즈니스 로직이나 데이터 접근 로직을 포함하지 않습니다.

Entiy 예시

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;
    private String email;
    // Getter, Setter, Constructor
}

DTO 예시

public class UserDTO {
    private Long id;
    private String username;
    private String email;
    // Getter, Setter, Constructor
}