IT 개발

자바에서 DTO 란 무엇 일까.

darkblack 2025. 2. 21. 10:51

 

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 응답을 분리하여 유지보수 용이 !

 

 

추가적인 설명은 업데이트 예정 입니다.