반응형
이번 포스트에서는 SpringBoot 프로젝트에서 왜 Entity를 DTO로 변환시켜서 사용하는지 알아보자
1. 엔티티와 DTO
- 엔티티(Entity):
- 엔티티는 데이터베이스의 테이블과 직접 매핑되는 객체로, 비즈니스 로직을 포함할 수 있다. 엔티티는 데이터베이스와의 상호작용을 위해 설계되며, 변경이 발생하면 데이터베이스 스키마에도 영향을 미칠 수 있다.
- 엔티티는 데이터베이스의 테이블과 직접 매핑되는 객체로, 비즈니스 로직을 포함할 수 있다. 엔티티는 데이터베이스와의 상호작용을 위해 설계되며, 변경이 발생하면 데이터베이스 스키마에도 영향을 미칠 수 있다.
- DTO(Data Transfer Object):
- DTO는 계층간 데이터 교환을 위한 객체로, 로직을 포함하지 않고 순수한 데이터만을 가지고 있다. DTO는 특정 엔티티의 일부 데이터나 여러 엔티티의 조합된 데이터를 전달하는 데 사용될 수 있으며, 클라이언트와 서버 간의 통신에 최적화된 구조를 가진다.
2. 엔티티를 직접 사용하는 문제점
- 데이터 노출 문제
- 엔티티를 직접 사용하면 클라이언트에게 불필요한 정보까지 노출될 수 있으며, 보안에 민감한 정보까지 유출될 위험이 있다.
- 엔티티를 직접 사용하면 클라이언트에게 불필요한 정보까지 노출될 수 있으며, 보안에 민감한 정보까지 유출될 위험이 있다.
- 결합도 증가
- 엔티티 변경이 API 스펙에 직접 영향을 미칠 수 있어, 엔티티와 API 간의 강한 결합이 발생한다. 이로 인해 유지보수가 어려워지며, 확장성이 제한된다.
- 엔티티 변경이 API 스펙에 직접 영향을 미칠 수 있어, 엔티티와 API 간의 강한 결합이 발생한다. 이로 인해 유지보수가 어려워지며, 확장성이 제한된다.
- 성능 이슈
- 필요한 정보만을 선택적으로 제공할 수 없어 성능 최적화가 어려워진다. 불필요한 데이터까지 로드하게 되면 시스템의 응답 시간과 리소스 사용량이 증가할 수 있다.
3. DTO 사용의 장점
- 데이터 노출 제어
- DTO를 사용하면 필요한 정보만을 선택적으로 제공할 수 있으며, 민감한 정보의 노출을 방지할 수 있다. 이로 인해 클라이언트에게 정확한 데이터를 안전하게 전달할 수 있다.
- DTO를 사용하면 필요한 정보만을 선택적으로 제공할 수 있으며, 민감한 정보의 노출을 방지할 수 있다. 이로 인해 클라이언트에게 정확한 데이터를 안전하게 전달할 수 있다.
- 유연한 구조
- API 스펙과 엔티티 간의 결합도를 낮춰 유지보수를 용이하게 하며, 변경에 대한 영향을 최소화한다. 이로 인해 시스템의 확장성과 유연성이 향상된다.
- API 스펙과 엔티티 간의 결합도를 낮춰 유지보수를 용이하게 하며, 변경에 대한 영향을 최소화한다. 이로 인해 시스템의 확장성과 유연성이 향상된다.
- 성능 최적화
- 필요한 데이터만을 로드하여 성능을 향상시킬 수 있으며, 네트워크 트래픽을 최소화할 수 있다. 이는 시스템 전체의 효율성을 높이는 데 기여한다.
- 필요한 데이터만을 로드하여 성능을 향상시킬 수 있으며, 네트워크 트래픽을 최소화할 수 있다. 이는 시스템 전체의 효율성을 높이는 데 기여한다.
예시 코드
// 엔티티 클래스
@Entity
public class User {
@Id
private Long id;
private String username;
private String password; // 클라이언트에게 노출되면 안 되는 정보
// Getters, Setters, Constructors ...
}
// DTO 클래스
public class UserDTO {
private Long id;
private String username; // 필요한 정보만 포함
// Getters, Setters, Constructors ...
}
// 변환 로직
public UserDTO convertToDTO(User user) {
return new UserDTO(user.getId(), user.getUsername());
}
- 위의 예시에서 User 엔티티에는 민감한 정보인 password가 포함되어 있다. 이를 클라이언트에게 노출시키지 않기 위해 UserDTO를 사용하여 필요한 정보만을 전달한다.
DTO를 사용하면 데이터 노출을 제어하고, 유연한 구조를 가지며, 성능을 최적화할 수 있다.
따라서 JPA와 Spring Boot 환경에서는 엔티티 대신 DTO를 사용하여 데이터를 처리하는 것이 바람직하다.
2023.08.13 - [JPA] - Spring JPA - 연관관계 매핑
반응형
'Spring Data JPA' 카테고리의 다른 글
[Spring] Data JPA의 구조를 알아보자 (1) | 2023.10.24 |
---|---|
Spring JPA - 데이터 영속화란? (0) | 2023.08.13 |
Spring JPA - 연관관계 매핑 (0) | 2023.08.13 |
Spring JPA - Entity (0) | 2023.08.13 |
Spring JPA 영속성 컨텍스트(EntityManager) (0) | 2023.08.13 |