관리 메뉴

Unwound Developer

스프링 - DTO 본문

Web/Spring

스프링 - DTO

unwind 2023. 1. 24. 17:52
반응형

우선 DTO의 개념은 Data Transfer Object의 약자로, 

계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체라고 합니다.

 

제가 이해한대로 쉽게 풀어보자면, 우선 도메인 모델에 대해서 얘기해야 합니다.

도메인은 그냥 데이터베이스에 저장할 테이블의 형태입니다.

도메인 클래스 안에는 테이블의 컬럼들, 각 컬럼들의 속성, 테이블 이름 등 테이블을 만들 때 필요한 정보들이

기록되어 있습니다.

현재 개발중인 별글 프로젝트를 예시로 들어보자면,

Member 도메인 클래스

다음과 같은 형태입니다.

어노테이션으로 테이블임을 명시해주면, 클래스 내부에 컬럼들을 생성할 수 있습니다.

NotNull속성을 넣거나, 따로 컬럼이름을 설정할 수 있고, default값을 설정할 수도 있습니다.

그냥 데이터베이스의 테이블이라고 생각하면 편했습니다.

 

그런데, 클라이언트에서 이런 멤버 객체를 요청할 때, 혹은 클라이언트에게 멤버 객체를 반환할 때

불필요한 데이터나 전송해서는 안될 데이터도 같이 전송될 수 있습니다.

 

예를 들면, 클라이언트가 특정 멤버를 찾아달라는 요청을 가정합니다.

찾은 멤버의 정보를 다시 반환할 때, 멤버객체를 그냥 반환한다고하면,

해당 객체에는 비밀번호 등의 개인정보도 포함된 객체를 통째로 반환한 것입니다.

 

이에 필요한 데이터를 따로 요청/반환할 수 있도록 클래스를 만들어 사용하는게 DTO 방식입니다.

별글 프로젝트의 예시입니다.

멤버 RequestDto

 DTO는 요청시와 반환시 둘을 나누어 클래스를 작성합니다.

클라이언트에서 요청을 보낼때, 멤버 테이블의 모든 컬럼에 맞춰 데이터를 보내는 것이 아니라,

RequestDto에서 명시한 컬럼의 데이터만 서버에 보냅니다.

예를 들어 멤버 테이블에 전화번호 컬럼이 존재하지만, RequestDto에 명시하지않으면

클라이언트는 전화번호를 서버로 보내지 않아도 데이터를 서버로 보낼 수 있습니다.

DTO로 받아온 데이터로 멤버 객체생성

RequestDto객체는 builder메소드를 통해 멤버 객체를 만들게 됩니다.

ResponseDto

ResponseDto는 더 간단합니다.

그냥 이곳에 명시된 데이터들만 클라이언트로 반환됩니다.

설령 멤버 객체가 주민등록번호, 비밀번호 등의 정보를 가지고있어도

ResponseDto객체를 반환한다면 주민등록번호와 비밀번호는 클라이언트로 반환되지 않습니다.

 

반응형