DTO(Data Transfer Object)

허준기·2023년 12월 23일
0

스프링

목록 보기
3/7

DTO(Data Transfer Object)

계층간 데이터 교환을 위해 사용하는 객체

DTO를 사용하면 중요한 정보를 노출시키지 않고 두 시스템(API와 서버 등) 간 통신을 원활하게 촉진 가능


MVC패턴에서 주로 ClientController 사이에서 DTO 사용

password와 같은 노출되면 안되는 값들을 위해 중간에서 DTO를 사용해줌!

https://blog.scottlogic.com/2020/01/03/rethinking-the-java-dto.html
출처 : https://blog.scottlogic.com/2020/01/03/rethinking-the-java-dto.html

순수하게 데이터를 저장하고, 데이터에 대한 getter, setter 만을 가져야 함

Spring에 의해 자동으로 직렬화, 병렬화

DTO 사용 이유

  1. Entity 클래스와 거의 유사한 형태임에도 DTO 클래스를 추가로 생성하는 이유 : Entity 클래스가 데이터베이스와 맞닿은 핵심 클래스이기 때문
  • Entity 클래스를 기준으로 테이블이 생성되고 스키마가 변경되는데, 화면 변경과 같은 사소한 기능 변경을 위해 테이블과 연결된 Entity 클래스를 변경하는 것은 너무 큰 변경
  • 프로그래머의 의도와 다르게 데이터가 변질될 수 있음
  1. 다양한 비즈니스 로직과 요구사항에 대해 유연하게 대응
  • 각 비즈니스 로직에 맞춪 필드들만 생성함으로써 DTO를 보면 어떤 값들이 매핑되는지 쉽게 파악할 수 있고, API 설계 상황에서 필드에 다른 이름을 부여하거나 하는 상황에서도 유연하게 대처 가능
  1. ControllerService 사이에서 강한 의존을 방지하기 위해
  • Service가 받고 싶은 파라미터가 Controller에게 종속적이면 의존하게 됨 → 방지하기 위해 Service가 원하는 포맷에 맞춰 Controller단에서 DTO를 통해 포맷을 맞춰줌
  1. View LayerDB Layer의 역할 분리
    객체를 표현하기 위한 계층과 저장하는 계층의 역할을 분리하기 위해서

느낌은 알겠는데 더 자세히 알기 위해서는 Spring의 동작원리에 대해서 잘 알아야 할 것 같다.

profile
나는 허준기

0개의 댓글