> For the complete documentation index, see [llms.txt](https://injun-woo30000.gitbook.io/growth-log/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://injun-woo30000.gitbook.io/growth-log/i-learned/general-1/dto.md).

# DTO 논쟁에 대하여

## DTO 논쟁

<https://blog.daum.net/question0921/829>

### **DTO 패턴이 뭘까?**

DTO 패턴은 속성과 getter/setter 메서드로 구성된 자바 클래스 패턴을 말한다. 객체는 상태(state)와 행위(behavior)로 구성됨이 기본 원칙이지만 데이터만을 가지는 데이터 홀더의 개념과 단순 오브젝트로 구성된 도메인 모델 객체이다.

**각 계층간의 데이터 전달을 위한 최선의 선택으로 추천되고 있다.**

### **DTO 패턴의 문제점**

데이터를 전달할 때 데이터가 유실되고, 이 때 발생하는 에러를 디버깅하는데 상당히 많은 시간이 소요될 수 있다. 또한 도메인 모델을 DTO 모델로, DTO 모델을 도메인 모델로 전달하는 추가적인 작업 비용이 발생한다.

굳이 사용할 필요가 없는데 남용되는 경향이 있다.

### **DTO의 빈약한 도메인 모델(Anemic Domain Model)에 대한 논쟁**

객체에 상태와 행위가 들어가는 것이 아닌, 오로지 상태만 들어가므로 구조적으로 불합리한 형태의 코드를 생산하게 한다고 한다. 모든 도메인은 행위에 해당하는 로직을 가지고 있고, 그 로직을 어떠한 형태로든 나타내야 하는데 그것이 도메인의 상태 정보만 가지고 있는 빈약한 도메인 모델에서 모두 빠져나 다른 형태로 구성되기 때문.

때문에 도메인 객체의 데이터홀더(Data holder)화와 서비스 레이어의 비대를 초래할 수 있다.
