[Spring] DTO란 무엇인가?

JunWoo An·2023년 11월 3일
0

스파르타코딩클럽

목록 보기
12/46
post-thumbnail

앞선 게시글에서 우리는 브라우저(클라이언트)로부터 서버가 어떤 방식으로 데이터를 담아 요청을 받는지 알아보았다.

URL에 데이터를 붙여 전송하는 방식은 데이터의 보안에 취약하다는 것을 알아보았다. 이러한 문제때문에 브라우저(클라이언트)와 서버간의 데이터를 전달하는 과정에서 DTO를 사용해야 한다고 한다.

그렇다면 DTO란 무엇일까?

DTO는 Data Transfer Object 의 약자로 프로세스 간에 데이터를 전달하는 개체입니다.
Web 서비스, 즉 Spring 환경에서의 DTO는 HTTP 요청의 데이터를 전달 받거나 계층(Controller, Service) 간의 이동 시에 사용 되는 객체라 이해하시면 좋을 것 같습니다.

여기서 중요하게 볼점은 '객체' 라는것이다. 이해하기 쉽게 생각하자면 여기서 객체는 데이터들을 포장한 포장박스같은 역할을 한다고 생각하면 쉬울것 같다.

DTO를 사용함으로써 얻을 수 있는 이점

  1. DTO를 사용함으로써 Client로부터 Entity의 정보를 숨길 수 있으며 내부 DB 구조를 변경하는 경우 코드를 유지하고 관리(유지보수)하는데 유리합니다.
  2. DTO와 Entity 클래스의 책임을 확실하게 분리할 수 있습니다.
    1. DTO와 Entity 클래스는 서로 다른 책임을 가지고 있습니다.
      • Entity 클래스는 DB의 Entity를 나타내며 일반적으로 ORM 목적으로 사용됩니다.
    2. e.g. 사용자의 정보를 반환하는 API가 있다고 가정했을 때 사용자의 주민번호와 같은 민감한 정보는 마스킹 하거나 제외하고 반환해야한다면?
      • 이때, Member Entity 클래스를 그대로 Controller에서 반환하게 된다면 해당 반환조건들을 충족하지 못하게됩니다.
      • Entity To DTO, 즉 Entity의 정보를 API 반환 조건에 맞는 DTO 객체에 담아 반환한다면 이를 해결할 수 있습니다.

이점으로 서술됬듯이 객체지향프로그래밍에서의 장점이 이곳에서도 나타난다. 우리는 객체지향 프로그램의 4가지 특성중 하나인 캡슐화를 생각하고 위글을 읽으면 DB와 직접적으로 연관되는 Entity의 정보를 클라이언트에게 숨길수 있는 캡슐화의 특성또한 장점으로 발휘됨을 알수있고 객체지향프로그램의 장점인 코드의 유지보수가 유리하다는 점 이있다. 또한 객체지향의 5가지원칙중 하나인 단일책임원칙을 통해 DTO와 Entity를 분리하여 각 기능에만 집중할수 있다는점이 있으며 클라이언트에게 반환하면안되는 데이터 등의 가공처리가 쉬워지는 장점이있다.

profile
도전하는 사람

0개의 댓글