데이터 전송 객체

정의
데이터 전송 객체(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#, 파이썬 등 객체지향 언어에서 구현된다.

둘러보기

더 찾아볼 만한 주제