정의
데이터 전송 객체(Data Transfer Object, DTO)는 서로 다른 소프트웨어 컴포넌트 간에 데이터를 전달하기 위해 사용하는 객체이다. 일반적으로 비즈니스 논리나 메서드를 포함하지 않고, 데이터의 필드(field)와 그에 접근하기 위한 게터(getter) 및 세터(setter) 메서드만을 포함한다.
개요
데이터 전송 객체는 주로 계층 아키텍처(Layered Architecture) 또는 마이크로서비스 아키텍처에서 계층 간, 또는 서비스 간 통신 시 데이터를 구조화하여 전달하는 데 사용된다. 예를 들어, 프레젠테이션 계층과 서비스 계층 사이, 또는 REST API의 요청/응답 본문에서 JSON 형태로 직렬화되어 사용되기도 한다. DTO는 네트워크 전송 효율성과 데이터의 일관성 유지를 위해 필요한 데이터만을 포함하며, 불필요한 필드를 제외하는 등의 최적화가 가능하다.
어원/유래
"데이터 전송 객체(Data Transfer Object)"라는 용어는 마틴 파울러(Martin Fowler)가 정리한 소프트웨어 아키텍처 패턴 중 하나로 소개되며 널리 알려졌다. 그는 2002년 출간한 저서 『Patterns of Enterprise Application Architecture』에서 DTO를 원격 인터페이스를 통해 많은 양의 데이터를 효율적으로 전송하기 위한 패턴으로 정의하였다. 이 패턴은 원격 메서드 호출(RPC) 환경에서 네트워크 왕복 횟수를 줄이기 위한 목적으로 고안되었다.
특징
- 순수한 데이터 보관 목적: DTO는 데이터 저장과 전달 외의 기능(예: 비즈니스 로직, 영속성 등)을 포함하지 않는다.
- 불변성 또는 가변성: 사용 목적에 따라 불변 객체(immutable object)로 설계되기도 하며, 보통 가변성을 허용하여 직렬화 및 역직렬화를 용이하게 한다.
- 계층 간 경계의 명확화: DTO는 계층 간 데이터 전달 시 내부 구조를 외부에 노출하지 않도록 하여 캡슐화를 강화한다.
- 직렬화 가능: 주로 JSON, XML 등의 형식으로 직렬화되어 네트워크를 통해 전송되거나 저장된다.
관련 항목
- Value Object (값 객체)
- Plain Old Java Object (POJO)
- JavaBeans
- API 응답 객체 (Response Object)
- 마틴 파울러 (Martin Fowler)
- Enterprise Integration Patterns
※ 참고: 데이터 전송 객체는 소프트웨어 공학 분야에서 널리 사용되는 개념이며, 주로 자바, C#, 파이썬 등 객체지향 언어에서 구현된다.