1. DTO란?
- 정의: Data Transfer Object의 약자로, 계층 간 데이터 전송을 위한 객체.
- 역할: 엔터티(Entity)와 분리된 객체로, 전송에 필요한 데이터만 담음.
- 사용 이유:
- 데이터 전송 최적화.
- 엔터티 보호.
- 응답 형식 제어.
2. DTO 매핑의 필요성
- 엔터티와의 차별화
- 엔터티는 데이터베이스와 직접 연결되므로, 외부 노출 시 보안 및 유지보수 문제가 발생할 수 있음.
- DTO는 전송에 필요한 최소한의 정보만 포함.
- 비즈니스 로직 분리
- DTO는 데이터 표현에만 집중, 비즈니스 로직과 무관.
3. 매핑 방식
- 수동 매핑
- 코드로 직접 매핑 수행.
- 장점: 세밀한 제어 가능.
- 단점: 반복 코드 증가.
예제 (Java):
public class UserMapper {
public static UserDTO toDTO(User user) {
UserDTO dto = new UserDTO();
dto.setId(user.getId());
dto.setName(user.getName());
dto.setEmail(user.getEmail());
return dto;
}
}
- 자동 매핑
- 매핑 라이브러리 활용(예: MapStruct, ModelMapper).
- 장점: 코드 간결화, 생산성 향상.
- 단점: 라이브러리 의존성, 복잡한 매핑 제어 한계.
예제 (MapStruct 사용):
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
UserDTO toDTO(User user);
}
4. DTO 매핑 시 고려 사항
- 성능
- 대규모 매핑 시 자동 매핑보다 수동 매핑이 더 효율적일 수 있음.
- 보안
- 민감한 데이터가 DTO에 포함되지 않도록 주의.
- 유지보수성
- DTO와 엔터티 변경 사항이 동기화되도록 관리.
5. 활용 사례
- API 응답 데이터
- 필요한 필드만 포함해 클라이언트에 응답.
- 계층 간 데이터 전달
- 서비스 계층에서 컨트롤러로 데이터 전달 시 사용.
- 비즈니스 요구사항 반영
- 특정 뷰나 화면에 맞춘 데이터 구조 제공.
Share article