DTO (Data Transfer Object)
✴DTO(Data Transfer Object)란 데이터를 전송하기 위한 객체 입니다. 계층 간(클라이언트 -> 서버, 서비스 <-> 데이터베이스) 간 데이터를 주고 받기 위해 사용되는 객체 입니다.
<1> DTO 사용 이유
자바에서 데이터를 전달 하는 방법은 여러가지가 있지만, DTO를 사용하는 이유는 다음과 같습니다.
✅ 1) 데이터 캡슐화 및 보호
DTO는 필요한 데이터만 전달하므로 불필요한 노출을 막을 수 있습니다.
예를 들어, 데이터 베이스에서 가져온 User 객체에는 비밀번호와 같은 민감한 정보가 포함될 수 있지만, DTO를 사용하면 필요한 필드만 전달할 수 있습니다.
✅ 2) 계층 간 데이터 전달 용이
DTO는 컨트롤러, 서비스, 리포지토리 간 데이터를 전달하는 역할을 합니다.
- Entity 객체를 직접 사용하면 데이터베이스 구조와 서비스 로직이 결합될 수 있습니다.
- DTO를 사용하면 데이터 형식이 고정되지 않고 유연하게 변경할 수 있습니다.
✅ 3) 데이터 가공 및 변환 용이
DTO 를 사용하면 데이터를 가공하거나 포맷을 변경하기 쉽습니다.
예를 들어, 날짜 형식 변환, 필드 이름 변경, 추가적인 가공 작업을 DTO에서 처리할 수 있습니다.
<2> DTO 사용 예제
☑ 1) DTO 없이 Entity 그대로 사용
@Entity
public class User {
@Id
@GenerateValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password; // 보안 문제 발생 가능
}
❗문제점:
- password 필드를 그대로 반환 하면 보안 이슈 발생 !
- User 엔티티의 변경이 클라이언트에 집접 영향을 줌
☑ 2)DTO를 활용하여 데이터 보호 및 가공
// DTO 정의
public class UserDTO{
private Long id;
private String username;
// 생성자
public UserDTO(Long id, String username){
this.id = id;
this.username = username;
}
// Getter & Setter
public Long GetId() { return id;}
public void setId(Long id) { this.id = id; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
}
✅장점
- password 필드가 노출되지 않음!
- 엔티티 API 응답을 분리하여 유지보수 용이 !
추가적인 설명은 업데이트 예정 입니다.
'IT 개발' 카테고리의 다른 글
react setStatus 와 괄호의 역할, 점연사자 화살표 함수 에 관하여 (0) | 2025.03.18 |
---|---|
react jsx 에서 쿠키란 또는 쿠키 설정에 관하여 (0) | 2025.03.17 |
JAVA DTO 및 Getter & Setter 개념 및 사용법 (1) | 2025.03.03 |
자바 spring 패키지 및 객체 에 대한 설명 (2) | 2025.02.19 |
카카오톡 광고 차단 방법 공유 드립니다. (0) | 2025.02.19 |