DTO(Data Transfer Object)의 의미와 필요성

DTO(Data Transfer Object)의 의미와 필요성

마틴 포울러는 DTO(Data Transfer Object)는 프로세스간의 데이타 전달을 효과적으로 하기위한 객체(object)이다 라고 정의했다.

Martin Fowler defines a Data Transfer Object as An object that carries data between processes in order to reduce the number of method calls.

https://en.wikipedia.org/wiki/Martin_Fowler_(software_engineer)

프로세스 사이에 데이타 전달을 위한 것이라면, REST API와 관계가 깊다.

DTO(Data Transfer Object)

DTO(Data Transfer Object)는 순수하게 데이터를 저장하고, 데이터에 대한 getter, setter 만을 가져야한다고 한다. 위키피디아에 따르면 DTO 어떠한 비즈니스 로직을 가져서는 안되며, 저장, 검색, 직렬화, 역직렬화 로직만을 가져야 한다고 한다.

도메인 대신 DTO를 사용하면 좋은 이유

DTO 대신 도메인 모델을 계층간 전달에 사용하면, UI 계층에서 도메인 모델의 메소드를 호출하거나 상태를 변경시킬 수 있다.

UI화면마다 사용하는 도메인 모델의 정보는 상이하다. 하지만 도메인 모델은 UI에 필요하지 않은 정보까지 가지고 있다. 이런 모든 도메인 모델 속성이 외부에 노출되면 보안 문제가 발생할 수 있다.

또한 도메인 모델을 계층간 전송에 사용하면, 모델과 뷰가 강하게 결합될 수 있다. view의 요구사항 변화로 도메인의 코드를 변경해야할 일이 생기는 것은 좋지 않다.

 

✔️ DTO 사용 시 장점을 요약하자면,

  1. 도메인 모델을 캡슐화 하여 보호할 수 있다.
  2. DTO 사용하면 model과 view의 결합 느슨하게 만들 있다.

 

요즘 인터넷에서 우리가 이용하는 앱들은 마이크로서비스 구조로 개발된 경우가 대부분이다.

카카오서비스를 예로 들자면, 카카오 전체 서비스는

  1. 로그인을 처리하는 인증서비스
  2. 메세지를 처리하는 서비스
  3. 음성통화를 처리하는 서비스
  4. 이미지를 처리하는 서비스
  5. 쇼핑을 처리하는 서비스 등

수많은 작은 서비스 들로 구성되며, 이들간에는 데이타 통신이 필요하다. 이 데이터 통신에 사용되는 교신을 REST API로 처리하는 경우가 많다.

통신이 잘 되려면 프로토콜이 깔끔해야 되듯이 마이크로 서비스 간에도 깔끔한 프로토콜이 필요하다.

이것이 지저분하게 되면 각각의 서비스간에 미스커뮤티케이션이 발생할 수 있고, 개발자들도 매우 피곤해 진다.

모든 일이 그렇듯이 표준화가 잘 되고 약속이 잘 지켜지면 일이 술술 풀리지만 그렇지 못하면 어딘지 불편하고 짜증이 나다가 결국은 사고로 이어지게 되는 것은 프로그램의 세계에서도 마찬가지다.

DTO를 정할 때 여러가지 유스케이스를 잘 생각해서 정해야하고, 또 실제 운영해 보면서 불편한 점은 쉽게 개선할 수 있도록 세심히 신경써야한다.

 

함께 보면 좋은 글

블록체인(Blockchain)에 대한 이해

 

DTO(Data Transfer Object)의 의미와 필요성”의 2개의 댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다