DTO가 뭔지는 알고 쓰나?

후투티·2025년 3월 13일

잊지마!

목록 보기
8/20

"엔티티를 직접 클라이언트에게 노출되면 위험해~ 안 좋아~"
라는 말은 많이 듣곤 했다.
처음에는 그런가보다... 강사를 따라서 DTO를 만들어 반환하곤 했다.
왜??? 라는 걸 하기에 따라가기도 벅찼던 그 시절...⭐

그런데 이제는 프로젝트를 하게 되면서
"그래서 DTO가 뭐의 약자인 거지?"라는 의문이 들면서
왜 DTO로 반환을 해야하는 것인지 제대로 짚고 넘어가야겠다고 생각했다.

DTO란?

Date Transfer Object

데이터를 계층간(Controller - Service - Repository)이나
서버와 클라이언트 간에
데이터를 전송할 때 사용하는 객체이다.
즉, 이름 그대로 '데이터 전송 담당 객체'인 것이다.

DTO가 필요한 이유

1. 엔티티 보호

엔티티는 데이터베이스와 직결되는 객체이다.
때문에 보안문제가 생길 수도 있고 불필요한 정보 노출이 발생할 수 있다.
DTO를 사용하지 않고 엔티티를 그대로 반환하면
노출되면 안 되는 민감한 데이터(ex. 비밀번호, 토큰)까지 클라이언트가 볼 수 있게 된다.

2. 유연한 데이터 변환

JPA에서 조인 관계가 있는 경우,
엔티티를 반환하면 연관된 엔티티까지 반환된다.
따라서 불필요한 데이터까지 반환될 수 있다.
하지만 DTO를 사용하면 필요한 필드만 골라 클라이언트에게 전달 가능하다.

3. 성능 최적화

사실 2번과 이어지는 이야기이다.
엔티티를 반환하면 불필요한 데이터까지 조회하면서 쿼리 성능이 저하된다.
이와 달리 DTO를 활용하면 필요한 데이터만 선택적으로 조회할 수 있기 때문에 성능 최적화가 가능해진다.

4. 계층 간 분리

컨트롤러, 서비스, 리포지토리를 모두 엔티티로 작업을 했을시,
만약 엔티티 구조가 변경되면 모든 레이어의 코드들을 수정해야 한다.
레이어 간 '결합도'가 높아지게 되면서 유지보수가 어려워진다.

ConvertToDTO

엔티티 -> DTO 변환

클라이언트에게 데이터를 반환할 때 사용
필요한 데이터만 전달하게 되어 보안을 높이고 성능 최적화에 도움을 준다.

ConvertToEntity

DTO -> 엔티티 변환

클라이언트에게서 받은 데이터를 DB에 저장할 때

profile
모르는 건 모른다고 하는 사람

0개의 댓글