데이터 전송 객체(DTO) 정의 및 사용 방법

데이터 전송 객체(DTO)란 프로세스 사이에서 데이터를 전송하는 객체를 말합니다. DTO 기법을 사용하면 중요한 정보를 노출시키지 않고 두 시스템(API와 서버 등) 간 통신을 원활하게 촉진할 수 있습니다.

DTO는 프로그래밍 직업을 가진 사람들이 흔히 사용하는 솔루션입니다. 개발자분들이라면 이러한 솔루션과 원리에 대해 아마 알고 계실 것입니다. 하지만 일반 사용자에게는 DTO가 아주 아리송하게 느껴질 것입니다.

따라서 지금부터 DTO를 최대한 알기 쉽게 설명하겠습니다. 다만 원리를 설명하려면 약간의 기술적인 내용도 필요할 수 있다는 점을 말씀드립니다.

DTO란 무엇인가요?

앞서 말했지만 DTO는 데이터 전송 객체입니다. 이름에서 알 수 있듯이 DTO는 데이터 전송을 위해 생성되는 객체를 말합니다.

Python, C++, Java 같은 객체 지향 프로그래밍(OOP) 언어 환경에서 DTO를 사용할 수 있습니다. 따라서 DTO는 개발과 업데이트가 용이합니다.

OOP 환경은 "호출" 시스템을 이용합니다. 각 시스템은 데이터 조회와 같아서 시간과 처리 속도가 필요합니다. 이때 주의를 기울이지 않으면 다음과 같이 숨기고 싶은 중요한 데이터가 호출로 인해 노출될 수 있습니다.

  • 직원 주소
  • 계정 번호
  • 주민등록번호 
  • 기업 로그인 정보

어느 프로그래머도 얘기했지만 회사 출입 시 직원에게 이름과 사진을 요구할 수 있습니다. 이때 신원 확인을 위해 해당하는 데이터를 제공해야 합니다. 하지만 데이터베이스에 저장된 해당 직원의 다른 정보까지 제공할 필요는 없습니다. DTO는 필요한 데이터만 전송할 수 있습니다.

dto Sketch image

DTO 사용 방법

DTO에는 비즈니스 로직이 아닌 데이터만 저장해야 합니다. 또한 용량이 작은 단순한 환경으로, 한 가지 작업만 수행하는 것이어야 합니다.

효과적인 DTO는 다음과 같습니다.

  • 상용구 코드를 최소화합니다.코드를 일일이 새로 작성하기 때문입니다.
  • 작성이 용이합니다.DTO는 작성이 어려울 정도로 복잡해서는 안 됩니다. 다만, 이러한 코드는 깨지기도 쉽습니다.
  • 읽을 수 있어야 합니다. 누구든지 코드 구문을 분석할 수 있어야 합니다.

참고 자료

Data Transfer Object Pattern in Java: Implementation and Mapping. Stack Abuse.

Rethinking the Java DTO. (2020년 1월). Scott Logic.