DTO(Data Transfer Object)란 무엇일까?

서문🌙·2023년 4월 5일
0
post-thumbnail

DTO(Data transfer object)란 무엇일까?

  1. DTO 소개

    여러 계층이 존재하는 큰 응용 프로그램을 가지고 있다면, 서로 다른 이런 계층들 간에 데이터를 “전송” 해야합니다.

    데이터를 전송하기 위해서는 객체로 데이터를 캡슐화 해야 합니다. 이러한 유형의 객체 내부에 어떠한 로직은

    필요하지 않을 것이며, 직렬화 또는 역직렬화를 위한 일부 접근자, 변경자 및 파서만 가지고 있으면 될 것입니다.

  2. DTO란?

    프로그래밍 영역에서 DTO는 기본적으로 데이터를 프로세스 간에 보낼 수 있도록 데이터를 캡슐화 하는 객체입니다.

    (응용 프로그램의 한 시스템에서 다른 시스템으로) 이 유형의 객체는 N 계층 애플리케이션 중 서비스 계층에서

    가장 일반적으로 사용되며, 해당 계층과 나머지 컨트롤러 계층 간에 데이터를 전송합니다.

    출처 : https://examples.javacodegeeks.com/the-dto-data-transfer-object/

정리

DTO(Data Transfer Object) 는 계층 간 데이터 교환을 위해 사용되는 객체이다.
계층간(Controller, View, Business Layer) 데이터 교환을 위한 Java Bean을 말하며,
DTO는 로직을 가지지 않는 데이터 객체, getter, setter 메소드만 가진 클래스를 의미한다.

계층끼리 객체를 주면 될텐데 왜 따로 DTO를 만들어서 주는 걸까?

MVC 패턴을 사용하여 프로그램을 만든다고 가정했을 때, 우리는 Controller 에서 객체를 View로 넘겨주었고,

VIew 에서는 받은 객체로 출력에 필요한 행위들을 작업해왔다.

DTO를 사용하지 않았을 때 발생할 수 있는 문제점은 다음과 같다.

  • 만약 동료 개발자의 작업 파트는 View 부분 뿐이라고 했을 때, 매개변수로 넘어온 객체를 가지고 View 에 필요한기능을 작업해야 하는데, 여기서 실수로 동료 개발자가 도메인 메서드를 실행시키면 어떻게 될까?
  • 동료 개발자가 파라미터로 넘어온 도메인에 있는 메서드를 “View를 위해서 이 메서드를 사용해도 되겠지?” 라는 생각으로 도메인 메서드를 실행시킬 수 있다는 점을 고려해야한다.

이렇게 된다면 도메인의 값이 변경될 수 있다는 점을 생각 해야한다.
=> 값이 변경된다면 사용자들의 데이터가 망가진다.

즉, 도메인 자체를 넘겨주게 되면 View 에서 작업에 필요하지 않은 정보들까지 가지고 있게 된다.

이러한 상황을 막기 위해서, DTO를 사용하여 객체를 캡슐화 하게 된다면 작업에 필요한 데이터들만 담을 수 있게 되기 때문에 필요하지 않은 다른 정보들을 View를 개발하는 개발자는 알 수 없게되고, 도메인 메서드를 사용하는 것도 막을 수 있다.

- 출처 : 점프 투 스프링부트, ChatGPT
profile
예외(exception)는 있다

0개의 댓글