Data Transfer Object의 약자로, 계층 간(Controller, View, Service Layer) 데이터 교환을 위한 자바 빈즈(Java Beans)를 의미한다. DTO는 로직을 가지지 않는 데이터 객체이고, getter/setter 메소드만 가진 클래스를 의미한다.
보통 Request로 넘어오는 body에 들어있는 각종 데이터들의 형태를 정해두어 변환 및 가공에 용이하도록 하기 위한 목적이다.
DTO의 사용 범위
MVC 패턴은 어플리케이션을 개발할 때 그 구성 요소를 Model과 View 및 Controller 등 세 가지 역할로 구분하는 디자인 패턴입니다. 비즈니스 처리 로직(Model)과 UI 영역(View)은 서로의 존재를 인지하지 못하고, Controller가 중간에서 Model과 View의 연결을 담당합니다.
Controller는 View로부터 들어온 사용자 요청을 해석하여 Model을 업데이트하거나 Model로부터 데이터를 받아 View로 전달하는 작업 등을 수행합니다. MVC 패턴의 장점은 Model과 View를 분리함으로써 서로의 의존성을 낮추고 독립적인 개발을 가능하게 합니다.
Controller는 View와 도메인 Model의 데이터를 주고 받을 때 별도의 DTO 를 주로 사용합니다. 도메인 객체를 View에 직접 전달할 수 있지만, 민감한 도메인 비즈니스 기능이 노출될 수 있으며 Model과 View 사이에 의존성이 생기기 때문입니다. 물론 소규모 프로젝트는 DTO 사용이 불필요한 경우도 있습니다.