JAN's History

DTO가 필요한 이유 본문

스프링

DTO가 필요한 이유

JANNNNNN 2024. 4. 29. 15:32

1. Null 값 처리를 하기 위해서!

  엔티티에는 특정 필드가 null이 될 수 있는 경우가 있습니다. 그러나 API에서는 클라이언트로부터 값을 요청할 때 해당 필드가 null이 될 수 없도록 제한하고 싶을 수 있습니다. 이런 경우에 DTO를 사용하여 클라이언트로부터 전달받은 데이터 중 필요한 값만을 받아 처리할 수 있습니다. 이렇게 함으로써 null 값이 들어가는 것을 방지할 수 있습니다.

 

public class UserRegistrationDTO {
    private String username;
    private String email;
    // getters and setters
}

예를 들어, 사용자 등록 API에서는 사용자 이름과 이메일을 필수로 받아야 하지만, 비밀번호는 선택적으로 받을 수 있습니다. 따라서 사용자 등록 요청을 받을 때 비밀번호 필드가 null이 되지 않도록 DTO를 사용하여 비밀번호를 제외한 필요한 정보만을 전달 받을 수 있습니다.

➡️즉, null값이 들어가면 안되기 때문에 필요에 따라서 그 값만 받아주는 DTO가 필요한 것입니다!

 

2. 데이터 노출 제어

  엔티티 클래스에는 데이터베이스와 관련된 로직 및 속성이 포함되어 있습니다. 이러한 엔티티를 직접 노출하면 데이터의 보안과 무결성이 위협받을 수 있습니다. DTO를 사용하면 엔티티의 특정 필드만을 전달할 수 있으므로 데이터 노출을 제어할 수 있습니다. 또한 DTO를 사용하여 클라이언트가 필요한 데이터만을 받을 수 있도록 데이터를 필터링할 수 있습니다.

예를 들어, 사용자 정보를 나타내는 엔티티 클래스가 있을 때, 클라이언트에게 전달할 때는 사용자 이름과 이메일만을 포함하는 DTO를 사용하여 보안을 강화할 수 있습니다.

➡️즉, Entity에 직접 접근하면 데이터 값이 소실위험이 있기 때문에 DTO가 필요한 것입니다!

 

3. 버전 관리 및 호환성

  API는 시간이 지남에 따라 변경될 수 있습니다. 엔티티 클래스의 구조가 변경되거나 새로운 필드가 추가될 수 있습니다. 이 경우 API의 이전 버전과의 호환성을 유지하기 위해 DTO를 사용할 수 있습니다. 새로운 필드가 추가된 엔티티에는 새로운 DTO를 만들고, 이전 버전의 API 요청에는 기존의 DTO를 사용할 수 있습니다. 이렇게 함으로써 클라이언트는 이전 버전과의 호환성을 유지하면서도 새로운 기능을 사용할 수 있습니다.

예를 들어, 사용자 엔티티에 새로운 필드가 추가된 경우, 새로운 필드를 포함하는 새로운 DTO를 만들어 새로운 API 버전을 지원할 수 있습니다. 이전 버전의 API는 기존의 DTO를 계속 사용하여 호환성을 유지할 수 있습니다.

// 새로운 필드가 추가된 경우
public class UserDTO {
    private String username;
    private String email;
    // getters and setters
}

// 새로운 필드를 추가한 새로운 API 버전을 위한 DTO
public class UserDTOV2 {
    private String username;
    private String email;
    private int age;
    // getters and setters
}