JAN's History
DTO가 필요한 이유 본문
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
}
'스프링' 카테고리의 다른 글
@ControllerAdvice, @ExceptionHandler로 에러처리하기 (0) | 2024.05.09 |
---|---|
스프링부트에서 AOP를 활용하여 Sentry 및 기본 파일로 Log 적용하기 (0) | 2024.05.02 |
<Optional>을 사용해야 하는 이유: Null 안전성과 명시적 코딩 (0) | 2024.04.17 |
스프링과 JPA를 이용한 웹개발 프로젝트_View 구현 2 (1) | 2024.04.12 |
스프링과 JPA를 이용한 웹개발 프로젝트_View 구현 1 (0) | 2024.04.11 |